Ошибка с обновлением сообщения
До недавнего времени все было нормально, но после того, как я обновил вывод сообщения по нажатию на inline кнопки, появилась ошибка
aiogram.utils.exceptions.MessageNotModified: Message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
Я сделал бекап, но ошибка мало того не исчезла, дак и еще по нажатию на другие inline кнопки, мне выводится другой запрос. Если понадобиться, я могу скинуть код, просто мне кажется дело не в нем Код: main.py
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
if str(message.from_user.id) in str(db.get_all_telegram_id()):
pass
else:
db.write_data(message.from_user.id)
name_clan = message.text[7:]
if name_clan == '':
if db.get_nickname(message.from_user.id) == None or db.get_nickname(message.from_user.id) == '':
await bot.send_message(message.from_user.id, 'Привет, этот бот является игрой с элементами из реальной жизни\nПридумай игровой ник\n<i>Его нельзя будет изменить потом</i>', parse_mode='HTML')
await New_player.insert_nickname.set()
else:
await bot.send_message(message.from_user.id, f'Ваш персонаж:\n\nИмя: <b>{db.get_nickname(message.from_user.id)}</b>\nРодство: <b>{db.get_race(message.from_user.id)}</b>\nКлан: <b>{db.get_name_clan(message.from_user.id)}</b>\nУровень: <b>{db.get_level(message.from_user.id)}</b>', reply_markup=nav.startmenu, parse_mode='HTML')
else:
if name_clan not in str(db.get_list_of_clan()):
await bot.send_message(message.from_user.id, 'Привет, этот бот является игрой с элементами из реальной жизни\n<i>Клана, в который вас пригласили, либо не существует, либо его переименовали\nМожете попробовать еще раз, либо начать без клана, для этого придумайте и напишите ник</i>', parse_mode='HTML')
await New_player.insert_nickname.set()
else:
if db.get_nickname(message.from_user.id) != None:
db.join_clan(name_clan, message.from_user.id)
await bot.send_message(message.from_user.id, f'Поздравляю, теперь вы в клане <b>{name_clan}</b>', reply_markup=nav.startmenu, parse_mode='HTML')
else:
db.join_clan(name_clan, message.from_user.id)
await bot.send_message(message.from_user.id,
text=f'Прежде чем вступить в клан <b>{name_clan}</b> придумайте игровой ник', parse_mode='HTML')
#Поздравляю, теперь вы в клане <b>{name_clan}</b>',reply_markup=nav.startmenu, parse_mode='HTML')
await New_player.insert_nickname.set()
@dp.message_handler(state=New_player.insert_nickname)
async def insert_nick(message: types.Message, state: FSMContext):
#('0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' in message.text[0]) or
if (len(message.text) > 15) or message.text[0] == '/':
await bot.send_message(message.from_user.id, '<i>Ник должен начинатся с буквы, не содержать специальных символов и быть меньше 15 символов\nВведите другой ник</i>', parse_mode='HTML')
elif message.text in str(db.get_all_nickname()):
await bot.send_message(message.from_user.id,
'<i>Такой ник уже занят\nВведите другой</i>',
parse_mode='HTML')
else:
db.create_nick(message.text, message.from_user.id)
await state.finish()
if db.get_name_clan(message.from_user.id) != 'None' or db.get_name_clan(message.from_user.id) != '':
await bot.send_message(message.from_user.id, f'Ну что же, <b>{db.get_nickname(message.from_user.id)}</b>, будем знакомы, но кто ты?', parse_mode='HTML', reply_markup=nav.races_choice)
#await bot.send_message(message.from_user.id, f'Поздравляю, теперь вы в клане <b>{db.get_name_clan(message.from_user.id)}</b>', reply_markup=nav.startmenu, parse_mode='HTML')
else:
#await bot.send_message(message.from_user.id, f'Ну что же, <b>{db.get_nickname(message.from_user.id)}</b>, будем знакомы, но кто ты?', parse_mode='HTML', reply_markup=nav.races_choice)
await bot.send_message(message.from_user.id, 'Теперь твое приключение начинается\nДля того, чтобы было веселее можешь вступить или создать свой клан', reply_markup=nav.startmenu)
@dp.callback_query_handler(text=['people', 'elf', 'gnom', 'ork', 'trol', 'goblin', 'drenei', 'demon', 'vampire'])
async def races_choice(call: types.CallbackQuery):
if call.data == 'people':
db.write_race('Человек', call.from_user.id)
elif call.data == 'elf':
db.write_race('Эльф', call.from_user.id)
elif call.data == 'gnom':
db.write_race('Гном', call.from_user.id)
elif call.data == 'ork':
db.write_race('Орк', call.from_user.id)
elif call.data == 'trol':
db.write_race('Тролль', call.from_user.id)
elif call.data == 'goblin':
db.write_race('Гоблин', call.from_user.id)
elif call.data == 'drenei':
db.write_race('Дренеи', call.from_user.id)
elif call.data == 'demon':
db.write_race('Демон', call.from_user.id)
elif call.data == 'vampire':
db.write_race('Вампир', call.from_user.id)
if db.get_name_clan(call.from_user.id) == None or db.get_name_clan(call.from_user.id) == '':
await bot.edit_message_text(chat_id=call.from_user.id,
text=f'Ваш персонаж:\n\nИмя: <b>{db.get_nickname(call.from_user.id)}</b>\nРодство: <b>{db.get_race(call.from_user.id)}</b>\nКлан: <b>{db.get_name_clan(call.from_user.id)}</b>\nУровень: <b>{db.get_level(call.from_user.id)}</b>',
message_id=call.message.message_id, reply_markup=nav.startmenu, parse_mode='HTML')
await bot.send_message(call.from_user.id,
'Теперь твое приключение начинается\nДля того, чтобы было веселее можешь вступить или создать свой клан',)
else:
await bot.edit_message_text(chat_id=call.from_user.id,
text=f'Ваш персонаж:\n\nИмя: <b>{db.get_nickname(call.from_user.id)}</b>\nРодство: <b>{db.get_race(call.from_user.id)}</b>\nКлан: <b>{db.get_name_clan(call.from_user.id)}</b>\nУровень: <b>{db.get_level(call.from_user.id)}</b>',
message_id=call.message.message_id, reply_markup=nav.startmenu, parse_mode='HTML')
await bot.send_message(call.from_user.id,
f'Поздравляю, теперь вы в клане <b>{db.get_name_clan(call.from_user.id)}</b>', parse_mode='HTML')
@dp.callback_query_handler(text='start_menu_clan')
async def menu_clan(call: types.CallbackQuery):
if db.get_name_clan(call.from_user.id) == None or db.get_name_clan(call.from_user.id) == '':
list_of_clans = InlineKeyboardMarkup(row_width=2)
for i in range(0, len(db.get_list_of_clan())):
clans = db.get_list_of_clan()[i][0]
clans = InlineKeyboardButton(text=f'{clans}', callback_data=f'clans{str(i)}')
list_of_clans.insert(clans)
back = InlineKeyboardButton(text='Назад', callback_data='back_startmenu')
list_of_clans.insert(nav.back_startmenu)
#await message.re
await call.message.edit_text(f'Ваш персонаж:\nИмя: <b>{db.get_nickname(call.from_user.id)}</b>Родство: <b>{db.get_race(call.from_user.id)}</b>Клан: <b>{db.get_name_clan(call.from_user.id)}</b>Уровень: <b>{db.get_level(call.from_user.id)}</b>', reply_markup=list_of_clans, parse_mode='HTML')
else:
await call.message.edit_text(f'Ваш персонаж:\nИмя: <b>{db.get_nickname(call.from_user.id)}</b>Родство: <b>{db.get_race(call.from_user.id)}</b>Клан: <b>{db.get_name_clan(call.from_user.id)}</b>Уровень: <b>{db.get_level(call.from_user.id)}</b>', reply_markup=nav.menu_clan, parse_mode='HTML')
@dp.callback_query_handler(text='back_startmenu')
async def back_start_menu(call: types.CallbackQuery):
if call.message.content_type == 'venue':
await call.message.delete()
else:
await bot.send_message(call.from_user.id, f'Ваш персонаж:\nИмя: <b>{db.get_nickname(call.from_user.id)}</b>Родство: <b>{db.get_race(call.from_user.id)}</b>Клан: <b>{db.get_name_clan(call.from_user.id)}</b>Уровень: <b>{db.get_level(call.from_user.id)}</b>', reply_markup=nav.menu_clan, parse_mode='HTML')
#Конец стартовое меню
#Меню клана
@dp.callback_query_handler(text_startswith="clans")
async def clans(call: types.CallbackQuery):
data = (call.data.title()).lower()
name = call.message.reply_markup['inline_keyboard'][0]
for i in range(len(name)):
if name[i]["callback_data"] == data:
clan_name = name[i]['text']
db.join_clan(clan_name=clan_name, telegram_id=call.from_user.id)
await bot.send_message(call.from_user.id, f'Вы успешно вступили в клан <b>{clan_name}</b>', reply_markup=nav.menu_clan,
parse_mode='HTML')
break
@dp.callback_query_handler(text='invite_link')
async def invite_link(call: types.CallbackQuery):
await bot.edit_message_text(chat_id=call.from_user.id, message_id=call.message.message_id, text=f'Ссылка для приглашения в клан:\nhttps://t.me/IRL_game_bot?start={db.get_name_clan(call.from_user.id)}', reply_markup=nav.menu_clan)
@dp.callback_query_handler(text='list_of_members')
async def get_list_of_members(call: types.CallbackQuery):
members_list = [list(i) for i in db.get_members_in_clan(db.get_name_clan(call.from_user.id))]
members = ''
for i in members_list:
members = members + f'{i[0]} {i[1]} {i[2]} Уровень - {i[3]}\n'
await call.message.edit_text(f'Участники клана <b>{db.get_name_clan(call.from_user.id)}</b>:\n{members}', parse_mode='HTML', reply_markup=nav.menu_clan)
#Конец меню клана
#Карта
@dp.callback_query_handler(text='map')
async def map(call: types.CallbackQuery):
back = InlineKeyboardMarkup(row_width=1)
back.insert(nav.back_startmenu)
await bot.send_venue(call.from_user.id, latitude=db.get_all_monsters()[0][1], longitude=db.get_all_monsters()[0][2], title=db.get_all_monsters()[0][0], address='Город', reply_markup=nav.attack_menu)
await bot.send_message(call.from_user.id, f'Когда доберетесь до монстра, нажмите на кнопку Атаковать для отправки геопозиции\nМонстр убежит через {60 - int(time.time() - float(db.get_all_monsters()[0][3]))} секунд, так что поторопитесь', reply_markup=back)
await call.message.delete()
#await bot.send_location(message.id, latitude=57.973026, longitude=56.235289, reply_markup=nav)
@dp.callback_query_handler(text='attack')
async def attack(message: types.Message):
pass
#Конец карты
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Buttons.py
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove
races_choice = InlineKeyboardMarkup(row_width=2)
people = InlineKeyboardButton(text='Человек', callback_data='people')
elf = InlineKeyboardButton(text='Эльф', callback_data='elf')
gnom = InlineKeyboardButton(text='Гном', callback_data='gnom')
ork = InlineKeyboardButton(text='Орк', callback_data='ork')
trol = InlineKeyboardButton(text='Тролль', callback_data='trol')
goblin = InlineKeyboardButton(text='Гоблин', callback_data='goblin')
drenei = InlineKeyboardButton(text='Дренеи', callback_data='Дренеи')
demon = InlineKeyboardButton(text='Демон', callback_data='demon')
vampire = InlineKeyboardButton(text='Вампир', callback_data='vampire')
races_choice.add(people, elf, gnom, ork, trol, goblin, drenei, demon, vampire)
startmenu = InlineKeyboardMarkup(row_width=2)
#clan = InlineKeyboardButton(text='Создать клан', callback_data='clan')
start_menu_clan = InlineKeyboardButton(text='Клан', callback_data='start_menu_clan')
map = InlineKeyboardButton(text='Карта', callback_data='map')
startmenu.add(start_menu_clan, map)
menu_clan = InlineKeyboardMarkup(row_width=2)
list_of_members = InlineKeyboardButton(text='Список участников', callback_data='list_of_members')
invite_link = InlineKeyboardButton(text='Ссылка для приглашения', callback_data='invite_link')
back_startmenu = InlineKeyboardButton(text='Назад', callback_data='back_startmenu')
menu_clan.add(list_of_members, invite_link, back_startmenu)
attack_menu = ReplyKeyboardMarkup(row_width=1, resize_keyboard=True, one_time_keyboard=True)
attack = KeyboardButton(text='Атаковать!', request_location=True)
attack_menu.add(attack)