• Как компактно написать код для многоуровневой клавиатуры меню для бота в Телеграмме?

    @Alpharius_Prog Автор вопроса
    Елисей Карамышев, только что попробовал. Выбивает ошибку 400
    2022-05-18 15:33:44,009 (__init__.py:688 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: can't parse keyboard button: Field "text" must be of type String"
  • Как реализовать пагинацию для телеграмм-бота?

    @Alpharius_Prog Автор вопроса
    BirdHappy, путем проб и ошибок разобрался с кодом пагинации. Как этот код вклинить после категорий "Science", "Arts" и так далее?
  • Как реализовать пагинацию для телеграмм-бота?

    @Alpharius_Prog Автор вопроса
    Алан Гибизов, Хорошо. Вот код, куда планировалось вставить пагинацию:
    spoiler
    def EN(message):
        if (message.text == "EN"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item11 = types.KeyboardButton("Choose category")
            item12 = types.KeyboardButton("FAQ")
            item13 = types.KeyboardButton("About")
            item14 = types.KeyboardButton("Payment instructions")
            item15 = types.KeyboardButton("Back")
            markup.add(item11,item12,item13,item14,item15)
            bot.send_message(message.chat.id,text = "EN", reply_markup=markup)
        elif (message.text == "Choose category"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item111 = types.KeyboardButton("History")
            item112 = types.KeyboardButton("Science")
            item113 = types.KeyboardButton("Arts")
            item114 = types.KeyboardButton("Back")
            markup.add(item111,item112,item113,item114)
            bot.send_message(message.chat.id,text = "Choose category", reply_markup=markup)
        elif (message.text == "FAQ"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item122 = types.KeyboardButton("Back")
            markup.add(item122)
            text = """Text about TOP\-7 questions"""
            bot.send_message(message.chat.id,text,parse_mode = 'MarkdownV2',reply_markup=markup)
        elif (message.text == "Payment instructions"):
            markup = types.InlineKeyboardMarkup()
            item141 = types.InlineKeyboardButton("Binance", url = 'https://www.binance.com/en/support/faq/c-2?navId=2')
            item142 = types.InlineKeyboardButton("BlockChain",url = 'https://support.blockchain.com/hc/en-us/sections/4517566823060-Deposits-and-Withdrawals')
            item143 = types.InlineKeyboardButton("TrustWallet",url = 'https://community.trustwallet.com/t/how-to-create-a-payment-request/23332')
            markup.add(item141,item142,item143)
            bot.send_message(message.chat.id,text = "Choose your Wallet", reply_markup=markup)
        elif (message.text == "Back"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item11 = types.KeyboardButton("Choose category")
            item12 = types.KeyboardButton("FAQ")
            item13 = types.KeyboardButton("About")
            item14 = types.KeyboardButton("Payment instructions")
            item15 = types.KeyboardButton("Back")
            markup.add(item11,item12,item13,item14,item15)
            bot.send_message(message.chat.id,text = "You returned to the menu", reply_markup=markup)
        else:
            RU(message)

    В качестве пробного кода для пагинации был написан следующий код:
    import telebot
    from telebot import types
    from telegram_bot_pagination import InlineKeyboardPaginator
    from texts import arr
    token = 'дваопщвгашщпвапвдапукзщелудрпшв'
    bot = telebot.TeleBot(token)
    @bot.message_handler(func=lambda message:True)
    def get_text(message):
        send_text_page(message)
    @bot.callback_query_handler(func=lambda call: call.texts.split('#')[0]=='text')
    def text_page_callback(call):
        page = int(call.texts.split('#')[1])
        bot.delete_message(call.message.chat.id,call.message.message_id)
        send_text_page(call.message,page)
    def send_text_page(message,page=1):
        paginator = InlineKeyboardPaginator(len(arr),current_page=page,data_pattern='text#{page}')
        paginator.add_before(types.InlineKeyboardButton('Like',callback_data='like#{}'.format(page)),types.InlineKeyboardButton('Dislike',callback_data='dislike#{}'.format(page)))
        paginator.add_after(types.InlineKeyboardButton('Go Back',callback_data='back'))
        bot.send_message(message.chat.id,arr[page-1],reply_markup=paginator.markup)
    bot.polling()

    Ожидалось, что после включения телеграмм-бот будет переключать тексты по принципу "Одна страница-один текст" . Но после включения и переключения на следующую страницу вылезает следующая ошибка:
    spoiler
    Traceback (most recent call last):
    File "c:/Users/admin/Desktop/Python/bot.py", line 5, in
    import cards_en
    File "c:\Users\admin\Desktop\Python\cards_en.py", line 20, in
    bot.polling()
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 658, in polling
    self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 720, in __threaded_polling
    raise e
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 679, in __threaded_polling
    polling_thread.raise_exceptions()
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\util.py", line 105, in raise_exceptions
    raise self.exception_info
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\util.py", line 87, in run
    task(*args, **kwargs)
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 410, in __retrieve_updates
    self.process_new_updates(updates)
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 502, in process_new_updates
    self.process_new_callback_query(new_callback_queries)
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 540, in process_new_callback_query
    self._notify_command_handlers(self.callback_query_handlers, new_callback_querys)
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 3450, in _notify_command_handlers
    if self._test_message_handler(message_handler, message):
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 3392, in _test_message_handler
    if not self._test_filter(message_filter, filter_value, message):
    File "C:\Program Files\Python38-32\lib\site-packages\telebot\__init__.py", line 3421, in _test_filter
    return filter_value(message)
    File "c:\Users\admin\Desktop\Python\cards_en.py", line 10, in
    @bot.callback_query_handler(func=lambda call: call.texts.split('#')[0]=='text')
    AttributeError: 'CallbackQuery' object has no attribute 'texts'


    Как разобраться с этой ошибкой?
  • Как создать массив из текстовых файлов?

    @Alpharius_Prog Автор вопроса
    Давайте на примере объясню:
    Вместо этого кода
    def EN(message):
        if (message.text == "EN"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item11 = types.KeyboardButton("Choose category")
            item12 = types.KeyboardButton("FAQ")
            item13 = types.KeyboardButton("About")
            item14 = types.KeyboardButton("Payment instructions")
            item15 = types.KeyboardButton("Back")
            markup.add(item11,item12,item13,item14,item15)
            bot.send_message(message.chat.id,text = "EN", reply_markup=markup)
        elif (message.text == "Choose category"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item111 = types.KeyboardButton("History")
            item112 = types.KeyboardButton("Science")
            item113 = types.KeyboardButton("Arts")
            item114 = types.KeyboardButton("Back")
            markup.add(item111,item112,item113,item114)
            bot.send_message(message.chat.id,text = "Choose category", reply_markup=markup)
        elif (message.text == "FAQ"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item122 = types.KeyboardButton("Back")
            markup.add(item122)
            text = """Text about TOP\-7 questions"""
            bot.send_message(message.chat.id,text,parse_mode = 'MarkdownV2',reply_markup=markup)
        elif (message.text == "Payment instructions"):
            markup = types.InlineKeyboardMarkup()
            item141 = types.InlineKeyboardButton("Binance", url = 'https://www.binance.com/en/support/faq/c-2?navId=2')
            item142 = types.InlineKeyboardButton("BlockChain",url = 'https://support.blockchain.com/hc/en-us/sections/4517566823060-Deposits-and-Withdrawals')
            item143 = types.InlineKeyboardButton("TrustWallet",url = 'https://community.trustwallet.com/t/how-to-create-a-payment-request/23332')
            markup.add(item141,item142,item143)
            bot.send_message(message.chat.id,text = "Choose your Wallet", reply_markup=markup)
        elif (message.text == "Back"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item11 = types.KeyboardButton("Choose category")
            item12 = types.KeyboardButton("FAQ")
            item13 = types.KeyboardButton("About")
            item14 = types.KeyboardButton("Payment instructions")
            item15 = types.KeyboardButton("Back")
            markup.add(item11,item12,item13,item14,item15)
            bot.send_message(message.chat.id,text = "You returned to the menu", reply_markup=markup)
        elif (message.text == "Science"):
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item1221 = types.KeyboardButton("Back")
            markup.add(item1221)
            a = open('extract.txt',"r",encoding="utf-8")
            text=a.read()
            text1 = '*Use this link for access to the full version of the text*\n'+'*[Binance](https://link.trustwallet.com/send?coin=0&address=bc1q83d2jeh58cv66h6kglr33dgwex6krekdg5uwsa)*'
            bot.send_message(message.chat.id,text)
            bot.send_message(message.chat.id,text=text1,parse_mode='MarkdownV2')

    мне нужно добавить карточку с текстом так же, как это было сделано в статье(ссылку на нее уже прилагал ранее).
    Иначе мне придется добавлять новую переменную и работать с каждой текстовой карточкой как с новым файлом. Можно ли два и более файлов скомпоновать в массив?
  • Как переключать функции в питоне?

    @Alpharius_Prog Автор вопроса
    Василий Банников, Проще говоря: если ни одно из условий не выполнилось, то функция EN меняется на функцию RU