Как добавить функцию бана юзера по id в Telegram бота?
Т.е чтобы я мог ввести /ban userid и этот юзер больше не мог писать боту.
Ответы (1 шт):
Пользователь в любом случае сможет писать боту, а вот отвечать ему или нет уже решать нам.
Есть 2 способа это сделать, первый с помощью декоратора, который будет проверять не забанен ли наш юзер:
Как это работает:
- Бот получает апдейт и вызывает наш хендлер.
- Вместо оригинально хендлера, у нас уже функция decorator которая замкнула в себе оригинальный хендлер.
- Когда бот её вызывает, она проверяет не забанен ли наш юзер, если нет — вызывает оригинальный хендлер, в противном случае ничего не делает.
У этого способа есть свой недостаток, мы обрабатываем апдейты забаненных юзеров.
Этого можно избежать переопределив метод get_updates :
from telebot import TeleBot from telebot import apihelper from telebot import types class MyTeleBot(TeleBot): def get_updates(self, *args, **kwargs): json_updates = apihelper.get_updates(self.token, *args, **kwargs) ret = [] for ju in json_updates: if ju[‘message’][‘from’][‘id’] in banned_users: self.last_update_id = ju[‘update_id’] else: ret.append(types.Update.de_json(ju)) return ret
Теперь создаём экземпляр нашего класса:
ХРАНЕНИЕ ПОЛЬЗОВАТЕЛЕЙ в БАЗЕ ДАННЫХ | AIOGRAM + MONGODB | TELEGRAM БОТ С БАЗОЙ ДАННЫХ
bot = MyTeleBot(»)
Далее можем писать наши хендлеры без каких либо декораторов, функция ban_user осталась без изменений.
Ну и не забываем запустить поллинг:
if __name__ == ‘__main__’: bot.infinity_polling()
Как это работает:
- У нас есть следующая цепочка вызовов при поллинге
- infinity_polling > polling > __threaded_polling > __retrieve_updates > get_updates > process_new_updates
Как мы «отсекаем» апдейты?
Вы наверняка заметили в нашем классе такую проверку:
if ju[‘message’][‘from’][‘id’] in banned_users: self.last_update_id = ju[‘update_id’]
Дело в том, что если не делать self.last_update_id = ju[‘update_id’] , топ наш бот зациклиться на последнем апдейте который мы и хотим пропустить.
Собственно это и делает process_new_updates :
if update.update_id > self.last_update_id: self.last_update_id = update.update_id
Вместо массива banned_users желательно взять базу данных.
Источник: husl.ru
Две настройки Telegram для защиты от спама
К сожалению спам начинает появляться и в Телеграм. Читатели подсказали, как запретить добавление в спам-группы и как заблокировать спам от «Уведомление бот».
В последнее время меня часто стали добавлять в группы и я уже устал нажимать «Выйти и сообщить о спаме».
Оказывается в Телегам можно запретить незнакомым людям добавлять вас в группы.
Это делается так: в главном окне Телеграм нажимаем три полоски в левом верхнем углу — Настройки — Конфиденциальность — Группы и каналы. Переключаем настройку «Кто может добавлять меня в группы?» с «Все» на «Мои контакты».
Как создать чат-бота в Telegram #shorts
С некоторых пор мне начал приходить спам от «Уведомление бот». Откуда он взялся не знаю — совершенно точно ни на какие странные ссылки я не кликал и такого бота не запускал.
Бороться с ним можно так: Нажимаем на иконку бота в заголовке, в открывшемся окне информации о боте нажимаем три точки в верхнем правом углу — там жмём «Остановить бота».
После этого в той же строке настройка сменится на «Перезапустить бота» и нажимать туда конечно же больше не нужно.
Надеюсь, эти две простые настройки сделают вашу жизнь чуть-чуть комфортнее.
Источник: dzen.ru
Что такое черный список в Телеграм
Как заблокировать пользователя в Телеграм, а так же канал, группу или назойливого бота, читайте нашу пошаговую инструкцию. Блокировка в Телеграм требуется для того, чтобы забанить надоедливых пользователей спамящих в личные сообщения или бота, который закидывает «личку» своими уведомлениями. Пользователь, который будет заблокирован, не сможет позвонить или написать сообщение.
Для Android и устройств на базе iOS
Блокировка через меню: – Запускаем Телеграм – Открываем меню (в левом верхнем углу) – Заходим в настройки – Нажимаем «Конфиденциальность» – В самом верху нажимаем «Черный список» – В правом верхнем углу нажимаем на кнопку «Добавить» и добавляем пользователя которого хотим заблокировать. Блокировка в чате: – В чате с пользователем нажимаем на имя профиля – Далее «три точки» в правом верхнем углу – Нажимаем «Заблокировать» и подтверждаем. Для блокировки бота достаточно зажать на чате с ним, нажать на «три точки» в правом верхнем углу и кликнуть «заблокировать».
Блокировка канала или группы
Добавить в черный список канал или группу нельзя, в отличии от пользователей. Чтобы избавиться от ненужных каналов, достаточно просто покинуть его или пожаловать на спам. Если вы являетесь владельцем канала, то можно отдельно блокировать подписчиков или удалить канал полностью, в этом случае с него пропадет вся информация без возможности восстановления.
Разблокировка пользователя в Телеграм
Если блокировка пользователя уже неактуальна, то можно выполнить теже действия как и с блокировкой, только вместо заблокировать будет кнопка «разблокировать» или перейти в чат с заблокированным человеком, если он не удален и на месте ввода сообщения будет большая кнопка «разблокировать». Так же можно зайти в черный список Телеграм, где будет перечень всех заблокированных пользователей и ботов. Найти его несложно, достаточно зайти в настройки, далее конфиденциальность и черный список будет в самом верху, справа будет указано количество заблокированых.
Как определить, что вы заблокированы
Пользователю не приходит никаких уведомлений о том, что его добавили в черный список, узнать о блокировке можно по нескольким признакам: – Сообщения не читаются долгое время – Собеседник «Был в сети давно» – Аватарка профиля скрыта.
Источник: linkbaza.com