Python:电报机器人的替代 while 循环

Python: Alternative while loop with telegram bot

我使用此代码从列表中获取随机行 "my_list" 我创建了一个 while 循环,如果我在 telegram 中输入 /start 与我的 bot 交谈,它就会工作。

唯一的问题是我的电脑卡住了,因为这个无限循环可能占用了我的全部内存。而且我不喜欢这个循环,即使我没有调用它,它也会持续工作。

没有 while 循环的问题是它只读取一次代码,每次在电报中键入 /start 时都会得到相同的行。

我试过做一个函数,如果从电报调用 "start" 就把它传递给 for 循环,但没有结果,因为这对我来说有点太高级了。

如果在没有 while 循环的电报中输入 /start,我希望有人能告诉我从 my_list 换行的解决方案:')

import time
import urllib.request as urllib
import json
import html
import random

from telegram.ext import Updater
from telegram.ext import CommandHandler

updater = Updater(token='<token>')
dispatcher = updater.dispatcher

while True:
    my_list = ['\"this is line1\"',
        '\"this is line2\"',
        '\"this is line3\"',
        '\"this is line4\"',
        '\"this is line5\"'
        ]

    my_random = random.choice(my_list)

    def func1():
        return my_random

    def start(bot, update):
        bot.send_message(chat_id=update.message.chat_id, text=func1())

    my_handler = CommandHandler('start', start)

    dispatcher.add_handler(my_handler)

    updater.start_polling()

如果你不需要使用 while 循环,你只需要这样编码:

import time
import urllib.request as urllib
import json
import html
import random

from telegram.ext import Updater
from telegram.ext import CommandHandler

updater = Updater(token='token')
dispatcher = updater.dispatcher

def func1():
    my_list = ['\"this is line1\"',
        '\"this is line2\"',
        '\"this is line3\"',
        '\"this is line4\"',
        '\"this is line5\"'
        ]

    return random.choice(my_list)

def start(bot, update):
    bot.send_message(chat_id=update.message.chat_id, text=func1())

my_handler = CommandHandler('start', start)

dispatcher.add_handler(my_handler)

updater.start_polling()

谢谢阿里安,它有效。我在周末通过删除 func1 函数和直接指向 my_list 的 start 函数找到了另一个解决方案:text=random.choice(my_list)。 我也有无法迭代的代码,从 API 中获取随机文本。我不得不将我的代码放在启动函数中。我也可以为 my_list.

做这个

这是我最终得到的代码:

import time
import urllib.request as urllib
import json
import html
import random

from telegram.ext import Updater
from telegram.ext import CommandHandler

updater = Updater(token='<token>')
dispatcher = updater.dispatcher 

my_list = ['\"this is line1\"',
'\"this is line2\"',
'\"this is line3\"',
'\"this is line4\"',
'\"this is line5\"'
]

def start(bot, update):
    bot.send_message(chat_id=update.message.chat_id, text=random.choice(my_list))

my_handler = CommandHandler('start', start)

dispatcher.add_handler(my_handler)

updater.start_polling()