• Flask + Playwright?

    fenrir1121
    @fenrir1121
    Начни с документации
    Запрос в поиск по тексту ошибки выдаёт issue на гитхабе, где чётко сказано что playwright не является потокобезопасным и стоит использовать async.
    Ну и касательно подобного использования словаря стоит либо использовать каналы для общения потоков и изменять его только в одном потоке, либо использовать мьютексы
    Ответ написан
    Комментировать
  • Как сделать так, что-бы когда игрок писал команду /markov, бот отправлял случайное сообщение discord.py составленное цепями маркова?

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

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как реализовать работу бота на нескольких серверах Discord с вводом команды?
    Использовать базу данных. Удалить все глобалы.
    Не хотелось бы использовать базу данных
    А придется.
    Ответ написан
    1 комментарий
  • Лучший пример для использования aiohttp в веб приложениях?

    fenrir1121
    @fenrir1121
    Начни с документации
    пишу веб приложение с использованием FastAPI
    В документации есть пример использования DI для прокидывания объекта сессии в рамках одного запроса (или любой другой реализации).

    но вот пришло время остановить приложение и как только я его останавливаю - вероятнее всего у меня посыплются ошибки о не закрытом соединении
    Вы можете выполнять любую логику при остановке, в FastApi для этого есть событие shutdown. Если у вас долгоживущие сессии, завершайте их в этом событии.
    Ответ написан
    Комментировать
  • Почему код создаёт 5 тикетов вместо одного?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Код который вы приложили создаёт 1 канал и отправляет 1 ответ и 2 сообщения.
    Никаких пяти тикетов в нём нет.

    Разбивайте код при помощи функций на понятные логические единицы и тестируйте их.
    Ответ написан
    Комментировать
  • Найти сервер или название сервера Discord по ID?

    fenrir1121
    @fenrir1121
    Начни с документации
    Нет способа. Чтобы зайти нужен инвайт.
    Ответ написан
  • Бот не производит снятие ролей, если находится на хостинге и имеет большую базу данных. Как исправить?

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

    Переписывайте используя реальную базу данных.
    Ответ написан
    1 комментарий
  • Что лучше вытаскивать данные из БД(sqlite) или хранить в неких переменных?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Что лучше вытаскивать данные из БД(sqlite) или хранить в неких переменных?
    Если данные критичные и недопустима их потеря - хранить в БД, если допустимо их потерять из-за ошибок, отключений и прочего - хранить в переменных. Если и то и то, накапливать какое-то количество данных и скидывать в БД сразу батчем по таймеру или по достижению определенного размера.

    async def on_message(self, message: Message): ...
    on_message это событие, которое срабатывает на каждое сообщение, каждого пользователя. На среднего размера боте с несколькими сотнями серверов в активное вечернее время оно может дергаться тысячи раз в секунду, как сами думаете, насколько адекватно в таком событии ходить в базу? Насколько часто меняются каналы, чтобы каждый раз их доставать из БД? Знаешь ли условия, при которых данные в базе меняются и их нужно повторно перечитать?

    guild_id = message.guild.id
    Как думаете, что лежит в guild, если боту пишут в личные сообщения?

    Либо включайте голову и думайте почему вы делаете то или иное действие: нужны ли вам данные на чтение или на запись, могут ли они одновременно измениться, обрабатываются ли корнер кейсы и прочее или пишите как пишется, оптимизацией займетесь если дойдете до того, что она понадобится.

    Подскажите, как лучше для оптимизации процессов, и где можно на будущие брать полезную информацию о python.
    Читать книги, слушать подкасты, ходить на конференции.
    Ответ написан
    Комментировать
  • Как сделать работника микросервиса?

    fenrir1121
    @fenrir1121
    Начни с документации
    Не ясно при чем тут микро- или не микросервисы, но вероятно вам нужен Celery. Статей по его использованию очень много.
    Хорошая книга по проектированию компонентов системы - Fundamentals of software architecture
    Ответ написан
    3 комментария
  • Как сделать в боте внешние команды?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В Dev центре в разделе Installation разрешить User Install. После этого пользователь добавивший себе бота может использовать ApplicationCommands.
    как это выглядит

    6704a39437ef4511623649.png
    Ответ написан
    Комментировать
  • Как сделать так что бы можно было редактировать уже отправленный 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 комментариев