Treimox
@Treimox

С чем связана ошибка Telegram?

Приветствую, создаю систему браков в боте Telegram. Мой код относительно рабочий и исправно исполняет свои функции, однако, спустя какое-то время этот самый код становится нерабочим, а спустя ещё какое-то время опять рабочим. Что за бред? У меня тот же вопрос.
@dp.message_handler(commands=['брак'], commands_prefix='+')
async def love(message: types.Message):

    user = message.from_user.get_mention(as_html=True)
    #userTwoLink = message.reply_to_message.from_user.get_mention(as_html=True)
   # userTwo = re.findall(r'\d+', str(userTwoLink))[0]
    if not message.reply_to_message:
        await message.answer("Ответьте на сообщение")
        return


    inline = InlineKeyboardMarkup(row_width=2)
    yeah = InlineKeyboardButton(text='Согласиться', callback_data='accept')
    nope = InlineKeyboardButton(text='Отказаться', callback_data='decline')

    inline.add(yeah, nope)

    answer = await message.answer(f'✨ Минуточку внимания!\n\n'
                         f'[‍⚖️] {user} предложил заключить брак с <a href="tg://user?id={message.reply_to_message.from_user.id}">{message.reply_to_message.from_user.first_name}</a>\n'
                         f'[❤️] Согласится ли вторая половинка на заключение?\n'
                         f'[‍] <a href="tg://user?id={message.reply_to_message.from_user.id}">{message.reply_to_message.from_user.first_name}</a> решать Вам! Нажмите одну из кнопок, чтобы принять решение', reply_markup=inline, parse_mode='HTML')

    @dp.callback_query_handler()
    async def loveCallback(callback: types.CallbackQuery):
        if callback.data == 'accept':
            if callback.from_user.id == message.reply_to_message.from_user.id:
                now = datetime.datetime.now()
                strf = now.strftime("%d.%m.%Y")
                stamp = now.timestamp()
                await callback.answer(text=f'Вы заключили брак! ❤️')
                await answer.edit_text(text=f"[❤️] Партнёр принял предложение! Брак состоялся {strf}")
            else:
                await callback.answer(text=f'Эта кнопка не для тебя!')
        else:
            if callback.from_user.id == message.reply_to_message.from_user.id:
                await callback.answer(text='Вы отказались от предложения! ')
                await answer.edit_text(text=f"[] Партнёр отказался от предложения! Брак не состоялся")
            else:
                await callback.answer(text='Эта кнопка не для тебя!')

Переменные созданы для внесения в базу данных даты создания брака.
now = datetime.datetime.now()
strf = now.strftime("%d.%m.%Y")
stamp = now.timestamp()

Старый метод проверки на то, кто нажал кнопку
#userTwoLink = message.reply_to_message.from_user.get_mention(as_html=True)
 #userTwo = re.findall(r'\d+', str(userTwoLink))[0]

Вот, код прекрасно выполняет свою работу.
63da4183dfdef836888471.png
Здесь уже нет.
63da4231c33f1231576366.png
Я решил вывести ID'шники тех, кто нажимает на кнопку и тех, кого бот ожидает для нажатия. Первое сообщение - кто нажал, второе - кого ожидают. Смотря на картинку можно понять, что я нажал на кнопку, но ожидается тот, кто отправил предложение. Почему это так и как это можно исправить?

Также, иногда выскакивает ошибка:
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
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
Treimox
@Treimox Автор вопроса
В итоге сам разобрался с этой проблемой, база данных как всегда выручила...
db.cursor.execute("SELECT id FROM users WHERE id = ?", (message.from_user.id, ))
    if db.cursor.fetchone() is None:
        db.cursor.execute("INSERT INTO users VALUES (?, ?)", (message.from_user.id, message.reply_to_message.from_user.id))
        db.db.commit()

 @dp.callback_query_handler()
    async def loveCallback(callback: types.CallbackQuery):
        if callback.data == 'accept':
            db.cursor.execute("SELECT replyId FROM users WHERE replyId = ?", (callback.from_user.id, ))
            if db.cursor.fetchone() is None:
                await callback.answer(text=f'Эта кнопка не для тебя!')
                await message.answer(f"Брак не заключён")
            else:
                now = datetime.datetime.now()
                strf = now.strftime("%d.%m.%Y")
                stamp = now.timestamp()
                await callback.answer(text=f'Вы заключили брак! ❤️')
                # await answer.edit_text(text=f"[❤️] Партнёр принял предложение! Брак состоялся {strf}")
                await message.answer(f"Брак заключен")
                db.cursor.execute("DELETE FROM users WHERE replyId = ?", (callback.from_user.id, ))
                db.db.commit()
        else:
           #if callback.from_user.id == int(users[1]):
           #    await callback.answer(text='Вы отказались от предложения! ')
           #    await answer.edit_text(text=f"[] Партнёр отказался от предложения! Брак не состоялся")
           #else:
           #    await callback.answer(text='Эта кнопка не для тебя!')
            pass


Что касаемо "Message is not modified" - ошибки пока что не было, однако, оберну просто код в try / except.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект