Ответы пользователя по тегу Discord
  • Как получить все сервера discord?

    Vindicar
    @Vindicar
    RTFM!
    Нельзя, насколько я знаю, и слава богу. Кому это нужно вообще? Спамерам разве что.
    Ответ написан
    Комментировать
  • Как сделать что бы участник сервера дискорд мог задать вопрос разработчику через бота discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Взять и сделать.
    Обработчик на команду (если хочешь использовать help, придётся отключить встроенный help), который посылает принятую в параметрах команды строку в заранее заданный (по ID) канал.
    Как писать обработчики команд, приведено в докуменации на discord.py. Чуть подробнее почитай, как получить строку из нескольких слов, чтобы не пришлось писать !help "у меня такой вопрос", а можно было писать !help у меня такой вопрос.
    Как получить канал - ищи в документации Client.get_channel() и описание объекта канала - PrivateChannel для прямых сообщений и GuildChannel для канала на сервере, смотря куда хочешь писать.
    В чем конкретно проблема?
    Ответ написан
  • Как перенаправлять уведомления из группы Discord в Telegram?

    Vindicar
    @Vindicar
    RTFM!
    Используй комбинацию discord.py и aiogram. Придётся вчитаться в документацию, чтобы понять как запустить их вместе. Как поймешь - дальше просто, прописываешь обработчик сообщений от дискорда, проверяешь сообщение на предмет уведомление ли это, если да - переотправляешь в aiogram.

    А вообще, будет намного проще выделить в сервере отдельный канал для уведомлений, куда нельзя писать юзерам. Кому интересно - подпишутся на этот канал и поставят оповещения, кому не интересно - замутят.
    Ответ написан
    Комментировать
  • Как сделать что бы бот реагировал на сообщение discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Погуглить! Это показывается в Quick Start в доках discord.py.

    # вместо client.event может быть bot.event, смотря как названа переменная с объектом бота
    @client.event 
    async def on_message(message):
        # отсеиваем сообщения, которые отправили мы сами
        if message.author == client.user:
            return
        # а вот тут мы проверяем содержимое сообщения. Это пример.
        # Реальную логику проверки, разумеется, пишешь самостоятельно, под свои нужды.
        if message.content.startswith('$hello'):
            await message.channel.send('Hello!')
    Ответ написан
    Комментировать
  • Почему не добавляет роль по реакции?

    Vindicar
    @Vindicar
    RTFM!
    Удаление роли работает, а добавление нет?
    Первое, что бросается в глаза - при удалении роли не проверяется ID поста, на котором была поставлена реакция.
    ID точно задан корректно? Как целое число?
    Ответ написан
    5 комментариев
  • Возможно ли сделать в дискорде чтобы при нажатии на спойлер была какая-то команда?

    Vindicar
    @Vindicar
    RTFM!
    Нет. Спойлер - это исключительно форматирование, клиент уже знает содержимое под спойлером и просто его не показывает до нажатия.
    Ответ написан
    1 комментарий
  • Не получается добавить роль через реакцию, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    1.
    async def on_raw_reaction_add(self, payload : discord.RawReactionActionEvent):

    Откуда self, функция же не в классе?

    2.
    intents = discord.Intents.default()
    intents.members = True
    keep_alive()
    client.run(os.getenv("BOT_TOKEN"))

    Создали объект intents, но не передаёте его боту в client.run(), и вообще никак не используете.
    Ответ написан
  • Решил создать своего дискорд бота, выдает ошибку импортирования модуля discord, что делать?

    Vindicar
    @Vindicar
    RTFM!
    mshslv19, сколько интерпретаторов питона в системе? Используешь ли venv? Среда PyCharm любит создавать новое виртуальное окружение (отдельный интерпретатор питона со своими пакетами) под каждый проект.
    Вообще симптомы похожи на путаницу в интепретаторах, когда ставишь пакеты в общесистемный, а запускаешь скрипт в локальном.
    Ответ написан
    Комментировать
  • Как в discord переименовать название сервера по команде?

    Vindicar
    @Vindicar
    RTFM!
    await ctx.message.guild(name)
    Ну конечно так не будет работать. Ты доки вообще читал?
    Ответ написан
    Комментировать
  • Не работает on_member_join, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Интент member забыл включить поди?
    import discord
    intents = discord.Intents.all()
    discord.member = True
    bot = commands.Bot(command_prefix="!", intents = intents)

    И на странице где ключ от бота получал тоже настрой интенты.
    Ответ написан
  • Как написать логи для дискорд бота на pythone?

    Vindicar
    @Vindicar
    RTFM!
    Что значит логи в сервере? Выделить канал, где будет писать только бот?
    Ну тогда берешь ID этого канала, получаешь по нему объект канала (как - зависит от библиотеки, ты не написал которую используешь). Сохраняешь этот объект в глобальной переменной, при необходимости записать в лог - отправляешь сообщение в этот канал.
    Только это довольно непрактично - медленно, и при проблемах с соединением никакие логи не появятся.
    Ответ написан
    Комментировать
  • Как зделать валидацию аргумента?

    Vindicar
    @Vindicar
    RTFM!
    Zakkaru, читай документацию на используемую библиотеку. Если для discord.py, то тут тут.
    Ответ написан
    Комментировать
  • Как сделать вывод статуса бота discord?

    Vindicar
    @Vindicar
    RTFM!
    Обычно боты предоставляют событие для включения, типа on_ready.
    Для выключения это реально сделать только если ты выключаешь бота командой. Если просто завершить процесс бота, то бот скорее всего не успеет ничего сделать.

    Детали зависят от используемой библиотеки, которую ты не указал.
    Ответ написан
    2 комментария
  • Отмена цикла командой?

    Vindicar
    @Vindicar
    RTFM!
    Простого способа нет, так как каждое обращение к команде создаст новый выполняющийся экземпляр xpfarmm().
    Один способ - создать хранилище вида "id пользователя - логический признак". Например, словарь (dict). Каждому пользователю сопоставишь логическое значение. Если значения для id пользователя нет в словаре - пользователь не запустил команду. Если значение есть, и это True - команда выполняется. Если значение есть, и это False - команда должна быть остановлена.
    Тогда при запуске команды xpfarm:
    1. Убеждаешься, что id пользователя нет в словаре. Иначе отказ. (Пользователь ведь не может запустит ькоманду второй раз пока она работает?)
    2. Вносишь True в словарь для id пользователя.
    3. Входишь в цикл. На каждой итерации цикла проверяешь, не изменилось ли значение в словаре на False. Если изменилось, делаешь break.
    4. По выходу из цикла удаляешь значение из словаря.

    Убедись, что задержку в цикле делаешь через await asyncio.sleep(), иначе бот уснёт пока цикл не закончится, и не будет ни на что реагировать!

    А чтобы отменить, делаешь отдельную команду, которая ищет id пользователя в словаре. Если оно есть - заменяет его на False.
    Ответ написан
    Комментировать
  • Как решить проблему?

    Vindicar
    @Vindicar
    RTFM!
    async def on_report_button(inter):
    member = inter.author
    self.collticku.update_one({'_id': guild.id}, {'$inc': {'tnum': +1}})
    num = self.collticku.find_one({'_id': guild.id})['tnum']

    Поздравляю, ты попался на замыкании. on_report_button() будет всегда ссылаться на ТЕКУЩЕЕ значение guild - а к моменту вызова on_report_button() это текущее значение уже прошло через весь цикл for guild in self.bot.guilds и остановилось на последней гильдии из списка. От того, что ты создал on_report_button() несколько раз, это не изменится.
    Побороть можно через атрибуты функции. Внутри on_report_button() используй не guild, а on_report_button.guild. А после объявления on_report_button() (т.е. ВНЕ самой функции) присвой on_report_button.guild = guild. Тогда каждая версия on_report_button() будет иметь свою гильдию.
    Это касается ВСЕХ переменных, которые on_report_button() захватывает из вышележащей области видимости. Если они изменяются, то все копии этой функции будут видеть только последнее текущее значение.
    Ответ написан
    Комментировать
  • Discord.NET как предоставить пользователю роль?

    Vindicar
    @Vindicar
    RTFM!
    Получить объект нужного пользователя, затем вызвать на нём AddRoleAsync()?
    Без кода подробного ответа не будет.
    Ответ написан
    2 комментария
  • Random.uniform что делаю не так?

    Vindicar
    @Vindicar
    RTFM!
    random.uniform() принимает два параметра - целых числа.
    Ты передаёшь один параметр - кортеж из двух элементов.
    Это разные вещи.
    Неясно, зачем вообще тебе farm_timer и почему нельзя было написать просто random.uniform(61,65), но если хочется иметь именно кортеж, то можно сделать так:
    random.uniform(farm_timer[0], farm_timer[1])
    или так, если порядок и чсило элементов в кортеже точно соответствуют параметрам:
    random.uniform(*farm_timer)
    Ответ написан
    Комментировать
  • Что делать, если бот не находит пользователя на сервере?

    Vindicar
    @Vindicar
    RTFM!
    member = main_guild.get_member(member_id)
    AttributeError: 'NoneType' object has no attribute 'get_member'
    Ну чего тут гадать, нет такой гильдии. ID точно не перепутал?
    Кроме того, ты уверен что функция не запускает до того как бот подключился?
    Ответ написан
    Комментировать
  • Как сделать что бы бот в дискорде выдавал роли после правильного ответа на вопрос?

    Vindicar
    @Vindicar
    RTFM!
    Нужно хранить базу пользователей, и для каждого пользователя хранить id, состояние и метку времени.
    Состояние может быть одно из указанных:
    * стартовое - пользователь ничего не сделал
    * пользователю был задан вопрос
    * пользователь получил роль, тогда поле времени хранит момент, когда роль была получена.

    Тогда при реакции на команду или на сообщение ты ищешь ID пользователя в базе, и проверяешь, что он находится в корректном состоянии. Т.е. если реагируешь на личку, то пользователь должен быть в состоянии "задан вопрос". В нужные моменты сохраняешь в базу новое состояние, например, "задан вопрос" -> "выдана роль".
    Чтобы снять роль, время от времени ищешь в базе пользователей в состоянии "выдана роль", у которых с момента выдачи прошло достаточно много времени, снимаешь им роль и записываешь в базу новое состояние (стартовое).
    Ответ написан
    4 комментария
  • Как создать базу ответов?

    Vindicar
    @Vindicar
    RTFM!
    Ну если делать красиво, я бы сделал структуру такого вида:
    [
      {
        "inputs" : [ "привет", "здорово" ],
        "responses" : [ "привет {0}", "и тебе приветы" ]
      },
      {
        "inputs" : [ "пока" ],
        "responses" : [ "досвидос, {0}", "и тебе удачи!" ]
      },
    ]

    inputs - это список регулярных выражений, описывающих входящее сообщение.
    responses - это список строк-ответов.

    Идея такая:
    1. входящее сообщение проверяется на соответствие всем регулярным выражениям поочередно
    2. Если выражение совпало, выбирается случайная строка из числа ответов
    3. с помощью метода format() в строку подставляется имя отправителя сообщения
    4. результат отправляется как ответ на сообщение.

    Загружать вышеописанную структуру данных удобно с помощью модуля json.
    Ответ написан
    Комментировать