• Можно ли создать cogs для событий?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вы прочитали гайд по библиотеке? Он у них есть.
    Для слушания событий в когах есть Cog.listener
    Ответ написан
    2 комментария
  • Бинарный поиск. Правильно ли работает?

    fenrir1121
    @fenrir1121
    Начни с документации
    Нет, не правильно.
    1) Возвращается значение, вместо индекса
    2) На пустом массиве будет ошибка
    К алгоритму не относится, но т.к реализовано на питоне
    3) list это ключевое слово в языке, крайне не рекомендуется его переопределять.
    Ответ написан
    1 комментарий
  • Почему event on_member_join не работает?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вероятно на портале для разработчиков не включено соответствующее разрешение
    1LCiuFF.png

    В коде проблем нет, хотя он несколько мудреный. Если хочется структурировать события, для этого стоит использовать disnake.Client
    import disnake
    
    class MyClient(disnake.Client):
        async def on_member_join(self, member: disnake.Member):
            guild = member.guild
            if guild.system_channel:
                to_send = f"Welcome {member.mention} to {guild.name}!"
                await guild.system_channel.send(to_send)
    
        async def on_ready(self):
            print(f"Logged in as {self.user} (ID: {self.user.id})\n------")
    
    intents = disnake.Intents.default()
    intents.members = True
    
    if __name__ == "__main__":
        client = MyClient(intents=intents)
        client.run(os.getenv("BOT_TOKEN"))
    Ответ написан
    4 комментария
  • Как интерпретировать данные в читабельный вид?

    fenrir1121
    @fenrir1121
    Начни с документации
    Обернуть data как кусок кода ```json ... ```
    Ответ написан
    Комментировать
  • Как использовать команду через кнопку в боте Discord?

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

    Судя по описанию подходят Application Commands.
    Либо учите пользователей вводить слеш-команды, в них использовать упоминания можно.
    Ответ написан
  • Как создать образ докер для чтения input?

    fenrir1121
    @fenrir1121
    Начни с документации
    скрипт нужно запускать на пк, где нет пайтона и пр.
    А зачем тогда в шапку выносите вопрос "Как создать образ докер для чтения input?"
    Вместо проблемы доставки питона переходите к более сложной проблеме доставки докера, для которого нужен включенный WSL.

    Правильный способ решения задачи, написать на языке, который позволяет скомпилировать бинарь.

    Быстрый способ использовать костыли в виде py2exe или других утилит для создания исполняемых файлов.
    Ответ написан
    1 комментарий
  • Как сделать список людей с определённой ролью?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Прочитать документацию Role.members
    Ответ написан
    Комментировать
  • Как организовать локальную разработку микросервисной системы в PyCharm?

    fenrir1121
    @fenrir1121
    Начни с документации
    Засовывать всё в докер, и сразу писать compose-файл? Но можно ли это всё потом интегрировать с IDE?
    Да все верно. В нижней панели, там же где терминал и питон консоль есть вкладка Services, там и логи и управление всеми запущенными (микро)сервисами.
    В compose достаточно стрелку ткнуть, он тебя первый раз попросить конфиг настроить и все.
    66c8250c766ad116037154.png

    Так же можно с ssh работать так что можно хоть локально запускать, хоть на удаленной машине
    66c8269e763a0228875878.png
    Ответ написан
    Комментировать
  • Как правильно использовать option в disnake?

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

    Ну, а вообще вы пытаетесь заявить, что amount должен иметь тип Option, тогда как он должен быть интом. Disnake под капотом пытается выполнять приведение типов согласно аннотациям
    amount: int = Option(...)

    Ну и если я правильно понял что вы делаете что-то такое
    import disnake
    from disnake.ext import commands
    
    @bot.slash_command()
    async def clear(
        inter: disnake.CommandInteraction,
        amount: commands.Range[int, 1, 5],
    ):
        ...
    Ответ написан
    Комментировать
  • Как сделать анимированные эмодзи disnake?

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

    Следовательно вашего бота нет на сервере, эмоздзи которого вы пытаетесь использовать.
    Ответ написан
    Комментировать
  • Как импортировать options из disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вы определитесь с тем, что вы нашли: options, Options, или Option.

    В диснейке есть только третий вариант - disnake.Option, по всем остальным вариантам идите туда, где вы их нашли.
    Ответ написан
  • Многостраничные модальные окна disnake?

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

    Нет и не будет. Нет ничего сложного, но модальные окна для этого не приспособлены так что надо писать свои велосипеды.
    Делаете обычную форму #1, по закрытию сохраняете куда хотите и редактируете сообщение, добавляя кнопку ведущую на форму #2, повторяете N раз.
    Ответ написан
    Комментировать
  • Как сократить код?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Такое количество запросов к БД с коммитами это кошмар.

    on_message это событие которые вызывается на каждое отправленное сообщение и в нём не рекомендуется использовать никаких запросов к БД.

    В событии максимум стоит накапливать информацию скажем в словаре, а по кулдауну (например раз в минуту) читать весь словарь и пачкой обновлять записи в базе одним коммитом.
    Ответ написан
    4 комментария
  • Как сделать страницы в модальных окнах disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Это не страницы, это 3 отдельных модальных окна, которые сшили костылями из кнопок "Далее" между собой. По закрытию формы выводите кнопку которая ведёт на следующую форму.

    А вообще для опросов есть отдельные сервисы, не обязательно забивать гвозди отвёрткой.
    Ответ написан
    3 комментария
  • Как сделать временный бан в Disnake с базой данных SQLite?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    1) Записать в БД время, когда нужно разбанить и id пользователя
    2) Сделать обычный бан
    3) Периодически (скажем раз в минуту) ходить в базу и доставать записи для которых время разбана меньше текущего времени
    4) Выполнить разбан всех полученных id, удалить записи из БД

    sqlite не имеет встроенного формата для дат и времени, так что я бы рекомендовал хранить время как INT, преобразуя datetime в timestamp.
    Ответ написан
    Комментировать
  • Как сделать кнопку с выбором ролей?

    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 часа отключает клиентов с целью балансировки нагрузки. Это нормальное поведение, обработка которого есть в самой библиотеке.
    Если ваше соединение не восстанавливается, вероятно ваш бот не нравится дискорду.
    Ответ написан