При написании бота я столкнулся с тем, что если я использую @bot.message_handler(content_types=['text']) внутри @bot.message_handler(content_types=['text']), то "внутренний" обработчик не исполняет функцию. Чем можно заменить его? Ниже я привел фрагмент кода, нуждающийся в доработке
import telebot
import datetime
import time
import random
from config import TOKEN, tic_tac_players_usernames, tic_tac_players_chat_ids
#в config у меня хранятся список username-ов(tic_tac_players_usernames) и словарь с ключами из username-ов и значениями из их chat_id
from telebot import types
bot = telebot.TeleBot(token=TOKEN)
@bot.message_handler(commands=['start'])
def start(message):
keyboard_1 = types.ReplyKeyboardMarkup(resize_keyboard=True)
button_1 = types.KeyboardButton('Точное время')
button_2 = types.KeyboardButton('Случайное число')
button_3 = types.KeyboardButton('Калькулятор')
button_4 = types.KeyboardButton('Крестики нолики')
keyboard_1.add(button_1, button_2, button_3, button_4)
mesage = 'Привет' + ' ' + message.from_user.first_name
bot.send_message(message.chat.id, mesage, parse_mode='html', reply_markup=keyboard_1)
@bot.message_handler(content_types=['text'])
def random_and_time_and_calc_and_tic_tac(message):
if message.chat.type == 'private':
if message.text == 'Точное время':
datetime_now = datetime.datetime.now()
time_now = str(datetime_now.time())
time_now = time_now[:-7]
bot.send_message(message.chat.id, time_now, parse_mode='html')
elif message.text == 'Случайное число':
bot.send_message(message.chat.id, str(random.randint(1, 100)))
#=============================================================== здесь
elif message.text == 'Калькулятор':
bot.send_message(message.chat.id, 'Введите любой пример или математическое действие')
def calc(message):
if '+' in message.text or '-' in message.text or '/' in message.text or '*' in message.text or '**' in message.text:
bot.send_message(message.chat.id, message.text + ' ' + '=' + ' ' + str(eval(message.text)))
print( message.text + ' ' + '=' + ' ' + str(eval(message.text)))
else:
bot.send_message(message.chat.id, 'Неверный формат')
bot.register_next_step_handler(message, calc)
elif message.text == 'Крестики нолики':
max_players = 2
reg_players = 0
keyboard_2 = types.ReplyKeyboardMarkup(resize_keyboard=True)
button_999 = 'Принять приглашение'
keyboard_2.add(button_999)
players_list = []
for i in tic_tac_players_usernames:
players_list.append(tic_tac_players_chat_ids.get(i))
while reg_players < max_players:
for i in players_list:
print(players_list)
print(i)
print(message.chat.id)
bot.send_message(i, message.from_user.first_name + ' ' + 'приглашает вас поиграть в крестики нолики', reply_markup=keyboard_2)
time.sleep(30)
for j in players_list:
#я хочу создать список из chat.id принятых игроков(двух игроков, которые нажмут на кнопку button_999) - это главная задача
#и в идеале далее отправить всем пользователям в созданном списке сообщение с матричной клавиатурой 3 на 3 из пустых кнопок и изменять их при нажатии на x если chat_id пользователя в списке имеет индекс 0 и на 0 если индекс 1