• Сколько живет Refresh token при реализации OAuth2 авторизации через Discord?

    fenrir1121
    @fenrir1121
    Начни с документации
    А зачем это писать в документации? Там стандартный формат ответа. Смотрите значение в поле expires_in
    Ответ написан
    Комментировать
  • Передали права на сервер в дискорде через ратник, что делать?

    fenrir1121
    @fenrir1121
    Начни с документации
    поддержка дискорда может восстановить права на сервер, если будет доказан факт кражи аккаунта?
    Этот вопрос нужно задавать службе поддержки, что они могут, а что нет зависит от обращающегося лица.

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

    и что лучше делать в этой ситуации
    Писать в поддержку. Морально готовится создавать новый сервер и повышать компьютерную грамотность чтобы больше не попадать в подобную ситуацию.
    Ответ написан
    6 комментариев
  • Как локализовать 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. Отформатируйте код вопроса через соответствующий тег.
    Ответ написан
    Комментировать
  • Системы для анализа эмоций в видео и автоматической генерации текстовых реакций. Существует ли такое?

    fenrir1121
    @fenrir1121
    Начни с документации
    Существует ли такое?
    Не существует.

    Эмоциональный контекст это что вообще? Есть определение и алгоритм его нахождения? Одно и то же видео может интерпретироваться в зависимости от возраста, воспитания, вероисповедания, интеллекта и десятка других факторов совершенно по-разному. Вероятно видео, которое трехлетнего ребенка приведет в восторг меня будет вгонять в тоску.

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

    Дополнительно хотелось бы иметь функцию, которая может отслеживать персонажей в видео и записывать информацию о них в файл для дальнейшего анализа
    Это пожалуйста. Берете opencv и вперед.

    какие подходы, фреймворки или библиотеки вы бы рекомендовали для реализации такой системы?
    Рекомендую не браться за задачу, которую вы описали, она слишком абстрактна. Ставьте четкие задачи и последовательно их решайте.
    Ответ написан
    Комментировать
  • Как сделать, чтобы действия были при определённой роли?

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

    Для проверки ролей в checks есть два декоратора checks.has_role и checks.has_any_role

    Применяются следующим образом
    @client.command()
    @app_commands.checks.has_any_role('Library Devs', 'Moderators', 492212595072434186)
    async def cool(interaction: discord.Interaction):
        await interaction.response.send_message('Сообщение увидит только человек с соответствующей ролью')

    Не забудьте обработать ошибки MissingRole и MissingAnyRole чтобы выдавать корректные сообщения об отсутствии прав.

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

    В общем же виде лучше отталкиваться не от ролей, а от прав, проверка делается через checks.has_permissions, а для более тонкой настройки на сервере зайди в настройки - интеграция и там можно поправить права под каждую команду. В отличии от варианта с ролями это не требует обновлений бота.
    Ответ написан
    Комментировать
  • Литература для последовательного изучения программирования?

    fenrir1121
    @fenrir1121
    Начни с документации
    Искусство Программирования - Д. Кнут
    Ответ написан
    7 комментариев
  • Как отключить кнопки после нажатия?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Обычно применяют два подхода. Либо удаляют кнопки, либо делают их не активными.
    for child in view.children:
        if isinstance(child, disnake.ui.Button):
            child.disabled = True
    await message.edit(view=view)
    Ответ написан
  • Не отображается слеш команда в списке команд. Сама команда реализована когом. Что нужно изменить в коде?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Не надо так делать
    660e372e0c002537203138.jpeg

    Давайте распутывать этот узел:

    Все классы расположенные в disnake.ui предназначены для упрощения создания компонентов. Не надо их с чем-то мешать, кроме миксинов, которые тоже предназначены для создания компонентов, например пагинации.

    Ваше создание команды мало того, что почему-то лежит в колбеке, так еще в декораторе идет запрос объекта bot, а у вас во-первых внутри класса он лежит в self.bot, во-вторых регистрация команд в когах осуществляется через commands.slash_command.

    Вся эта каша запускается только потому, что кусок кода с "командой" в рантайме никогда не вызывается. Ну и разумеется по этой же причине команда не видна.

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

    fenrir1121
    @fenrir1121
    Начни с документации
    Я рассмотрел несколько вариантов, но они либо были слишком базовы для моих нужд, либо требовательны к ресурсам.
    А как по вашему библиотека должна понимать что правильно? Придётся разбираться в "слишком базовых" вещах.
    Грамматические ошибки (например, "Я не знает куда он пошёл." должно стать "Я не знаю, куда он пошёл.").
    А может быть "Она не знает куда он пошёл"?
    NLP задачи это всегда или долго или дорого. А иногда и то и другое.

    Серебрянной пули не будет. По библиотекам смотрите на набор Natasha, в первую очередь на razdel. Или как альтернативу DeepPavlov.
    Так же можно попробовать довериться в решении задачи современным LLM, но это отдельная кроличья нора со своими особенностями.
    Ответ написан
    1 комментарий
  • Бот дискорда падает в Rate limited, что делать?

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

    В общем виде ошибка 429 говорит, что в один из двух лимитов вы не укладываетесь. Чтобы не происходила ошибка можно перед выполнением действий проверять блокировку через AutoShardedClient.is_ws_ratelimited, но это не лечение проблемы, а только обработка.
    Для лечения нужно перехватывать ошибку в глобальном обработчике и по стеку вызовов смотреть на каком действии она происходит. Если приложите стектрейс к запросу, можно будет по нему сказать конкретнее. Только убедитесь чтобы логи не обрезались как у вас выше. Может быть и так было бы понятно, но эндпоинт https://discord.com/api/v10/channels/1215300998588... весь не видно. Учитывайте что она может и в разных когах происходить об этом ниже.

    В целом дискорд не любит, когда боты делают что-либо без явных действий пользователя. Причем чем больше бот, тем строже, поскольку для них это больше нагрузки. К примеру в коде, который вы приложили есть обновление статуса каждые 10 секунд. Будем объективны, пользователям плевать что у бота в статусе, но эти запросы так же идут в общий рейт лимит. Я бы советовал поставить или большое значение (5-10 минут) или вообще избавиться от этой карусели.
    Аналогично пройдите по остальному коду, который не приложен и посмотрите есть ли периодические запросы без явных команд: например обновления каких-нибудь сообщений по таймерам. Если есть увеличивайте таймеры в 2 раза (повторять до исправления) или подумайте как предоставлять функционал без этого.
    Ответ написан
    2 комментария
  • Как исправить ошибку "is not a valid parameter annotation" слэш-команды в когах?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В слеш командах типы не просто показывают что за объект, но и выполняют конвертацию.
    Документацией в слеш командах разрешены следующие типы
    str
    int
    float
    bool
    disnake.abc.GuildChannel*
    disnake.User or disnake.Member**
    disnake.Role**
    disnake.Attachment
    disnake.abc.Snowflake***

    Судя по тому, что вы пытаетесь принимать commands.Context, которого в слеш командах нет, вы с предыдущих вопросов так и не ознакомились с различиями между обычными командами и слешами.

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

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вы делаете цикл по текстовым полям и добавляете их как отдельные поля ответа
    for key, value in inter.text_values.items():
                embed.add_field(
                    name=key.capitalize(),
                    value=value[:1024],
                    inline=False,
                )


    Чтобы они были в одну строчку, нужно добавить их в одно поле.
    embed.add_field(
            name='Заголовок',
            value=f'{inter.text_values.get("date",  "")}{inter.text_values.get("time",  "")',
            inline=False,
    )
    Ответ написан
    1 комментарий
  • Как сделать такую капчу?

    fenrir1121
    @fenrir1121
    Начни с документации
    В telebot нет встроенного генератора каптч. Берете любую библиотеку из поиска, которая вам подходит.
    Например captcha или pyTelegramBotCAPTCHA
    Ответ написан
    Комментировать
  • Как исправить ошибку "AttributeError: 'set' object has no attribute 'items'" в дискорд-боте?

    fenrir1121
    @fenrir1121
    Начни с документации
    Почитайте этот пример, запустите его и посмотрите на результат
    s = {'123'}
    d = {'token': '123'}
    print(type(s))
    print(type(d))


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

    fenrir1121
    @fenrir1121
    Начни с документации
    Юзерботы запрещены TOS дискорда.
    Ничего не мешает делать ту же логику обычным ботом.
    Ответ написан