Использование команд (/) во встроенном режиме для бота Telegram - PullRequest
0 голосов
/ 01 марта 2020

Я использую python -telegram-bot wrapper.

Для команды, вызываемой с помощью '/', у меня есть следующий метод:

def advice(update, context):
    with open ("advice.txt", "rt") as file_advice:
        line=file_advice.readlines()
        advice_message=random.choice(line)
    context.bot.send_message(chat_id=update.effective_chat.id, text=advice_message)

advice_handler = CommandHandler('advice', advice)
dispatcher.add_handler(advice_handler)

Я хочу этот метод вызываться во встроенном режиме, когда набирается '/ advice', и во всех остальных случаях вывод не должен быть.

Я знаком с примерами от разработчиков-оболочек, где они показывают следующий код:

def inline_caps(update, context):
    query = update.inline_query.query
    if not query:
        return
    results = list()
    results.append(
        InlineQueryResultArticle(
            id=query.upper(),
            title='Caps',
            input_message_content=InputTextMessageContent(query.upper())
        )
    )
    context.bot.answer_inline_query(update.inline_query.id, results)

inline_caps_handler = InlineQueryHandler(inline_caps)
dispatcher.add_handler(inline_caps_handler)

Я пытался поменять query.upper() на advice(update, context), но есть разные ошибки в неизвестном типе, поэтому кажется, что я не знаю, что делаю.

1 Ответ

0 голосов
/ 20 апреля 2020

Это не будет работать так, потому что InputTextMessageContent () требует как минимум строку, а ваша функция не возвращает строку. В этом случае я бы переписал функцию извещения, чтобы вы могли повторно использовать ее в своем обработчике команд и встроенном обработчике.

import random
from uuid import uuid4

def getAdvice():
    with open ("advice.txt", "rt") as file_advice:
        line=file_advice.readlines()
        advice_message=random.choice(line)
    return advice_message

def advice(update, context):
    advice_message=getAdvice()
    context.bot.send_message(chat_id=update.effective_chat.id, text=advice_message)

def inlinequery(update, context):
    query = update.inline_query.query
    results = [
        InlineQueryResultArticle(
            id=uuid4(),
            title="/advice",
            input_message_content=InputTextMessageContent(
                getAdvice()))
        ]
    update.inline_query.answer(results)

advice_handler = CommandHandler('advice', advice)
dispatcher.add_handler(advice_handler)
inlinequery_handler = InlineQueryHandler(inlinequery)
dispatcher.add_handler(inlinequery_handler)
...