Бот зависает при попытке сразу нескольких пользователей отправить сообщение. Что делать?
import telebot
import config
import random
import openpyxl
import time
import random
import datetime
from telebot import types
bot = telebot.TeleBot(config.TOKEN)
wb = openpyxl.reader.excel.load_workbook(filename="timetable.xlsx")
groups = []
lessons = [ ]
joinedFile = open("joined.txt")
joinedUsers = set ()
for line in joinedFile:
joinedUsers.add(line.strip())
joinedFile.close()
#Генератор кнопок из списка финкцией, sheet_num - для выбора страницы сканирования
def kvants(kvantyms):
InlineKvantsButtom = types.InlineKeyboardMarkup(row_width=2)
InlineKvantsButtom.add(*[types.InlineKeyboardButton(text=kvantyms[i],callback_data=kvantyms[i]) for i in range(len(kvantyms))])
return InlineKvantsButtom
def day_btns(groups):
days = types.InlineKeyboardMarkup(row_width=2)
days.add(*[types.InlineKeyboardButton(text=groups[i],callback_data=groups[i]) for i in range(len(groups))])
days.add(types.InlineKeyboardButton(text='Назад', callback_data='Back'))
return days
def Last():
Ok = types.InlineKeyboardMarkup(row_width=2)
button1 = types.InlineKeyboardButton("Назад", callback_data='Back')
Ok.add(button1)
return Ok
@bot.message_handler(commands=['start'])
def welcome(message):
if not str(message.chat.id) in joinedUsers:
joinedFile = open("joined.txt", "a")
joinedFile.write(str(message.chat.id) + "\n")
joinedUsers.add(message.chat.id)
sti = open('welcome.tgs', 'rb')
bot.send_sticker(message.chat.id, sti)
# keyboard
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("Расписание")
item2 = types.KeyboardButton("Информация")
markup.add(item1, item2)
bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\n<b>Мы - команда Ярославского Кванториума.</b> \n Этот бот позволит:\nСвязаться с нами\nУзнать расписание занятий\n<b>И многое другое!</b>".format(message.from_user, bot.get_me()),
parse_mode='html', reply_markup=markup)
@bot.message_handler(commands=['send'])
def mess(message):
command, password, text = message.text.split(' ', 2)
if password == config.ADMINPASS:
for user in joinedUsers:
bot.send_message(user, text, parse_mode='html')
else:
bot.send_message(message.chat.id, "Неверный пароль")
#основной перебор всех команд
@bot.message_handler(content_types=['text'])
def lalala(message):
if message.chat.type == 'private':
if message.text == 'Расписание':
kvantyms = []
groups.clear()
for i in range(len(wb.sheetnames)):
kvantyms.append(wb.sheetnames[i])
bot.send_message(message.chat.id, 'Выберите Квантум', reply_markup=kvants(kvantyms))
elif message.text == 'Информация':
info = types.InlineKeyboardMarkup(row_width=1)
button1 = types.InlineKeyboardButton("Наш ВКонтакте", url='https://vk.com/yarkvantorium')
button4 = types.InlineKeyboardButton("Наш Инстаграм", url='https://www.instagram.com/yarkvantorium')
button5 = types.InlineKeyboardButton("Наши Одноклассники", url='https://ok.ru/group/56138091856022')
button6 = types.InlineKeyboardButton("Наш Фейсбук", url='https://www.facebook.com/yarkvantorium')
button2 = types.InlineKeyboardButton("Запись на занятие", url='https://yar.pfdo.ru/app/public/organization/3705')
button3 = types.InlineKeyboardButton("Мы на карте", url='https://vk.cc/c1g75Y')
button7 = types.InlineKeyboardButton("Позвонить нам", callback_data='phone')
info.add(button1, button4, button5, button6, button3, button2, button7)
bot.send_message(message.chat.id, '«КВАНТОРИУМ»- это федеральная сеть детских технопарков, создаваемая в России в рамках новой модели детского дополнительного образования. Модель предложена Агентством стратегических инициатив при Правительстве РФ.\n\nОсновные ЗАДАЧИ детских технопарков «КВАНТОРИУМ»:\n\n✅РАЗВИТИЕ творческого потенциала детей,\n✅ВОСПИТАНИЕ будущих высококлассных специалистов в стратегически важных областях российской науки и техники,\n✅ВОЗРОЖДЕНИЕ интереса к техническим профессиям.\n\nОТЛИЧИЕ «КВАНТОРИУМ» от других учреждений дополнительного образования:\n❗обучение детей БЕСПЛАТНО (по сертификатам ПФДО),\n❗УНИКАЛЬНОЕ технологическое ОБОРУДОВАНИЕ,\n❗современный ПОДХОД к обучению: школьники сотрудничают с настоящими учеными и бизнесменами и выполняют реальные производственные задачи.\n\n«КВАНТОРИУМ» = высокотехнологичное ОБОРУДОВАНИЕ + высококвалифицированные ПРЕПОДАВАТЕЛИ + БЕСПЛАТНОЕ ОБУЧЕНИЕ\n\nФедеральный оператор сети детских технопарков «Кванториум» - ФГАУ «Фонд новых форм развития образования»\n\nРегиональный оператор - ГПОУ ЯО Ярославский градостроительный колледж', reply_markup=info)
#else:
# bot.send_message(message.chat.id, 'Я не знаю что ответить ')
#этот блок выполнится если юзер отправит боту сообщение
"""@bot.message_handler(func=lambda c:True, content_types=['text'])
def info_message(message):
bot.edit_message_reply_markup(message.chat.id, message_id = message.message_id-1, reply_markup = '')# удаляем кнопки у последнего сообщения"""
#обработка callback с больших кнопок расписания
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
#запись квантумов в листы. она должна быть тут, нельзя убирать
kvantyms = []
for i in range(len(wb.sheetnames)):
kvantyms.append(wb.sheetnames[i])
if (call.data in kvantyms):
#обработка callback с больших кнопок расписания
i = 0
while call.data != wb.sheetnames[i]:
if call.data != wb.sheetnames[i]:
i+=1
wb.active = i
fullname = wb.active.cell(row=4, column=2).value
FirstTwoSymbols = fullname[0] + fullname[1]
for i in range(1, 40):
if wb.active.cell(row=i, column=2).value != None and FirstTwoSymbols in wb.active.cell(row=i, column=2).value:
groups.append(wb.active.cell(row=i, column=2).value)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выберите группу",
reply_markup=day_btns(groups))
tester = call.data
#обработка инлайн кнопок групп
elif call.data in groups:
groups.clear()
t=1
fullname = wb.active.cell(row=4, column=2).value
FirstTwoSymbols = fullname[0] + fullname[1]
while wb.active.cell(row=t, column=2).value != call.data:
if wb.active.cell(row=t, column=2).value != call.data:
t+=1
for i in range(3, 10):
fullname1 = wb.active.cell(row=t, column=2).value
FirstTwoSymbols1 = fullname1[0] + fullname1[1]
if FirstTwoSymbols in FirstTwoSymbols1:
lessons.append(wb.active.cell(row=t, column=i).value)
vivod = []
for i in range(len(lessons)):
#Обработка дней недели (так надо)
if i == 0:
weekDay = 'Понедельник: '
elif i == 1:
weekDay = 'Вторник: '
elif i == 2:
weekDay = 'Среда: '
elif i == 3:
weekDay = 'Четверг: '
elif i == 4:
weekDay = 'Пятница: '
elif i == 5:
weekDay = 'Суббота: '
elif i == 6:
weekDay = 'Воскресенье: '
if lessons[i] != None:
vivod.append(str(weekDay) + str(lessons[i]) + '\n')
SringStar = "*"
#без понятия ка кработает ''.join, но писать надо именно так и ничего не менять, тогда всё работает как хочу, я а не оно
quantityStars = 0
for i in range(len(vivod)):
if SringStar in vivod[i]:
quantityStars+=1
if quantityStars > 0:
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text = '<b><u>Вот ваше расписание</u> </b>\n\n' + ''.join(vivod) + '\n* - Занятия развивающего блока (математика, английский язык, шахматы, проектная деятельность).' + '\n\nРады были помочь ', reply_markup=Last(), parse_mode='html')
else:
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text = '<b><u>Вот ваше расписание</u> </b>\n\n' + ''.join(vivod) + '\nРады были помочь ', reply_markup=Last(), parse_mode='html')
#очистка списка
lessons.clear()
elif call.data == 'Back':
groups.clear()
lessons.clear()
kvantyms = []
for i in range(len(wb.sheetnames)):
kvantyms.append(wb.sheetnames[i])
bot.delete_message(call.message.chat.id, call.message.message_id)
bot.send_message(call.message.chat.id, 'Выберите Квантум', reply_markup=kvants(kvantyms))
elif call.data == 'phone':
bot.send_message(chat_id=call.message.chat.id,
text='Номер телефона «Кванториум Ярославль» +7 (4852) 33-02-39',
parse_mode='MARKDOWN')
except Exception as e:
print(repr(e))
# RUN
bot.polling(none_stop=True)