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()
我使用此代码从列表中获取随机行 "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()