有不同的方法可以做到这一点。
第一个是一个简单的time.sleep()
in a while
loop:
import time
def start(update, context):
chat_id = update.effective_chat.id
while True:
message = ""
crypto_data = get_prices()
for i in crypto_data:
coin = crypto_data[i]["coin"]
price = crypto_data[i]["price"]
change_day = crypto_data[i]["change_day"]
change_hour = crypto_data[i]["change_hour"]
message += f" {coin}={price:,.5f}$ \nHour Change:{change_hour:.3f}%\nDay Change: {change_day:.3f}%\n\n"
context.bot.send_message(chat_id=chat_id, text=message)
time.sleep(300)
另一种方法可能是使用后台进程调度程序,但您可能会重构您的start
函数并仅调度创建/发送消息的部分。 (while循环内的部分)
高级 Python 调度程序 https://apscheduler.readthedocs.io/en/3.x/ (pip install apscheduler
)是一个很棒的库,但它是第三方库,所以可能不适合您。然而我已经在很多项目中使用过它。
EDIT:
这是一个调度示例apscheduler
:
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
def message_loop(chat_id, bot):
message = ""
crypto_data = get_prices()
for i in crypto_data:
coin = crypto_data[i]["coin"]
price = crypto_data[i]["price"]
change_day = crypto_data[i]["change_day"]
change_hour = crypto_data[i]["change_hour"]
message += f" {coin}={price:,.5f}$ \nHour Change: {change_hour:.3f}%\nDay Change: {change_day:.3f}%\n\n"
bot.send_message(chat_id=chat_id, text=message)
def start(update, context):
chat_id = update.effective_chat.id
bot = context.bot
scheduler.add_job(message_loop, 'interval', minutes=5, args=(chat_id, bot))
scheduler.start()
# You might want to also add a stop function to your bot:
def stop():
scheduler.shutdown()
dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("stop", stop))
updater.start_polling()