如何在discord.py中循环任务 [英] How to loop a task in discord.py
本文介绍了如何在discord.py中循环任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在试验制作自己的"不和谐"小机器人,可以从Twitch获取信息,但我在如何使该机器人循环并检查条件方面遇到了困难。
我希望机器人每隔几秒钟循环一段代码,以检查指定的Twitch频道是否处于活动状态。
代码
import discord
from discord.ext import commands, tasks
from twitch import TwitchClient
from pprint import pformat
client = TwitchClient(client_id='<twitch token>')
bot = commands.Bot(command_prefix='$')
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot))
@bot.command()
async def info(ctx, username):
response = await ctx.send("Querying twitch database...")
try:
users = client.users.translate_usernames_to_ids(username)
for user in users:
print(user.id)
userid = user.id
twitchinfo = client.users.get_by_id(userid)
status = client.streams.get_stream_by_user(userid)
if status == None:
print("Not live")
livestat = twitchinfo.display_name + "is not live"
else:
livestat = twitchinfo.display_name + " is " + status.stream_type
responsemsg = pformat(twitchinfo) + "
" + livestat
await response.edit(content=responsemsg)
except:
await response.edit(content="Invalid username")
bot.run("<discord token>")
我希望机器人每10秒运行一次以下代码,例如:
status = client.streams.get_stream_by_user(<channel id>)
if status == None:
print("Not live")
livestat = twitchinfo.display_name + "is not live"
else:
livestat = twitchinfo.display_name + " is " + status.stream_type
我已尝试使用@tasks.loop(seconds=10)
尝试每10秒重复一次自定义async def
,但似乎不起作用。
有什么想法吗?
推荐答案
可以这样做:
async def my_task(ctx, username):
while True:
# do something
await asyncio.sleep(10)
@client.command()
async def info(ctx, username):
client.loop.create_task(my_task(ctx, username))
引用:
这篇关于如何在discord.py中循环任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文