@ZERRITO
Пустой ноль

Как передать несколько аргументов в callback?

Использую pyTelegramBotAPI
Возможно ли передать несколько аргументов в callback, кроме как через callback_data? В последнем случае можно передать только строку, но я хотел бы передавать несколько значений: то, что указал пользователь, айди чата и ещё несколько. Выглядит это примерно так:
spoiler

@bot.message_handler(commands=["echo"])
def send_echo(message):
    content = " ".join( message.text.split(" ")[1:] )
    types.InlineKeyboardMarkup().add(
        types.InlineKeyboardButton("Отправить контент", callback_query=content+"|"+str(message.chat.id)+"|"+message.from_user.first_name) # Отправляю все данные
    )
    # Отправляю сообщение и прикрепляю кнопки ...
    

@bot.callback_query_handler(func=lambda callback: True)
def get_callback(callback):
    print(callback.data.split("|")) # Получаю данные, после чего превращаю в список
    ...


Для меня не очень удобно пихать весь текст в одну строчку, а потом разбивать его на части.
  • Вопрос задан
  • 646 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Нет, только так.
Но никто не запрещает запихнуть туда json или base64
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bellenne
У меня получилось сделать следующий вариант:
1. Создаю массив с данными которые мне необходимо передать
2. Кодирую его в формат JSON
3. Дале этот JSON кодирую в BASE64
4. Странно, но у меня бот не принимал строку без /, поэтому я дописал к полученной строке BASE64 /com
Итого строка которая передаётся в в callback выглядит так: /com eyJpZF9waXp6YSI6MSwiY291bnQiOjZ9

И теперь когда мне нужно получить данные из callback я делаю следующее:
1. Получаю подстроку eyJpZF9waXp6YSI6MSwiY291bnQiOjZ9 из callback data
2. Декодирую её BASE64 в изначальный формат
3. Декодирую JSON в object
4. преобразую object в массив

Вуаля, я получил необходимые данные. Сам прошерстил интернет в поиске подобной инфы, увидел вариант с base64 решил попробовать, вышло, странно что разработчики telegram не дают возможности передавать массивы в колбэке, приходится обходить данные ограничения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы