@VinogradovDionis
Студент

Как написать функцию чистки пользователей, которые заблокировали бота в Телеграм?

В общем, проблему описал в комментариях. Я хочу переписать данный код таким образом, чтобы у меня была функция чистки пользователей, которая через эту ошибку добавляет пользователей в массив, затем через цикл удаляет их из базы данных, и тем самым функция рассылки работает без багов.

Как обратиться к данной ошибке напрямую, чтобы цикл перебирал битые айди?

@bot.message_handler(commands=['secretwords'])
def mess(message):
	
	# при вызове в боте команды /secretwords "какой-то текст"
	# происходит рассылка по всем пользователям

		
	try:

		# айди пользователей содержатся в базе данных
		# которая проходит через цикл
		# но при например 3-ем пользователе который заблокировал бота
		# цикл завершается и 4-ый пользователь не получается рассылку
		# получают только 1-ый и 2-ой

		sqlite_connection = sqlite3.connect('users.db')
		cursor = sqlite_connection.cursor()
		sqlite_select_query = """SELECT * from login_id"""
		cursor.execute(sqlite_select_query)
		records = cursor.fetchall()
		records = [i[0] for i in records]

		for user in records:
			a =[]
	
			#user = int(user)
			bot.send_message(user, message.text[message.text.find(' '):])
			
			a.append(user)
			print('norm',a)
			
	except telebot.apihelper.ApiException as e:

		if e.result.status_code == 403 or e.result.status_code == 400:
			b =[]
			b.append(user)
			print(b)
			
			n = 0

			connect = sqlite3.connect('users.db')
			cursor = connect.cursor()
			del_id = b[0]
			n+=1
			cursor.execute(f"DELETE FROM login_id WHERE id={del_id}")
			connect.commit()
			bot.send_message(message.from_user.id,f'пользователей удалено {n}')

		cursor.close()
	bot.send_message(message.from_user.id,f'пользователей всего {len(records)}')
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Перенеси try-except внутрь цикла for, чтобы внутри try-except был только вызов bot.send_message(), и все дела.
И зачем ты еще раз коннектишься к базе данных внутри except, у тебя ведь уже есть подключение?
Ответ написан
Комментировать
InternetMaster
@InternetMaster
Интернет
Нужно сделать массовую рассылку всем пользователям с моментальным удалением высланного сообщения. Реализовать try-except. В except прописать удаление из базы данных.
Тебе готовый код нужен чтоли?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы