Задать вопрос
Ответы пользователя по тегу discord.py
  • Как сделать систему напоминаний с защитой от флуда этих самых напоминаний в discord.py (disnake)?

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

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

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

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

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

    Чтобы получить баннер нужно взять случайного пользователя и проверить наличие Member.banner, повторять пока не найдется.

    Обновить баннер сервера можно через Guild.edit

    @tasks.loop(hours=2)
    async def change_banner():
       user_with_banner = await find_user()  # реализовать самому
       guild = await get_guild()  # реализовать самому
       await guild.edit(banner=user_with_banner.banner)
    Ответ написан
    Комментировать
  • Как подружить команду mute и unmute?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как подружить команду mute и unmute?
    Mute и Unmute дружите. Годится?

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

    Для начала разберемся в терминологии дискорда. То что вы делаете называется таймаутом пользователя, мут в отличии от таймаута автоматически не снимается. В данном случае это важно потому что вероятно вы все 16 часов гуглили не то.
    Таймаут не требуется хранить и отслеживать - специально для этого у объекта пользователя есть атрибут Member.timed_out_until, там будет None если таймаута нет или datetime его истечения.

    Далее. Если пытаетесь что-то хранить используйте для этого базу данных, а не словари. Первое же отключение бота приведет безвозвратной потере данных в ваших словарях и никакая дружба вам не поможет.

    И перейдите уже на слеш-команды. 80% кода состоит из валидации полей, вам там ок игнорировать последние 2 года развития библиотек?
    Ответ написан
  • Можно ли в текст embed вставить ссылку?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    У ембеда нет поля name, есть title и description.

    В заголовок вставить нельзя, В тело, как и почти везде вставляется маркдауном [example](example.com)
    Ответ написан
  • Как сделать проверку на упоминание участника и числа?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Использовать слеш команды вместо префикса. Они на этапе ввода не позволяют вводить ошибочные типы данных и приводят значения к нужным типам
    commands#converters
    Ответ написан
  • Как использовать paginator для команды help на библиотеке disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В disnake нет встроенного пагинатора. Обратитесь к документации библиотеки, которую вы пытаетесь использовать и посмотрите как правильно использовать объект Paginator.
    Ответ написан
    Комментировать
  • Как решить disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'timeout'?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как решить disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'timeout

    Научиться пользоваться переводчиком. Изучить основы языка. Прочитать документацию к библиотеке, хотя бы основной туториал.

    Отсылая к высказыванию классика Vindicar: "Боты это не просто".

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    На офф сайте мне не понятно и нет примеров использования.
    Зато там есть информация, что в меню не может быть больше 25 пунктов.
    Если у вас меньше 25 участников, доставайте их из Guild.memders
    Ответ написан
    Комментировать
  • Как мне добавить команду по которой будет вызываться class MyModal?

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    interaction.author

    UPD: Просто сделать так не получится, поскольку вторая модалка ничего не знает о первой. Так же как вы храните людей в БД нужно хранить там же связку id кнопки: человек.
    Альтернативный способ хранить информацию о пользователе (ник или айдишник) в тексте эмбеда и читать его оттуда.
    Ответ написан
    8 комментариев
  • Ошибки с discord.ext ipc, как исправить?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Перевести ошибку. От вас ожидается аргумент "клиент".

    Вообще в discord.ext есть только 2 модуля: commands и tasks.
    Если используете какой-то специфичный форк библиотеки, лучше связываться с автором.
    Единственная библиотека, которую я нашёл по фразе discord ipc 3 года как заброшена, а репозиторий в read-only.

    Собственно в репозитории, который вы приложили в issue все описано. Не стоит пытаться писать ботов по туториалам, особенно если им больше одного года.
    скрин issue
    6641050612054947943729.png
    Ответ написан
  • Как сделать чтобы кнопки работали после перезапуска бота?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    prostovladikxd ознакомьтесь с правилами ресурса. Поправьте код в вопросе, чтобы он стал читаемым для этого используйте кнопку </> в панели. В будущем старайтесь внимательней подходить к формулировкам и подкрепляйте их кодом: что еще за кнопки перед модальным окном, где этот код? Куда нужно передать параметр self.author? Почему у вас в вечной вьюхе нужен автор? Почему вы в момент создания не знаете данных?

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

    Я бы рекомендовал вообще не иметь параметров. Вечная вьюха на то и вечная, что не должна пересоздаваться чтобы что-то в ней поменять. Или если в ней не нужно ничего менять зачем тогда параметры? Данные стоит хранить независимо в базе данных, а из вьюхи их читать. Да и имена полей намекают что эти данные стоило бы хранить в базе. В общем ощущение, что проблема у вас не с кнопками, но чтобы на это ответить нужно понимать что вы хотите.

    По коду который вы приложили повторно создается ощущение, что вам не нужны все эти параметры. Эти данные должны где-то храниться. Если не в базе данных, то в самом сообщении, к которому прикреплена кнопка.
    Ответ написан
    2 комментария
  • Как хранить id сообщений и аттрибуты viev`ов?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Научится работать с базами данных и хранить все данные там. Наиболее простой вариант - sqlite.
    Ответ написан
  • Из за чего пишет "Неизвестная интеграция"?

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

    У вас на второй строчке код вероятно падает с ошибкой voice_state = self.get_voice_state(guild_id). Я на 99% уверен, что в вашем классе нет такого метода. Чтобы ответить точно нужен весь код, но чаще всего в когах объект бота лежит в self.bot.
    Разберитесь почему вы не видите ошибки, потому что в консоль, где запущен бот должно все нужное приходить, если только вы их не глушите где-то выше.

    Ну и сразу по последующему коду замечу, что вы не можете вызывать дважды response, потому что ответ можно выдавать только один раз.
    Кроме того писать сообщение в духе "я сделаль" до того как реально что-то сделали дурной тон. Как минимум потому что по причине выше вы могли бы выдать сообщение и упасть с ошибкой на самом деле ничего не сделав.
    Ответ написан
    Комментировать
  • Как локализовать label в декораторе button ui?

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

    Для всего остального используйте другое решение и библиотеки, например i18n
    Ответ написан
    Комментировать
  • Не выдаёт роль что делать?

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

    Чтобы определить какой из двух вариантов случился в вашем случае нужно перестать обрабатывать ошибки принтами и читать Traceback, там все будет написано.
    Ответ написан
    1 комментарий
  • Pycord, как передать сообщение отправленное боту по команде в отдельный канал?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Достаете канал по id через get_channel, отправляете через сhannel.send

    channel_id = ... # достаете из БД или оттуда где у вас хранится id нужного канала
    channel = bot.get_channel(channel_id)
    channel.send(feedback_message.content)
    Ответ написан
    Комментировать
  • Как взять данные с базы данных, в app_commands.Choice?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Для этого используется декоратор autocomplete
    async def fruit_autocomplete(
        interaction: discord.Interaction,
        current: str,
    ) -> List[app_commands.Choice[str]]:
        fruits = ...  # Список данных полученный из БД
        ... # Фильтрация списка 
        return [
            app_commands.Choice(name=fruit, value=fruit)
            for fruit in fruits if current.lower() in fruit.lower()
        ]
    
    @app_commands.command()
    @app_commands.autocomplete(fruit=fruit_autocomplete)
    async def fruits(interaction: discord.Interaction, fruit: str):
        await interaction.response.send_message(f'Your favourite fruit seems to be {fruit}')


    В данном примере функция fruit_autocomplete будет вызываться при наборе каждой буквы. Делаете вместо статичного списка чтение из БД (только убедитесь, что делаете один раз, а не при наборе каждой буквы!) и фильтруете результат на основе текущего ввода, который лежит в current.

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Таймаут под капотом максимально простая функция, работать не так он не может:
    if not (duration is MISSING) ^ (until is MISSING):
        raise ValueError("Exactly one of `duration` and `until` must be provided")
    
    payload: Dict[str, Any] = {}
    
    if duration is not MISSING:
        if duration is None:
            until = None
        elif isinstance(duration, datetime.timedelta):
            until = utils.utcnow() + duration
        else:
            until = utils.utcnow() + datetime.timedelta(seconds=duration)
    
    # at this point `until` cannot be `MISSING`
    payload["communication_disabled_until"] = utils.isoformat_utc(until)
    
    data = await self._state.http.edit_member(self.id, user.id, reason=reason, **payload)
    return Member(data=data, guild=self, state=self._state)


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

    P.S. Отформатируйте код вопроса через соответствующий тег.
    Ответ написан
    Комментировать