Ответы пользователя по тегу Боты
  • Как удалить последние 2 сообщения в телеграм боте?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Необходимо добавить member intents. А также включить privileged intents в настройках бота в developer portal. Документация. Вообще, примеров на эту тему в интернете море.
    Ответ написан
    Комментировать
  • Можно ли получать обновления с телеграм канала через Telegram API без добавления бота в этот канал?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С использованием Bot API - только если бота добавит админ канала. На чужой канал бот подписаться не может.

    С помощью клиентского API можно подписываться на чужие каналы и получать с них обновления, но это делается с реквизитами пользователя (своего) и канал должен быть публичным, чтобы на него можно было легко подписаться.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это можно, используя метод leaveChat. Достаточно id группы знать.

    До кучи, можно запретить в настройках бота у BotFather его добавлять в группы вообще, если это функциональностью бота не предусмотрено.
    Ответ написан
    1 комментарий
  • Код Telegram бота на компьютере работает нормально, залил на хостинг, парсер не работает, выдаёт ошибку, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В бесплатных тарифах на pythonanywhere ограничен список адресов, к которым можно обращаться:

    https://www.pythonanywhere.com/whitelist/

    Указанного адреса нет (но есть похожие). Может, надо обращться к одному из похожих?
    Ответ написан
    3 комментария
  • Как написать бот для создания ботов?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Конечно же можно. Но это весьма нетиповая задача, и поэтому нельзя ожидать готовых решений.

    Как одно из простейших, можно сделать бота на вебхуках и обойтись одним скриптом. При запуске инициализируем управляющего бота и по очереди всех клиентских ботов, вызываем от них метод set_webhook. Например, делаем что-то типа site.ru/webhook/control и site.ru/webhook/{bot_token}. Затем запускаем основной метод используемого фреймворка (например, flask или aiohttp).

    Описываем два обработчика, /webhook/control для управляющего бота и /wehook/{bot_token} для клиентских ботов. В управляющем обрабатываем запросы на добавление/изменение/удаление. В клиентском из пути в запросе берём токен бота, создаём объект бота с токеном (вариант - можно держать готовый словарь из объектов бота с ключом по токену, маленькая оптимизация) и вызываем от него метод process_new_updates (или какой там используется в любимой библиотеке).

    Это общий план, не руководство к обязательному исполнению. Разумеется, многое может сильно зависеть от задачи. Например, если выполняемые ботом операции делают много процессорных операций, то может быть будет лучше запускать ботов отдельными скриптами или использовать треды. Если требуют времени, но зависят от ввода-вывода (базы данных, сторонние API итд) - asyncio. Нужно много памяти/процессора - запускать в kubernetes/swarm/виртуалках/итд. Сложный проект может потребовать сложных решений.
    Ответ написан
    Комментировать
  • Как удалить сообщения который содержат Х в PyTeleBot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Bot API не позволяет получать историю чата, только новые сообщения по мере их поступления. Читать историю можно только с помощью клиентского API (см. в сторону библиотек telethon или pyrogram).
    Ответ написан
    Комментировать
  • Как отловить callback_data от настраиваемой клавиатуры Телеграм-бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так и должно быть: не-inline клавиатура - это просто помощник по отправке текстовых сообщений с текстом, написанным на кнопке. У них нет и никогда не было никаких callback_data.
    Ответ написан
    Комментировать
  • Телеграм бот не корректно отправляет результаты парсинга страницы, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А как иначе? На каждой итерации цикла содержимое n2 перезатирается очередной строкой, в итоге в конце цикла остаётся последняя. Вероятно, предполагалось, что в n2 нужно добавлять очередную строку.

    Ну и скрипт, вероятно, парсит страницу один раз, при своём запуске, а затем показывает одинаковый неизменный результат (но так как начала скрипта не видно, непонятно, когда запускается этот парсинг).
    Ответ написан
  • Бот не реагирует на команды ранее все работало поменял токен не помогло Поможете?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше увеличить интервал, 1 секунда это мало, и при любой ошибке ты скорее всего очень быстро сделаешь второй запрос, который и вызовет подобное поведение. Дефолтные 30 секунд это норма, не надо их менять без очень веских причин.

    Long polling так и работает: запрос длится 30 секунд, если приходит событие - запрос завершается досрочно. Это позволяет и события получать быстро, и сервер слишком часто не дёргать.
    Ответ написан
    Комментировать
  • Можно ли получить значение callback_data при реплае?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По-моему, тут типичная попытка решить простую задачу дурацким способом.

    Пользователь получает сообшение с inline-кнопкой. Вот пусть он эту кнопку и нажмёт, а бот получит в callback_query_handler событие с callback_data и обработает. Зачем ещё какое-то цитирование?

    Или тут попытка в кнопке хранить данные, которые при цитировании ещё и якобы можно будет достать? Сама идея дурацкая. Если надо к сообщениям хранить какие-то данные, то их надо хранить в самом боте: в базе данных, в хранилище FSM, да хотя бы in memory в переменных.
    Ответ написан
    Комментировать
  • Как обслуживать юзеров по очереди телебот?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    У тебя глобальные urls_list, price_list. Перемести их в функцию sender, они всё равно при каждом её вызове должны инициализироваться заново. Именно это и вызывает сейчас проблемы.
    Ответ написан
    Комментировать
  • Как сделать телеграмм бота, который когда его отметили дает выбор какое отправить аудио?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это не "отметили", а так называемый inline mode. Нужно включить этот режим в настройках бота, а затем в коде реализовать обработчик inline_handler. Примерно так:

    @bot.inline_handler(lambda query: len(query.query) > 0)
    def query_text(inline_query):
        keyboard = []
        for code in ['foo', 'bar']:
            keyboard.append(telebot.types.InlineQueryResultArticle(code, f'>>> {code} <<<', telebot.types.InputTextMessageContent(f'<<<{code}>>>')))
        bot.answer_inline_query(inline_query.id, keyboard, is_personal=True)


    Важно понимать, что inline mode - это не полноценное средство интеракции с ботом, а помощник в написании сообщения от пользователя. В частности, результаты inline query кэшируются на серверах Телеграма, так что если поступит такой же запрос, что и минуту назад, то Телеграм даже не сделает запроса к боту. Также в этом режиме не раскрывается информация о чате, в который будет отправлено сообщение, и даже больше того, пользователь может в итоге отказаться от отправки сообщения вообще, но бот об этом не узнает.

    ЗЫ
    Мне в одном боте пришлось из-за этого реализовать концепцию inline policy: в зависимости от настроек чата бот может игнорировать или даже удалять сообщения, оставленные пользователями с помощью inline mode ботов из чёрного списка.
    Ответ написан
    Комментировать
  • Можно ли отследить текст нажатой инлайн кнопки в телеграмм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо применять один callback_data ко всем кнопкам! Именно callback_data и используется для определения, какая кнопка нажата.

    Например, можно назначить кнопкам call:1 ... call:9 и обрабатывать в зависимости от номера, а глобально ловить по тому, что call.data начинается на 'call:':

    if call.data.startswith('call:'):
        button_number = int(call.data[5:])
    Ответ написан
  • Как проверить работает ли бот или нет?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это невозможно - боты никак не могут общаться друг с другом.
    Ответ написан
  • Как прописать код на питоне для настройки кнопок бота телеграмм?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обычная практика - держать в памяти кэш пользователей. При изменениях также выполнять запрос к базе. При запуске бота - вычитывать пользователей в память.
    Ответ написан
    Комментировать
  • Aiogram | как сделать ввод в чат пользователя по кнопке?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это называется inline mode, надо включить его у BotFather и сделать в боте inline query handler.

    Также см.
    https://core.telegram.org/bots/api#inlinekeyboardbutton
    параметры switch_inline_query и switch_inline_query_current_chat
    Ответ написан
    2 комментария
  • Как отправить документ больше 50-ти мегабайт?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В боте (aiogram) надо сделать сохранение куда-то списка текущих запросов (chat_id - запрос). Также сделать обработчик сообщений с content_type видео, который будет получать видео от юзербота, находить по нему в списке запросов chat_id, в который затем отсылать видео по file_id.
    Ответ написан
    Комментировать
  • Где в моём коде ошибка?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет работать. После отправки сообщения "Вам есть 18?" в переменной message не появится нового сообщения. И вообще, надо привыкать, что боты работают по событиям. Нажатие на кнопку - это новое событие, которое сделает новый вызов обработчика.

    Для таких задач лучше использовать FSM пример https://github.com/eternnoir/pyTelegramBotAPI/blob...
    Ответ написан
    Комментировать