| 
 | 1 | + | 
 | 2 | +from config import DOMAIN_NAME  | 
 | 3 | +from discord.ext.commands import Bot  | 
 | 4 | +from discord.ext import commands  | 
 | 5 | +from discord import Embed  | 
 | 6 | + | 
 | 7 | +from app.common.constants import BeatmapGenre, BeatmapLanguage, DatabaseStatus  | 
 | 8 | +from app.common.database.repositories import beatmapsets  | 
 | 9 | +from app.common.database.objects import DBBeatmapset  | 
 | 10 | +from app.cog import BaseCog  | 
 | 11 | + | 
 | 12 | +class SearchBeatmapset(BaseCog):  | 
 | 13 | +    @commands.hybrid_command("search", description="Search for a beatmapset")  | 
 | 14 | +    async def search(  | 
 | 15 | +        self,  | 
 | 16 | +        ctx: commands.Context,  | 
 | 17 | +        *, query: str  | 
 | 18 | +    ) -> None:  | 
 | 19 | +        async with ctx.typing():  | 
 | 20 | +            if not (beatmapset := await self.search_beatmapset(query)):  | 
 | 21 | +                return await ctx.send(  | 
 | 22 | +                    'No maps for this query were found.',  | 
 | 23 | +                    reference=ctx.message,  | 
 | 24 | +                    ephemeral=True  | 
 | 25 | +                )  | 
 | 26 | + | 
 | 27 | +            await ctx.send(embed=self.create_embed(beatmapset))  | 
 | 28 | + | 
 | 29 | +    def create_embed(self, beatmapset: DBBeatmapset) -> Embed:  | 
 | 30 | +        embed = Embed(title=beatmapset.full_name, url=f"http://osu.{DOMAIN_NAME}/s/{beatmapset.id}", description="")  | 
 | 31 | +        embed.set_thumbnail(url=self.thumbnail_url(beatmapset))  | 
 | 32 | +        embed.add_field(name="Title", value=beatmapset.title)  | 
 | 33 | +        embed.add_field(name="Artist", value=beatmapset.artist)  | 
 | 34 | +        embed.add_field(name="Creator", value=beatmapset.creator)  | 
 | 35 | +        embed.add_field(name="Status", value=DatabaseStatus(beatmapset.status).name)  | 
 | 36 | +        embed.add_field(name="Genre", value=BeatmapGenre(beatmapset.genre_id).name)  | 
 | 37 | +        embed.add_field(name="Language", value=BeatmapLanguage(beatmapset.language_id).name)  | 
 | 38 | +        return embed  | 
 | 39 | + | 
 | 40 | +    async def search_beatmapset(self, query: str) -> DBBeatmapset | None:  | 
 | 41 | +        return await self.run_async(  | 
 | 42 | +            beatmapsets.search_one,  | 
 | 43 | +            query  | 
 | 44 | +        )  | 
 | 45 | + | 
 | 46 | +async def setup(bot: Bot):  | 
 | 47 | +    await bot.add_cog(SearchBeatmapset())  | 
0 commit comments