Python TeleBot. Проблема с повторyым вызовом функции /start
Пишу бота на питоне. Его смысл - периодически сканит папку с фотографиями и, когда добавляется новое изображение, присылает его пользователям. Так же ведет отсортированный список в txt. Есть функция /get, которая позволяет отдельно прислать любое изображение из списка.
Проблема: При вызове функции старт одним пользователем все работает исправно. Но при запуске с другого аккаунта перестают работать остальные кнопки. При добавлении изображения бот присылает всем пользователям весь список. Такая же проблем возникает при тройном нажатие на /start с одного аккаунта.
("FotoList.txt" - txt со списком изображений; "id.txt" - список телеграммных айдишников пользователей, которым нужно отправить изображение)
import telebot
import os, time
from fnmatch import *
def sorting(array):
newArray=[]
for i in array:
s=''
for g in i:
if g.isdigit():
s+=g
newArray+=[[int(s),i]]
newArray=sorted(newArray)
array=[i[1] for i in newArray]
return array
bot = telebot.TeleBot('token')
bot.set_webhook()
start=True
directory="D://..."
with open("FotoList.txt", "w") as f:
old_listWith = os.listdir(directory)
tArray=[]
for imagine in old_listWith:
if fnmatch(imagine,"000000*.jpg") or not (fnmatch(imagine,"*.jpg")):continue
tArray+=[imagine + "\n"]
tArray=sorting(tArray)
print(tArray)
for i in tArray: f.write(i)
@bot.message_handler(commands=['start'])
def handle_start(message):
user_markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
user_markup.row('/start')
user_markup.row('/get')
user_markup.row('/stop')
bot.send_message(message.from_user.id, "BOT STARTED", reply_markup=user_markup)
global start
start = True
print("st")
start_command(message)
return
@bot.message_handler(commands=['menu'])
def start_command(message):
# print('11')
global start
if start:
global directory
sec_old_listWith = os.listdir(directory)
new_list = []
for imagine in sec_old_listWith:
if fnmatch(imagine, "000000*.jpg") or not (fnmatch(imagine, "*.jpg")): continue
new_list += [imagine]
new_list = sorting(new_list)
with open("FotoList.txt","a+") as file:
file.seek(0)
old_list =[]
for i in file:
if "\n" in i and i!="\n": old_list+=[i[:-1]]
elif i!='' : old_list+=[i]
old_list=sorting(old_list)
new_list=sorting(new_list)
if old_list==new_list:
time.sleep(4)
else:
with open("FotoList.txt", "w+") as file:
idList=open("id.txt").readline().split()
for i in new_list:
file.write(i + "\n")
if i not in old_list:
for idd in idList:
try:
bot.send_photo(int(idd), open(directory+"//"+i,'rb'))
print("DONE")
except: print(idd+" ne work")
time.sleep(4)
start_command(message)
else: return
@bot.message_handler(commands=['stop'])
def stop(message):
print('st')
global start
start=False
bot.send_message(message.chat.id,"Bot stoped")
@bot.message_handler(commands=['get'])
def list(message):
print("gt")
if len(message.text)>len("/get"):
get(message)
return
with open("FotoList.txt") as file:
file=file.readlines()
s=''
for i in range(0,len(file)):
s+=str(i+1)+") "+file[i]
bot.send_message(message.chat.id,s)
bot.send_message(message.chat.id, "Введите номер изображения")
bot.register_next_step_handler(message,get)
return
def get(message):
with open("FotoList.txt") as file:
file=file.readlines()
try:
try: value=int(message.text)
except: value=int(message.text[5:])
if value<1: int("i-4utnv3-3i4utnv-3i4untv-34uintv")
photo=file[value-1]
if '\n' in photo: photo=photo[:-1]
global directory
with open(directory+"//"+photo,'rb') as sendFoto:
bot.send_photo(message.chat.id,sendFoto)
except:
bot.send_message(message.chat.id,"Чёт нет такого. ERROR получается)")
return
while True:
try:
bot.polling(non_stop=True, interval=0)
except Exception as e:
print(e)
time.sleep(5)
continue