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

    Vindicar
    @Vindicar
    RTFM!
    Храни список (в файле, а лучше в базе данных) ID заблокированных, при поступлении команды проверяй что ID отправителя сообщения нет в списке.

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

    Vindicar
    @Vindicar
    RTFM!
    Если нужно обрабатывать последовательность сообщений, описывай автомат состояний.
    Каждое состояние - это ситуация, когда бот ожидает некий набор возможных ответов.
    Каждый ответ - это переход из состояния в состояние.
    При обработке сообщения смотришь, какие переходы есть в текущем состоянии, выбираешь наиболее подходящий и выполняешь его логику.
    Ответ написан
  • Как можно сделать бонус раз в 24 часа?

    Vindicar
    @Vindicar
    RTFM!
    Фиксируешь время нажатия на кнопку.
    Выбираешь из базы значение предыдущего времени по id пользотеля запросом SELECT.

    Если значения нет, человек пишет в первый раз, заносим значение времени и id пользователя в базу запросом INSERT. Отправляем сообщение о бонусе.

    Если значение есть, и разница между ним и текущим временем более 24 часов, человек может получить бонус. Обновляем значение в базе запросом UPDATE и отправляем сообщение о бонусе.

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

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

    Есть несколько способов их реализации, хорошо подумай, какой удобнее. Например, вариант с матрицей переходов будет работать плохо.
    Ответ написан
    Комментировать
  • Как cделать доступ к команде только для меня?

    Vindicar
    @Vindicar
    RTFM!
    Если "только для меня" = "только для владельца бота", то discord.ext.commands.is_owner(). Можно использовать как декоратор для обработчика команды.
    Ответ написан
    Комментировать
  • Как сделать так чтобы бот discord писал другому юзеру, когда он нажимает на реакцию?

    Vindicar
    @Vindicar
    RTFM!
    Судя по тегам discord и python, хотите использовать discord.py?
    В таком случае, нужно обрабатывать событие на простановку реакции, добыть id юзера, который её проставил, отправить сообщение этом юзеру по его id.

    Самые азы работы с библиотекой тут.
    Ответ написан
    Комментировать
  • Как заставить дискорд бота отправлять сообщения в случайное время?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала определи, что понимается под случайным временем.
    Например, "одно сообщение через каждые t секунд, где t - равномерно распределённое число от 300 до 3600"
    Или "выбрать случайный момент времени в сутках, дождаться его наступления, отправить реплику"
    Или "пусть бот каждый N секунд бросает кубик, если выпала единица - выводим сообщение".
    Все три способа подразумевают разную реализацию и разные ограничения.

    Я полагаю, делаешь бота на discord.py?
    Тогда копай в сторону:
    1. модуля random, чтобы понят как генерировать случайные числа
    2. раздел документации по discord.py посвящённый длительным процессам.

    Логика примерно такая:
    1. Разберись по примеру выше, как делать простой цикл, чтобы бот писал что-то в консоль.
    2. Используй asyncio.sleep() чтобы задержать выполнение цикла на какое-то время.
    3. Научись генерить случайные числа с помощью модуля random, и сделай задержку случайной.
    4. Научись делать случайный выбор сообщения с помощью random.choice()
    5. Научись отправлять сообщения в канал а не в консоль (метод, который пригодится)

    Подробнее - только кодом.
    Ответ написан
  • Как забрать сразу несколько ролей?

    Vindicar
    @Vindicar
    RTFM!
    Напиши функцию, которая берёт такую строку, превращает её в массив.
    API remove_roles() позволяет указать несколько ролей сразу, просто распакуй массив в список аргументов через *.
    input_str = '123 456 789'
    role_ids = input_str.split()
    reason = 'Потому что гладиолус!' #или None
    target_member.remove_roles(*role_ids, reason=reason)
    Ответ написан
    1 комментарий
  • Проблема с cogs, переделал код и не могу понять в чём проблема?

    Vindicar
    @Vindicar
    RTFM!
    Из документации по purge():
    You must have the manage_messages permission to delete messages even if they are your own (unless you are a user account). The read_message_history permission is also needed to retrieve message history.

    У бота точно есть разрешения на это?

    Далее, purge(limit = 1) - что вообще пытаетесь сделать? Удалить сообщение с командой? purge() вообще-то для массовых удалений по критерию.
    Не лучше ли будет использовать ctx.message.delete()?
    Ответ написан
    1 комментарий
  • Как исправить ошибку discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, фигачить cursor.execute() прямо в f-строку - это очень, очень плохая идея. За такое бьют по пальцам.
    Во-вторых, not subscriptable означает, что ты пытаешься обратиться по индексу (типа x[0]) в то время как объект (x) - это None.
    90% шанс что это вызов .fetchone()[0] - запрос к базе не находит нужную строку, тогда fetchone() возвращает None, а дальше попытка получить индекс от None генерирует исключение.

    Никогда, НИКОГДА не пиши в f-строках выражение сложнее чем 2*2. Вынеси промежуточный результат в переменную, проверь её значение на корректность, затем уже используй.
    Ответ написан
    Комментировать