@Revs1

Как обойти пользователей, которые заблокировали бота, при рассылке?

Здравствуйте!
Пишу бота, в котором айди пользователей при старте записывается в txt файл, но при рассылке пользователям вылетает ошибка, так как в файле присутствуют юзеры, заблокировавшие бота.
Как сделать так, чтобы эти пользователи удалялись из txt файла или хотя бы игнорировались и рассылка переходила к следующему айди?

Вот код с записью id в txt файл и сама рассылка:
import telebot
from telebot import *

bot = telebot.TeleBot('token')

joinedFile = open("D:/тестбот/joined.txt",'r')
joinedUsers = set ()
for line in joinedFile:
  joinedUsers.add(line.strip())
joinedFile.close()  

@bot.message_handler(commands=['start'])
def startJoin(message):
  if not str(message.chat.id) in joinedUsers:
    joinedFile=open("D:/тестбот/joined.txt", 'a')
    joinedFile.write(str(message.chat.id) + "\n")
    joinedUsers.add(message.chat.id)
    bot.send_message(message.chat.id, 'Добро пожаловать!')
 

@bot.message_handler(commands=['special'])
def mess(message):
  for user in joinedUsers:
    bot.send_message(user,message.text[message.text.find(' '):],parse_mode='MarkdownV2')
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 2
Eggsy
@Eggsy
Может стоит воспользоваться исключениями в Python? (https://yandex.ru/search/?text=try+except+python&l...)
Ответ написан
Комментировать
Shurik24
@Shurik24
Обычный программист самоучка
Рекомендую уйти от txt файлов в сторону базы данных, создать табличку users в нее записывать TgID Block
По нормальному все новы юзеры имеют такую запись
100000 False (Телеграм ID, Заблокирован?)
Во время отправки сообщения пользователю использовать try except
try:
    send_message(my message)
except:
   db.set(update Block = True, where TgID = telegramid) #Это вообще вымышленная работа с бд ибо фиг знает какую будешь юзать

Ну и когда будешь снова рассылать сообщения просто возьмешь все ID у которых Block = Flase
А коль не хочешь изучать как юзать базы данных (а жаль штучка хорошая :С ) можно просто сделать так
try:
   send_message(my message)
except:
   pass
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы