Задать вопрос
  • Как сделать так что бы можно было редактировать уже отправленный Embed с содержимым в Modal в библиотеке disnake?

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

    Его и так можно редактировать. Эмбед до отправки и после ничем не отличается, это просто абстракция над json'ом.
    - Вам нужно как-то (вероятно по id) получить сообщение в котором он лежит, скорее всего это InteractionMessage
    - В нем есть атрибут embeds, где лежит список текущих эмбедов и метод edit для редактирования, который тоже может принимать embeds.
    - Те эмбеды, что вы передадите в edit, заменят текущие.
    Ответ написан
    Комментировать
  • Бот не включает музыку discord.py. Что делать?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Если нет ошибок убедитесь что код вообще вызывается и что вы не глушите ошибки.
    FFmpegPCMAudio их возвращает либо если у вас не найден ffmpeg в системе, либо если не найден файл.
    Ответ написан
  • Как асинхронно загрузить apk на эмулятор, используя ppadb?

    fenrir1121
    @fenrir1121
    Начни с документации
    Судя по тому, что библиотека ppadb имеет версию 0.3.0.dev0 и последние изменения были 5 авг. 2020 г можно предположить, что она не дописана и вы можете дописать ее.
    В частности все, что делает метод install это дергает shell команду pm install с нужными аргументами и смотрит ее результат.

    Собственно тут вообще не ясно, что вы хотите получить от асинхронности? У вас синхронное общение с консолью андроида
    Ответ написан
  • Пишу дс бота на python через disnake, бот не выдает роль Ошибка: get() missing 1 required positional argument: 'iterable' что делать?

    fenrir1121
    @fenrir1121
    Начни с документации
    Убрать выделенную жирным часть. Мало того, что это не id сервера, так еще и аргумент должен быть позиционным, а не именованным.
    role = await disnake.utils.get(guild_id=member.guild.roles, id=1288137661596303402)
    Ответ написан
  • Пишу бота на telebo + sql, с sql кака то ошибка,не понимаю в чем ошиька, поможете?

    fenrir1121
    @fenrir1121
    Начни с документации
    sqlite3.OperationalError: no such column: telegram_id
    Помочь с переводом ошибки? В таблице нет колонки telegram_id.

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Способ с on_command_error почти верный, только ошибки слеш команд попадают в событие on_slash_command_error
    Ответ написан
  • Как сделать Monkey patch для AsyncIO debug mode для детальной информации?

    fenrir1121
    @fenrir1121
    Начни с документации
    Поскольку судя по описанию задача найти проблему, порекомендую готовый инструмент yappi для профилирования асинк кода, чтобы не городить свой.
    Ответ написан
  • Почему role = None?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Открываем доки, читаем:
    get_role(role_id, /)
    Parameters
    role_id (int) – The ID to search for.
    Returns
    The role or None if not found.

    ID роли вы достаете из собственной фукнции db_levels.get_id_role, следовательно вооружаетесь дебагером или принтами и изучаете, почему оттуда приходит какая-то роль, которую дискорд не может найти.
    Ответ написан
  • Как сделать, чтобы после выбора в disnake.ui.StringSelect отображалось имя меню?

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

    Если использую edit_original_response то выводит ошибку.
    Если я правильно вас понял, вы после операций во втором сообщении хотите поправить первое. Второе о первом вообще ничего не знает. До вызова inter.response.send_message можно получить сообщение из inter.message, сохранить id и затем его отредактировать.
    Ответ написан
    3 комментария
  • Забивается ли память бота от некоторых активных классов?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Забивается. А что вы хотите делать с этой информацией?

    Для начала disnake.ui.View это класс для создания вью, а не ее представление.
    Далее если очень упрощенно вью состоит из id, childrens и timeout_task.
    - По id определяется что-за формочка нажата
    - В childrens хранятся коллбеки на все функции, которые должны быть вызваны при операциях со всеми элементами на ней
    - timeout_task это корутина, которая спит timeout секунд, а дальше прибивает вью.

    В питоне очистка памяти осуществляется через счетчик ссылок на объект и поиск циклических ссылок, поэтому естественно пока она не прибита на все это будут ссылки и следовательно они будут висеть в памяти.

    Я напомню, что discord.py в целом кэширует данные по командам, серверам, пользователям и сообщениям, чтобы уменьшить обращения к API дискорда, так что может просто памяти докинуть, а не лезть в эту кроличью нору?
    Ответ написан
    6 комментариев
  • Можно ли создать 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
    Начни с документации
    Бот может использовать эмодзи любого сервера на котором он находится.

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