Skip to content

Commit 03dc5e9

Browse files
committed
Implement /search command
1 parent 512df20 commit 03dc5e9

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed

app/bot.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ async def load_cogs(self):
2121
await self.load_extension("app.extensions.profile")
2222
await self.load_extension("app.extensions.top")
2323
await self.load_extension("app.extensions.simulate")
24+
await self.load_extension("app.extensions.search")
2425
await self.tree.sync()
2526

2627
def run():

app/extensions/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@
66
from .recent import RecentScore
77
from .profile import Profile
88
from .top import TopScores
9+
from .simulate import SimulateScore
10+
from .search import SearchBeatmapset

app/extensions/search.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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())

app/extensions/simulate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
from rosu_pp_py import Performance, Beatmap, PerformanceAttributes, DifficultyAttributes
2+
from rosu_pp_py import Performance, Beatmap, PerformanceAttributes
33
from discord import app_commands, Interaction, Embed
44
from discord.ext.commands import Bot
55
from config import DOMAIN_NAME

0 commit comments

Comments
 (0)