• Как реализовать функцию для ограниченного круга лиц?

    Treimox
    @Treimox
    Создайте массив или занесите в базу данных ID тех, кому разрешено исполнять команду (в нашем случае нажимать на кнопку).

    Я не пишу ботов на PyTelegramBotApi (а я так понимаю Вы его используете), я пишу на Aiogram, думаю, портировать код под себя не составит труда.

    @dp.message_handler(commands=['алкоголь'], commands_prefix='+')
    async def drink(message: types.Message):
        ids = [21212121, 28282821, 27171721]
    
        inline = InlineKeyboardMarkup(row_width=2)
        btn1 = InlineKeyboardButton(text='Бурбон(Виски)', callback_data='viski')
        btn2 = InlineKeyboardButton(text='Амаретто', callback_data='belis')
        inline.add(btn1, btn2)
    
        await message.answer("Выберите категорию", reply_markup=inline)
    
        @dp.callback_query_handler()
        async def buttons(callback: types.CallbackQuery):
            if callback.data == 'viski':
                if callback.from_user.id in ids:
                    await message.answer("Вы приобрели виски!")
                else:
                    await message.answer("Нет доступа!")
            elif callback.data == 'belis':
                if callback.from_user.id in ids:
                    await message.answer("Вы приобрели бэйлис!")
                else:
                    await message.answer("Нет доступа!")

    И так с остальными кнопками.
    Ответ написан
  • С чем связана ошибка Telegram?

    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.
    Ответ написан
    Комментировать