如何在不终止函数的情况下返回值?

时间:2016-02-25 11:44:19

标签: python telegram-bot

我正在使用https://github.com/python-telegram-bot/python-telegram-bot编写电报机器人。

我从echo示例开始,并不想远离它:换句话说,我希望机器人代码只将文本转发到另一个函数,转换它并将其发回。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Simple Bot to reply to Telegram messages
# This program is dedicated to the public domain under the CC0 license.

"""
This Bot uses the Updater class to handle the bot.
First, a few handler functions are defined. Then, those functions are passed to
the Dispatcher and registered at their respective places.
Then, the bot is started and runs until we press Ctrl-C on the command line.
Usage:
Basic Echobot example, repeats messages.
Press Ctrl-C on the command line or send a signal to the process to stop the
bot.
"""
from telegram import Updater
import logging
import process

# Enable logging
logging.basicConfig(
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        level=logging.INFO)

logger = logging.getLogger(__name__)


# Define a few command handlers. These usually take the two arguments bot and
# update. Error handlers also receive the raised TelegramError object in error.
def start(bot, update):
    bot.sendMessage(update.message.chat_id, text='Hi!')

def help(bot, update):
    bot.sendMessage(update.message.chat_id, text='Help!')

def echo(bot, update):
    bot.sendMessage(chat_id=update.message.chat_id, text = process.do_something(update.message.text))

def error(bot, update, error):
    logger.warn('Update "%s" caused error "%s"' % (update, error))

def main():
    # Create the EventHandler and pass it your bot's token.
    updater = Updater("MYTOKEN")

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

    # on different commands - answer in Telegram
    dp.addTelegramCommandHandler("start", start)
    dp.addTelegramCommandHandler("help", help)

    # on noncommand i.e message - echo the message on Telegram
    dp.addTelegramMessageHandler(echo)

    # log all errors
    dp.addErrorHandler(error)

    # Start the Bot
    updater.start_polling()

    # Run the bot until the you presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT. This should be used most of the time, since
    # start_polling() is non-blocking and will stop the bot gracefully.
    updater.idle()

if __name__ == '__main__':
    main()

所以,echo函数就是这样做的。

让我们假设这个过程如下:

def do_something(text):
    return text+" bla bla bla"

现在这个有效。但是,如果我想做其他事情,然后在一小时后写回用户,以防其他一些数据发生变化,该怎么办?

有没有办法在用户不必再次回写系统的情况下返回一些文本?就像把这个功能搁置一样?

因此,当用户写入系统时,交互开始,并且它可以存活最多1小时。我不想使用tell(userid,text)功能。我有一些感觉,认为我是正确的工具。我对吗 ?对我来说它是如何工作的完全模糊。

0 个答案:

没有答案