Делаю бота для игры "Супер крестики нолики". По правилам игры первым ходом игрок (крестик) выбирает сначала поле на которое он будет ходить, а потом клетку в этом поле.
Так вот, у меня сначала выводится поле из inline кнопок 3 на 3, в которых игрок выбирает поле на которое он будет ходить, а после это сообщение должно изменяться на такое же поле из кнопок 3 на 3, но при этом должно выводиться уже другое поле (grid_one, grid_two и т.д. до nine).
Вопрос: Как изменить в сообщении при нажатии определённой кнопки поле из кнопок?
Код:
Функции:
def game_grid(values_dict, all_moves_set):
game_value = packaging_values(values_dict, all_moves_set)
grid = InlineKeyboardMarkup()
grid.row_width = 3
for i in range(1, 10, 3):
grid.add(InlineKeyboardButton(text=show_value(values_dict, i + 0),
callback_data=f'1-{i + 0}-{game_value}'),
InlineKeyboardButton(text=show_value(values_dict, i + 1),
callback_data=f'1-{i + 1}-{game_value}'),
InlineKeyboardButton(text=show_value(values_dict, i + 2),
callback_data=f'1-{i + 2}-{game_value}'))
return grid
def grid_one(values_dict_1, all_moves_set):
game_value_1 = packaging_values(values_dict_1, all_moves_set)
grid_one = types.InlineKeyboardMarkup(row_width=3)
for i in range(1, 10, 3):
grid_one.add(InlineKeyboardButton(text=show_value_1(values_dict_1, i + 0),
callback_data=f'1-{i + 0}-{game_value_1}'),
InlineKeyboardButton(text=show_value_1(values_dict_1, i + 1),
callback_data=f'1-{i + 1}-{game_value_1}'),
InlineKeyboardButton(text=show_value_1(values_dict_1, i + 2),
callback_data=f'1-{i + 2}-{game_value_1}'))
return grid_one
def grid_two(values_dict_2, all_moves_set):
game_value_2 = packaging_values(values_dict_2, all_moves_set)
grid_two = types.InlineKeyboardMarkup(row_width=3)
for i in range(1, 10, 3):
grid_two.add(InlineKeyboardButton(text=show_value_2(values_dict_2, i + 0),
callback_data=f'1-{i + 0}-{game_value_2}'),
InlineKeyboardButton(text=show_value_2(values_dict_2, i + 1),
callback_data=f'1-{i + 1}-{game_value_2}'),
InlineKeyboardButton(text=show_value_2(values_dict_2, i + 2),
callback_data=f'1-{i + 2}-{game_value_2}'))
return grid_two
# Все grid'ы друг на друга похожи, только добавляется _3, _4 и т.д. к переменным
def unpacking_values(value_str):
data = value_str.split('-')
move = data[1]
dict_str = data[2]
set_str = data[3]
values_dict = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_1 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_2 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_3 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_4 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_5 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_6 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_7 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_8 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
values_dict_9 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
for i in range(1, 10):
values_dict[str(i)] = dict_str[i - 1]
for i in range(1, 10):
values_dict_1[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_2[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_3[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_4[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_5[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_6[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_7[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_8[str(i)] = dict_str[i - 1]
dict_str = data[2]
for i in range(1, 10):
values_dict_9[str(i)] = dict_str[i - 1]
all_moves_set = set(set_str)
return move, values_dict, all_moves_set, values_dict_1, values_dict_2, values_dict_3, values_dict_4, values_dict_5, values_dict_6, values_dict_7, values_dict_8, values_dict_9
message_handler:
elif message.text == 'Игра с ботом':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
stop_playbot = types.KeyboardButton('Закончить игру')
markup.add(stop_playbot)
bot.send_message(message.chat.id,'Игра с ботом'.format(message.from_user), reply_markup=markup, parse_mode="html")
all_moves_set = {'1', '2', '3', '4', '5', '6', '7', '8', '9'}
values_dict_1 = {'1': ' ', '2': ' ', '3': ' ',
'4': ' ', '5': ' ', '6': ' ',
'7': ' ', '8': ' ', '9': ' '}
bot.send_message(message.from_user.id, text="Игра началась",
reply_markup=grid_one(values_dict_1, all_moves_set))
callback:
@bot.callback_query_handler(func=lambda call: True)
def callback_data(call):
if call.data[0] == '1':
move, values_dict, all_moves_set, values_dict_1, values_dict_2, values_dict_3, values_dict_4, values_dict_5, values_dict_6, values_dict_7, values_dict_8, values_dict_9 = unpacking_values(call.data)
if move in all_moves_set:
if move == 1:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_one(values_dict_1, all_moves_set))
elif move == 2:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_two(values_dict_2, all_moves_set))
elif move == 3:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_three(values_dict_3, all_moves_set))
elif move == 4:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_four(values_dict_4, all_moves_set))
elif move == 5:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_five(values_dict_5, all_moves_set))
elif move == 6:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_six(values_dict_6, all_moves_set))
elif move == 7:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_seven(values_dict_7, all_moves_set))
elif move == 8:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_eight(values_dict_8, all_moves_set))
elif move == 9:
bot.edit_message_reply_markup(call.message.from_user.id, text="Выберите клетку",
reply_markup=grid_nine(values_dict_9, all_moves_set))