Python Telebot Функция спотыкается об юзеров заблокировавших бота
День добрый, есть Телеграмм бот в котором реализована команда отправки уведомления об обновлении всем юзерам:
if e.demojize(m.text) == "Уведомление об обновлении":
db = sqlite3.connect(DBCONNECT)
db.row_factory = sqlite3.Row
c = db.execute(f"SELECT * FROM userss where username <> '@None'")
log = c.fetchall()
c.close()
db.close()
BotChecking = TeleBot(BOTAPIKEY)
countSended = 0
for i in log:
countSended += 1
BotChecking.send_message(i['tgid'], texts_for_bot["alert_to_update"], parse_mode="HTML")
BotChecking.send_message(CONFIG['admin_tg_id'],
f"Сообщение отправлено {countSended} пользователям", parse_mode="HTML")
И всё работает замечательно, если кто нибудь из юзеров не заблочит бота. В таком случае бот споткнется об него и прекратит отправлять сообщения, а в консоль выкинет это:
(async_telebot.py:543 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. Error code: 403. Description: Forbidden: bot was blocked by the user"
Как мне пропускать таких юзеров и продолжать перебор массива и отправку сообщений?
Ответы (1 шт):
Автор решения: ToaD
→ Ссылка
Как подсказал Юрыч bro(за что ему огромное спасибо), нужно было использовать конструкцию try: except:
Итоговый код выглядит так:
if e.demojize(m.text) == "Уведомление об обновлении":
db = sqlite3.connect(DBCONNECT)
db.row_factory = sqlite3.Row
c = db.execute(f"SELECT * FROM userss where username <> '@None'")
log = c.fetchall()
c.close()
db.close()
BotChecking = TeleBot(BOTAPIKEY)
countSended = 0
countBlocked = 0
for i in log:
try:
countSended += 1
BotChecking.send_message(i['tgid'], texts_for_bot["alert_to_update"], reply_markup=Butt_main, parse_mode="HTML")
except:
countSended -= 1
countBlocked += 1
pass
BotChecking.send_message(CONFIG['admin_tg_id'], f"Сообщение отправлено {countSended} пользователям. {countBlocked} пользователей заблокировало бота", parse_mode="HTML")