disnake
89 строк · 2.8 Кб
1# SPDX-License-Identifier: MIT
2
3"""An example on how to set up localized application commands."""
4
5import os
6from typing import Any
7
8import disnake
9from disnake import Localized, OptionChoice
10from disnake.ext import commands
11
12bot = commands.Bot(command_prefix=commands.when_mentioned)
13
14
15# For more details, see https://docs.disnake.dev/en/stable/ext/commands/slash_commands.html#localizations
16
17# For this example to work, you need to create a file `locale/de.json` containing the following:
18"""
19{
20"HIGHSCORE_COMMAND_NAME": "rekord",
21"HIGHSCORE_COMMAND_DESCRIPTION": "Zeigt die Rekordpunktzahl des Users innerhalb des gewählten Zeitraums.",
22"HIGHSCORE_USER_NAME": "user",
23"HIGHSCORE_USER_DESCRIPTION": "Der User, dessen Punktzahl gezeigt werden soll.",
24"HIGHSCORE_GAME_NAME": "spiel",
25"HIGHSCORE_GAME_DESCRIPTION": "Spiel, für das Punktzahlen gefiltert werden.",
26"HIGHSCORE_RANGE_NAME": "zeitraum",
27"HIGHSCORE_RANGE_DESCRIPTION": "Der Zeitraum zur Berechnung der Rekordpunktzahl.",
28
29"CHOICE_DAY": "Letzter Tag",
30"CHOICE_WEEK": "Letzte Woche",
31"CHOICE_MONTH": "Letzter Monat",
32
33"GAME_TIC-TAC-TOE": "Tic-Tac-Toe",
34"GAME_CHESS": "Schach",
35"GAME_RISK": "Risiko"
36}
37"""
38
39
40# localizations need to be loaded before the commands are defined
41bot.i18n.load(f"{os.path.dirname(__file__)}/locale/")
42
43
44@bot.slash_command()
45async def highscore(
46inter: disnake.CommandInteraction,
47user: disnake.User,
48game: str,
49interval: str = commands.Param(
50choices=[
51OptionChoice(Localized("Last Day", key="CHOICE_DAY"), "day"),
52OptionChoice(Localized("Last Week", key="CHOICE_WEEK"), "week"),
53OptionChoice(Localized("Last Month", key="CHOICE_MONTH"), "month"),
54]
55),
56):
57"""Shows the highscore of the selected user within the specified interval.
58{{ HIGHSCORE_COMMAND }}
59
60Parameters
61----------
62user: The user to show data for. {{ HIGHSCORE_USER }}
63game: Which game to check scores in. {{ HIGHSCORE_GAME }}
64interval: The time interval to use. {{ HIGHSCORE_RANGE }}
65"""
66db: Any = ... # a placeholder for an actual database connection
67data = await db.highscores.find(user=user.id, game=game).filter(interval).max()
68await inter.send(f"max: {data}")
69
70
71@highscore.autocomplete("game")
72async def game_autocomp(inter: disnake.CommandInteraction, string: str):
73# this clearly isn't great autocompletion as it autocompletes based on the English name,
74# but for the purposes of this example it'll do
75games = ("Tic-tac-toe", "Chess", "Risk")
76return [
77Localized(game, key=f"GAME_{game.upper()}")
78for game in games
79if string.lower() in game.lower()
80]
81
82
83@bot.event
84async def on_ready():
85print(f"Logged in as {bot.user} (ID: {bot.user.id})\n------")
86
87
88if __name__ == "__main__":
89bot.run(os.getenv("BOT_TOKEN"))
90