@Novichek2000

Python Telegram Bot. Как удалить айдишник пользователя пользователя из текстового файла при встрече с ошибкой 403(бот в чс)?

import telebot
import time
import schedule
import threading
from telebot import apihelper


Вот так у меня айдишники пользователей попадают в текстовый файл ids.txt :

@bot.message_handler(commands=['start'])
def welcome(message):
	# База данных
	user_id = message.from_user.id
	print(user_id)
	def add_id(filename: str, client_id: str) -> None:
		ids = set()
		try:
			with open(filename, "r") as f_read:
				ids.update([id_n.strip() for id_n in f_read.readlines()])
		except FileNotFoundError:
			pass

		ids.update([client_id])

		with open(filename, "w") as f_write:
			f_write.writelines([new_id + "\n" for new_id in ids])

	def check_id(filename: str, client_id: str) -> bool:
		try:
			with open(filename, "r") as f_read:
				return client_id in [id_n.strip() for id_n in f_read.readlines()]
		except FileNotFoundError:
			return False

	add_id("ids.txt", str(user_id))

def get_all_ids(filename: str) -> bool:
	try:
		with open(filename, "r") as f_read:
			return [id_n.strip() for id_n in f_read.readlines()]
	except FileNotFoundError:
		return False


Вот так он отправляет запланированные сообщения:

def thread(my_func):
    def wrapper(*args, **kwargs):
        my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs)
        my_thread.start()
    return wrapper

def job_utro():
	for client_id in get_all_ids("ids.txt"):
		try:
			bot.send_message(int(client_id), "Доброе утро!")
		except Exception as e:
			print(repr(e))
			print("Неудачка_утро\nПользователь добавил бота в Черный Список...\n")

@thread
def vremya_utro():
	schedule.every().day.at("08:00").do(job_utro)

vremya_utro()


И когда бот отправляет запланированные сообщения, он часто натыкается на ошибку 403(бота добавили в чс).
И вот вопрос: Как сделать так, что когда бот встречается с ошибкой 403, он удалял юзера, добавившего бота в чс, из текстового докуменда ids.txt и продолжал писать запланированные сообщения ?
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 1
@adnim
В блоке try, сразу после send_message записывай айдишник в новый файл,
по завершению рассылки, запиши получившийся файл в изначальный
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 130 000 ₽
deeplay Новосибирск
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽