disnake

Форк
0
/
localizations.py 
89 строк · 2.8 Кб
1
# SPDX-License-Identifier: MIT
2

3
"""An example on how to set up localized application commands."""
4

5
import os
6
from typing import Any
7

8
import disnake
9
from disnake import Localized, OptionChoice
10
from disnake.ext import commands
11

12
bot = 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
41
bot.i18n.load(f"{os.path.dirname(__file__)}/locale/")
42

43

44
@bot.slash_command()
45
async def highscore(
46
    inter: disnake.CommandInteraction,
47
    user: disnake.User,
48
    game: str,
49
    interval: str = commands.Param(
50
        choices=[
51
            OptionChoice(Localized("Last Day", key="CHOICE_DAY"), "day"),
52
            OptionChoice(Localized("Last Week", key="CHOICE_WEEK"), "week"),
53
            OptionChoice(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

60
    Parameters
61
    ----------
62
    user: The user to show data for. {{ HIGHSCORE_USER }}
63
    game: Which game to check scores in. {{ HIGHSCORE_GAME }}
64
    interval: The time interval to use. {{ HIGHSCORE_RANGE }}
65
    """
66
    db: Any = ...  # a placeholder for an actual database connection
67
    data = await db.highscores.find(user=user.id, game=game).filter(interval).max()
68
    await inter.send(f"max: {data}")
69

70

71
@highscore.autocomplete("game")
72
async 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
75
    games = ("Tic-tac-toe", "Chess", "Risk")
76
    return [
77
        Localized(game, key=f"GAME_{game.upper()}")
78
        for game in games
79
        if string.lower() in game.lower()
80
    ]
81

82

83
@bot.event
84
async def on_ready():
85
    print(f"Logged in as {bot.user} (ID: {bot.user.id})\n------")
86

87

88
if __name__ == "__main__":
89
    bot.run(os.getenv("BOT_TOKEN"))
90

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.