Задать вопрос
  • Как сделать кнопку с выбором ролей?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Это стандартный селектор discord.ui.RoleSelect
    Ответ написан
    Комментировать
  • Как разрешить использование кнопки только определённым ролям?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Для проверки ролей есть checks.has_role для одной роли и checks.has_any_role если нужно чтобы была одна из нескольких ролей.
    Ответ написан
    1 комментарий
  • Тег роли через Disnake бот?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Код колбека тут не при чем. Убедитесь что боту выданы на это права в консоли разработчика.

    Разрешения на упоминания в боте настраиваются через AllowedMentions и по умолчанию они все проставлены в True.
    Ответ написан
    1 комментарий
  • Что использовать в качестве workerА для отложенных задач?

    fenrir1121
    @fenrir1121
    Начни с документации
    Для длительного хранения нужно использовать базу данных, а не redis или selery.
    Отдельный воркер вообще не обязателен, если нет вычислительных задач.

    Раз в миниту/час/день ходишь в базу и смотришь не наступило ли время выполнения, если наступило выполняешь.

    Можно добавить полезных оптимизаций: засыпать до ближайшего события или до инсерта новых записей, читать сразу батчами, держать ближайшие события в памяти и проверять только их, но в целом не обязательно.
    Ответ написан
    1 комментарий
  • Постоянная ошибка: nextcord.errors.ConnectionClosed: Shard ID None WebSocket closed with 1000. Как решить?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Дискорд примерно раз в 2 часа отключает клиентов с целью балансировки нагрузки. Это нормальное поведение, обработка которого есть в самой библиотеке.
    Если ваше соединение не восстанавливается, вероятно ваш бот не нравится дискорду.
    Ответ написан
  • Как локализировать название и описание слеш команды используя disnake.Locale?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Внимательно читать документацию и корректно соблюдать нейминг.
    Для команд и аргументов в файле с локалью ru.json, должны быть строки вида XYZ_NAME и XYZ_DESCRIPTION.
    Посмотреть пример
    # For this example to work, you need to create a file `locale/de.json` containing the following:
    """
    {
        "HIGHSCORE_COMMAND_NAME": "rekord",
        "HIGHSCORE_COMMAND_DESCRIPTION": "Zeigt die Rekordpunktzahl des Users innerhalb des gewählten Zeitraums.",
        "HIGHSCORE_USER_NAME": "user",
        "HIGHSCORE_USER_DESCRIPTION": "Der User, dessen Punktzahl gezeigt werden soll.",
        "HIGHSCORE_GAME_NAME": "spiel",
        "HIGHSCORE_GAME_DESCRIPTION": "Spiel, für das Punktzahlen gefiltert werden.",
        "HIGHSCORE_RANGE_NAME": "zeitraum",
        "HIGHSCORE_RANGE_DESCRIPTION": "Der Zeitraum zur Berechnung der Rekordpunktzahl.",
    
        "CHOICE_DAY": "Letzter Tag",
        "CHOICE_WEEK": "Letzte Woche",
        "CHOICE_MONTH": "Letzter Monat",
    
        "GAME_TIC-TAC-TOE": "Tic-Tac-Toe",
        "GAME_CHESS": "Schach",
        "GAME_RISK": "Risiko"
    }
    """
    
    
    # localizations need to be loaded before the commands are defined
    bot.i18n.load(f"{os.path.dirname(__file__)}/locale/")
    
    
    @bot.slash_command()
    async def highscore(
        inter: disnake.CommandInteraction,
        user: disnake.User,
        game: str,
        interval: str = commands.Param(
            choices=[
                OptionChoice(Localized("Last Day", key="CHOICE_DAY"), "day"),
                OptionChoice(Localized("Last Week", key="CHOICE_WEEK"), "week"),
                OptionChoice(Localized("Last Month", key="CHOICE_MONTH"), "month"),
            ]
        ),
    ):
        """Shows the highscore of the selected user within the specified interval.
        {{ HIGHSCORE_COMMAND }}
    
        Parameters
        ----------
        user: The user to show data for. {{ HIGHSCORE_USER }}
        game: Which game to check scores in. {{ HIGHSCORE_GAME }}
        interval: The time interval to use. {{ HIGHSCORE_RANGE }}
        """
        db: Any = ...  # a placeholder for an actual database connection
        data = await db.highscores.find(user=user.id, game=game).filter(interval).max()
        await inter.send(f"max: {data}")
    
    
    @highscore.autocomplete("game")
    async def game_autocomp(inter: disnake.CommandInteraction, string: str):
        # this clearly isn't great autocompletion as it autocompletes based on the English name,
        # but for the purposes of this example it'll do
        games = ("Tic-tac-toe", "Chess", "Risk")
        return [
            Localized(game, key=f"GAME_{game.upper()}")
            for game in games
            if string.lower() in game.lower()
        ]
    Ответ написан
    Комментировать
  • Шаблонизаторы Python?

    fenrir1121
    @fenrir1121
    Начни с документации
    Если не считать Django Templates на ум приходит только Mako.

    P.S. меня тоже интересует вопрос какой смысл скрывается за асинхронными шаблонизаторами и в чем проблема Jinja2
    Ответ написан
    Комментировать
  • Как избавиться от ошибки " 'Button' object has no attribute 'guild' "?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Передать аргументы в правильном порядке
    async def open_ticket(self, interaction: discord.Interaction, button: discord.ui.Button):
        ...
    Ответ написан
    1 комментарий
  • Как изменить отправленное Embed сообщение через бота на disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Для редактирования есть единственный метод edit_message, где в embed или embeds будет лежать ваш эмбед. Его нужно изменить или положить новый с измененными данными.

    С эмбедом можно работать через его методы, а можно работать с обычным словарем через методы Embed.to_dict и Embed.from_dict. Структура у него простая и подробно описана в офф документации.

    Далее пишите свою логику, которая будет искать нужный кусок текста и удалять его. Со вставкой будет проще, дописывайте в конец.
    Ответ написан
    Комментировать
  • Как отследить кто выгнал пользователя из голосового канала через логи сервера discord py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Всем привет, я знаю, то что нельзя отследить того, кто выгнал пользователя из голосового канала
    Да нельзя.

    Как можно получить того, кто выгнал пользователя из голосового канала?
    Никак.
    Ответ написан
    Комментировать
  • Как "зафиксировать" список в питоне?

    fenrir1121
    @fenrir1121
    Начни с документации
    Вернуться к изучению основ, разобраться как работают изменяемые объекты, что такое передача по ссылке и по значению, формулировать какую вообще задачу вы решаете подобным кодом.

    Сейчас вы ссылаетесь на один и тот же объект 3 раза, вместо создания нового объекта.
    Исправляется созданием плоской копии списка.
    lst = []
    l = []
    for i in range(3):
        l.append(i)
        lst.append(l[:])
    print(lst)
    Ответ написан
    Комментировать
  • Как обновить конфигурацию оконного менеджера без ребута?

    fenrir1121
    @fenrir1121
    Начни с документации
    Да, я пытался искать его в sxhkdrc хоткеях и в ридмишках софта, но там его нет.

    Потому что для ребута нужно его просто убить.
    Достаточно использовать команды в терминале, не обязательно хоткеи.
    # make sxhkd reload:
    super + Escape
    	pkill -USR1 -x sxhkd
    
    # quit/restart bspwm
    super + shift + {Escape}
    	bspc {quit}
    Ответ написан
    Комментировать
  • Как поменять формат времени в сообщении discord бота?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Тебе нужен discord timestamp в формате Relative time
    Ответ написан
    1 комментарий
  • Пожалуйста объясните мне как сделать систему прав?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Если я отвечу не то что вы ожидали, то детализируйте вопрос конкретными задачами, которые вы пытаетесь решить.

    В общем виде не нужно никакую информацию по правам хранить в БД. Стандартные правила создания команд подразумевают, что человек применяющий команду должен иметь права, которые требуются для использования действия исполняемого ботом: если хочешь выгнать участника командой для этой команды должна стоять проверка соответствующих прав у вызывающего участника. Для всего этого есть соответствующие декораторы, которые вешаются на команду. Изучите все что есть в checks, вроде checks.has_permissions()

    Когда же речь заходит о каких-то тонких настройках(например действие команды только в отдельном канале отдельной ролью) для этого прямо в дискорде есть раздел Настройки - Интеграция - Нужный бот, который позволяет эти настройки делать на уровне сервера, а не вносить их в код. Это удобнее и бот не будет прибит костыльными гвоздями к одному серверу.
    Ответ написан
  • Где возможно посмотреть количество Telegram звёзд которые получены от продаж в боте?

    fenrir1121
    @fenrir1121
    Начни с документации
    • Вкладка «Монетизация» доступна в разделе статистики канала только в том случае, если хотя бы половина подписчиков канала имеет телефонные номера, выданные не в России, Украине, Палестине, Израиле или Германии, а общее число подписчиков канала превышает 1000. Местонахождение владельца канала и номер телефона его аккаунта никак не влияют на отображение вкладки «Монетизация».


    Источник kod.ru
    Ответ написан
  • Нужен ли Docker Desktop для работы с Docker из под Windows + WSL2 (Ubuntu)?

    fenrir1121
    @fenrir1121
    Начни с документации
    Нет не нужен, это просто самый простой способ получить докер в винде.
    Инструкции есть на learn.microsoft.com#configure-docker-daemon
    Ответ написан
    Комментировать
  • Зачем вообще нужна библиотека python turtle в реальной практике?

    fenrir1121
    @fenrir1121
    Начни с документации
    Это дань языку Logo для обучения детей программированию. Собственно сейчас назначение такое же.
    Ответ написан
    Комментировать
  • Как сделать систему напоминаний с защитой от флуда этих самых напоминаний в discord.py (disnake)?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Всем привет, перепробовал несколько вариантов, но показать их не могу.
    У нас есть несколько вариантов ответа, но показать их не можем.

    Использую ивент on_message
    Не использовать on_message. Даже из его названия очевидно, что он работает на каждое сообщение.

    Переписать всю логику на команду, вместо чтения всех сообщений, обрабатывать только их.
    Ответ написан
  • Как сделать оповещение об отключении бота если он на хостинге?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    С текущими вводными разве что идти от обратного: постоянно слать пинг вроде "я живой". Если пинга нет, значит отключен.
    Для полноценных оповещений, как верно отметил Shandy вам нужен второй сервер, который будет заниматься мониторингом первого, в связи с чем вопрос, а зачем вам это нужно? Примерно любой хостинг дает аптайм в 99+%, что за волшебный хостинг, который отключает сервер.
    Ответ написан
    2 комментария