0

我正在构建一个电报机器人,它接受货币对并回复其数据。每当有变化时,机器人都应该继续发送与该货币对相关的数据,直到用户要求它停止或输入一个新的价值/货币对。我在处理程序中使用了一个 while 循环,但这会使脚本很忙,因此更新程序无法在循环期间查找新消息。这是处理程序

def reply(update: Update, context: CallbackContext):
    """Echo the user message."""
    chat_type = update.effective_chat.type
    if chat_type == "channel":
        msg = update.channel_post.text.lower()
    else:
        msg = update.message.text.lower()
    msgs = msg.split(',')
    while True:
        if len(msgs) > 1 and len(msgs) < 4:
            convert = msgs[1].upper()
            if len(msgs[0]) > 3:
                name = msgs[0].capitalize()
            else:
                name = msgs[0].upper()
            data = coindata(name=name, convert=convert)
            if len(msgs) == 2:
                response = data
            elif len(msgs) == 3:
                data_val = msgs[2]
                response = f"currency: {name}" + f"   convert: {convert}" + f"  {data_val}: {data[data_val]}"
                context.bot.send_message(chat_id=update.effective_chat.id, text=response)
            time.sleep(20)
        else:
            response = "Wrong input"
            context.bot.send_message(chat_id=update.effective_chat.id, text=response)
            time.sleep(20)

这是开始轮询的主要方法。


def main() -> None:
    """Start the bot."""
    # Create the Updater and pass it bot's token.
    updater = Updater(token=TOKEN)

    # Get the dispatcher to register handlers
    dispatcher = updater.dispatcher

    # on different commands - answer in Telegram
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(CommandHandler("help", help))
    dispatcher.add_handler(MessageHandler(Filters.text, reply))

    # Start the Bot
    updater.start_polling()

    updater.idle()

我知道问题所在。但是,不知道解决方案。在运行回复循环时,机器人应该仍然能够接收新消息。

怎么做到呢?

4

0 回答 0