Как остановить бота в Telegram за 3 секунды?
Знакома ли вам ситуация, когда вы запустили бота в Telegram, решили свою задачу и ушли, а через некоторое время он начинает надоедать вам сообщениями?
Если да, то в этой статье мы расскажем, как правильно работать с уведомлениями ботов и отключить надоедливых ботов навсегда.
Почему это происходит?
Чат-бот — это такое же приложение в вашем телефоне, как и любое другое. Мы писали об этом в нашей предыдущей статье.
В большинстве случаев уведомления, которые вы получаете от чат-ботов, говорят вам о важных изменениях. Например, ваша заявка была исполнена или персонаж в игре достиг нового уровня.
Но иногда разработчики чересчур увлекаются такими уведомлениями, и это начинает раздражать. Как справиться с этим, смотрите ниже в разделе «Настройка уведомлений».
Вторым распространённым случаем являются рекламные сообщения. Не секрет, что для поддержания работоспособности бота и его развития владельцам приходится нести расходы на инфраструктуру, зарплаты, аренду и проч. Если бот не позволяет зарабатывать напрямую, то многие из них прибегают к модели adware, когда приложение остаётся бесплатным, а пользователям время от времени показывается реклама. В большинстве приложений это разумный компромисс, но иногда разработчики перегибают палку, и реклама начинает литься, как из рога изобилия. Помочь с этим могут советы из раздела «Управление рекламой».
Наконец, третьим, и наиболее опасным, случаем является взлом и рассылка уведомлений пользователям бота. Это может произойти как из-за утечки токена авторизации бота, при которой злоумышленник может перехватить контроль над каналом связи с пользователями (дефейс), так и из-за более глубокого взлома. Что нужно делать, если вы с этим столкнулись, описано в главе «Взломанный бот».
Что делать?
Настройка уведомлений
Обычно достаточно предпринять следующие шаги:
1. Перейдите в бота
2. Найдите раздел с настройкой уведомлений (обычно он находится в разделе Account/Профиль или Settings/Настройки)
3. Выберите те уведомления, которые вы хотите получать, и их частоту
Если такого раздела нет, то сделайте следующее:
1. Найдите бота в списке чатов
2. Смахните его влево, чтобы открылись кнопки как на рисунке ниже

3. Нажмите Mute, чтобы перевести уведомления в тихий режим
4. Перейдите на страницу бота в Bots Club и оставьте комментарий разработчикам о большом количестве сообщений
5. Если разработчик долго не отвечает, попробуйте найти его контакт в описании бота в Telegram и написать ему лично
Будьте вежливы и конструктивны — зачастую владельцы ботов будут рады помочь вам и завоевать ваше доверие.
Управление рекламой
Реклама может быть назойливой, это правда. Тем не менее, постарайтесь сохранить хладнокровие и выполнить эти шаги:
1. Переведите бота в тихий режим, как было описано выше
2. Оставьте отзыв с низкой оценкой на странице бота в Bots Club. Динамика рейтинга приложения — очень значимый фактор для разработчиков, и его резкое снижение привлечёт их внимание
3. Если проблема была решена, не забудьте поблагодарить и поставить хорошую оценку
Взломанный бот
Если вам показалось, что бот выглядит не так, как всегда, и был взломан, то вот что нужно сделать:
1. Прекратите использование бота и переведите его в тихий режим
2. Проверьте релиз ноты и комментарии других пользователей на странице бота в Bots Club — возможно, разработчики просто выкатили большое обновление
3. Если подозрения остаются, оставьте отзыв разработчикам — тем самым, вы предупредите других пользователей и дадите своевременный сигнал
Самое главное — помните, что, если бот подвергся дефейсу, он не сможет получить от вас больше информации, чем вы сами ему предоставите. Поэтому при малейших подозрениях просто прекратите использование бота и уведомьте разработчиков!
К чёрту подробности, какая планета?
Если вы всё же решили навсегда прекратить отношения с ботом, остановить его и убрать из своего списка чатов, то вот что нужно делать:
1. Попросите поддержку бота удалить ваш аккаунт. Если его владельцы работают в России или ЕС, они обязаны это сделать по закону.
2. Найдите бота в списке чатов, смахните влево и выберите Delete

3. Выберите Delete and Stop

Через 5 секунд бот будет окончательно остановлен, и история переписки с ним будет удалена из ваших чатов.
Тем не менее, важно понимать, что:
1. История переписки могла остаться на серверах разработчика бота;
2. Если вы не удалили аккаунт через поддержку, то при повторном заходе в бота он вас «узнает» и, зачастую, продолжит с той точки, на которой вы остановились.
Python-сообщество
Пытаюсь создать бота Telegram на python. Этот бот по команде пользователя запускает многопоточность с разными циклами выполнения задачи. Мне необходимо сделать так, чтобы пользователь при вводе команды (в данном случае это /start) с определенным значением, например /start stop (значение stop), останавливал все потоки, а потом снова мог их успешно запустить командой.
#2 Сен. 7, 2020 21:17:18
Как остановить выполнение всех потоков при помощи команды боту Telegram?
Тебе надо сделать поток, управляющий потоками, и подписать его на сигнал перезапуска потоков. Когда команда будет поступать снаружи, при этом событии нужно подавать сигнал управляющему потоку, чтобы он отдал команды потокам остановиться/запуститься, которыми управляет.
Библиотека python-telegram-bot в Python.
Пакет python-telegram-bot предоставляет чистый интерфейс Python для Telegram Bot API. Он совместим с версиями Python 3.6+. Пакет python-telegram-bot также может работать с PyPy3 (официально не поддерживается), хотя раньше было много проблем.
В дополнение к чистой реализации API эта библиотека содержит ряд высокоуровневых классов, которые делают разработку ботов простой и понятной. Эти классы содержатся в модуле telegram.ext .
Реализация чистого API без расширений telegram.ext доступна как отдельный пакет python-telegram-bot-raw .
Установка пакета python-telegram-bot в виртуальное окружение:
Пакет python-telegram-bot в основном будет разбираться на примерах. Содержание, обзорного/вводного материала по библиотеке ниже. Меню с материалами по всему разделу — справа. Поехали.
Содержание:
Чистая реализация официального Telegram Bot API.
API бота предоставляется через класс telegram.Bot . Методы, определенные в telegram.Bot являются эквивалентами в виде методов snake_case , описанных в официальной документации Telegram Bot API. Для удобства, также доступны точные названия методов в виде camelCase , указанные в документации Telegram. Так, например, вызов telegram.Bot.send_message совпадает с вызовом метода telegram.Bot.sendMessage .
Все классы объектов Telegram Bot API расположены в основном модуле пакета telegram , например, класс объекта Message доступен как telegram.Message .
Чтобы сгенерировать токен доступа, необходимо пообщаться с @BotFather и выполнить несколько простых шагов, описанных в разделе Команды и оповещения @BotFather в Telegram.
Чтобы получить представление об API и о том, как его использовать с пакетом python-telegram-bot , запустите интерпретатор Python и выполните следующие несколько шагов.
Сначала создаем экземпляр telegram.Bot . Константу TOKEN следует заменить токеном API, который был получен от @BotFather :
Примечание: боты не могут инициировать чаты с пользователями. Пользователь должен либо добавить их в группу, либо сначала отправить им сообщение. Для подключения к создаваемому боту или каналу в основном используются ссылки, такие как https://telegram.me/bot_username или можно попробовать найти бота по имени в своем десктопном или мобильном приложении.
Как отвечать/получать сообщения на чистом API?
Для получения сообщений, отправленных боту, можно использовать метод API .getUpdates .
Примечание: не нужно использовать .get_updates , если пишете своего бота с модулем расширения telegram.ext , поскольку telegram.ext.Updater получает все обновления/сообщения в автоматическом режиме.
На чистом API это выглядит следующим образом:
Получение изображения, отправленного боту:
Для отправки сообщения всегда нужен будет chat_id :
Примечание. Метод .send_message , как и любой из методов send_* класса Bot возвращает экземпляр класса Message , поэтому его можно использовать в коде позже.
Ответ на конкретное сообщение, полученное в обновлении:
Примечание. Существуют эквиваленты этого метода для ответа с фотографиями, аудио и т. д., а так же аналогичные эквиваленты встречаются по всей библиотеке python-telegram-bot .
Пример бота для ответа на сообщения на чистой реализации API Telegram.
Простой бот для ответа на сообщения Telegram. Пример построен на чистом API Telegram, который реализует пакет python-telegram-bot .
Модуль расширения telegram.ext .
Модуль расширений telegram.ext построен поверх чистой реализации Telegram Bot API. Он предоставляет простой в использовании интерфейс и снимает с программиста некоторую работу.
Он состоит из нескольких классов, но два наиболее важных — это telegram.ext.Updater и telegram.ext.Dispatcher .
Класс Updater постоянно слушает сервер Telegram, получает новые сообщения и передает их классу Dispatcher . Если создать объект Updater , то он автоматически создаст Dispatcher и свяжет их вместе с очередью. Затем в объекте Dispatcher можно зарегистрировать обработчики разных типов, которые будут сортировать полученные объектом Updater сообщения. Поступающие сообщения будут обрабатываться в соответствии с зарегистрированными обработчиками и передавать их в функцию обратного вызова, которую необходимо определить.
Еще нужно знать и понимать, что экземпляр Updater реализует все методы класса telegram.Bot (API Telegram), которые будут связаны с данным Updater . У экземпляра Dispatcher , в свою очередь, есть так называемый контекст context , который, при регистрации любого обработчика сообщений передается в функцию обратного вызова этого обработчика (кстати в нее так же передается updater ). Так вот, у этого контекста то же есть экземпляр класса telegram.Bot , только он связан с конкретным сообщением, которое попало в эту функцию обратного вызова.
Каждый обработчик является экземпляром подкласса класса telegram.ext.Handler . Пакет python-telegram-bot предоставляет классы обработчиков почти на все стандартные случаи, но если нужно что-то конкретное, то можно создать собственный обработчик, наследуясь от класса Handler .
Создание Telegram bot, шаг за шагом.
Во-первых, нужно создать объект Updater . В коде ниже замените константу TOKEN на токен API вашего бота. Для более быстрого доступа к Dispatcher , в который Updater посылает сообщение, можно создать его отдельно:
Примечание. Аргумент use_context=True (по умолчанию False ) — это специальный аргумент, необходимый только для python-telegram-bot меньше 12 версии. Это обеспечивает лучшую обратную совместимость со старыми версиями и дает пользователям время для обновления. Начиная с 13-ой версии, значение аргумента use_context=True используется по умолчанию (указывать не нужно).
Чтобы знать, когда и почему что-то не работает должным образом, настроим модуль ведения журнала логов:
Примечание. если хотите узнать больше об обработке исключений с python-telegram-bot , прочтите подраздел об "Обработка исключений".
Теперь определим функцию, которая должна обрабатывать определенный тип сообщения, отправленных боту:
Цель состоит в том, чтобы эта функция вызывалась каждый раз, когда бот получает сообщение с серверов Telegram, содержащее команду /start . Для этого можно использовать класс CommandHandler (один из предоставленных подклассов Handler ) и зарегистрировать его в Dispatcher :
И это все, что нужно! Для запуска бота дописываем команду:
Начните чат со своим ботом и введите команду /start — если все пойдет хорошо, он ответит.
Созданный бот может отвечать только на команду /start . Добавим еще один обработчик, который прослушивает обычные сообщения. Для этого используем класс MessageHandler — другой подкласс Handler , для вывода всех текстовых сообщений:
С этого момента создаваемый бот должен обрабатывать все получаемые текстовые сообщения, а так же работать с командой /start , но не будет реагировать на любые другие команды (например, /your_command ) .
Примечание: как только новые обработчики добавляются в диспетчер, они сразу вступают в силу.
Примечание. Класс telegram.ext.Filters содержит ряд так называемых фильтров, которые фильтруют входящие сообщения по тексту, изображениям, обновлениям статуса и т. д. Любое сообщение, которое возвращает True хотя бы для одного из фильтров, переданных в MessageHandler , будет принято. Если необходимо, то можно написать свои собственные фильтры. Подробнее смотрите раздел "Все о фильтрации сообщений python-telegram-bot в Python".
Добавим боту другую функциональность и реализуем команду /caps , которая будет принимать какой-то текст в качестве аргумента и отвечать на него тем же текстом, только в верхнем регистре. Аргументы команды (например /caps any args ) будут поступать в функцию обратного вызова в виде списка ['any', 'args'] , разделенного по пробелам:
Примечание. Обратите внимание на использование context.args . Объект CallbackContext будет иметь много разных атрибутов в зависимости от того, какой обработчик используется.
Режим встроенных запросов.
Еще одна интересная особенность официального Telegram Bot API — это режим встроенных запросов к ботам. Помимо отправки команд в личных сообщениях или группах, пользователи могут взаимодействовать с ботом с помощью встроенных запросов. Если встроенные запросы включены, то пользователи могут вызвать вашего бота, введя его имя @bot_username и запрос в поле ввода текста в любом чате. Запрос отправляется боту в обновлении. Таким образом, люди могут запрашивать контент у ботов в любом из своих чатов, групп или каналов, вообще не отправляя им никаких отдельных сообщений.
Если необходимо реализовать такую функциональность для своего бота, то сначала необходимо изменить конфигурацию в @BotFather , включив этот режим при помощи команды /setinline . Иногда требуется какое-то время, пока бот не зарегистрируется в качестве встроенного бота на вашем клиенте. Можно ускорить процесс, перезапустив приложение Telegram или иногда просто нужно немного подождать.