@gargamel1

Бот не отвечает на сообщения сразу от нескольких пользователей. Что делать?

Бот зависает при попытке сразу нескольких пользователей отправить сообщение. Что делать?
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)
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 1
yupiter7575
@yupiter7575
Python программист
Если бы я был бы интерпретатором, я бы тоже завис.
1. Что делает та строка:

except Exception as e:
print(repr(e))

Я так понимаю, без вашего участия ошибки вообще не дебажатся?
2.
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 = 'Воскресенье: '

Тут думаю вообще нечего сказать. Мы это еще читать должны.
3. Вы знаете как правильно открывать файлы?
joinedFile = open("joined.txt", "a")
Мда... не знаете

Ну а вообще куча бесполезных переменных, которые можно было заменить списком/словарем или циклом ._,

Почистите код, ошибку будет проще найти
Ответ написан
Ваш ответ на вопрос

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

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