我正在Linux Mint上使用Discord.py进行操作,我想使用后台任务,但似乎无法使它们正常工作。显然出于某种原因甚至都没有进入while循环(见下文)。
我尝试了许多非常基本的后台任务示例,但是没有任何效果,除了不和谐之外,py正常工作,并且我可以做很多事情,使其完美运行。 即使while循环中的print语句也没有显示出来,这很奇怪。
import discord
import asyncio
TOKEN = '<my-token>'
client = discord.Client()
async def my_background_task():
await client.wait_until_ready()
print("I am showing up!")
while not client.is_closed:
print("I am not showing up!")
servers = client.get_all_servers()
for server in servers:
for channel in server.channels:
await client.send_message(channel, "Some message")
await asyncio.sleep(1) # task runs every second
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
client.loop.create_task(my_background_task())
client.run(TOKEN)
因此,该机器人可以正常启动,如果我要使用on_message方法,它将可以正常工作(我没有添加它,因为它无关紧要)。但是后台任务由于某种原因从未完成。甚至没有显示一条错误消息。好像后台任务被忽略了。我在Google上进行了搜索,但似乎没有人遇到此问题。
编辑:已解决。尽管我发现所有在线示例均未使用任何括号,但client.is_closed
之后仍缺少一对括号。
答案 0 :(得分:0)
"@tasks.loop(seconds = 1)" 表示循环每 X 秒重复一次。
您可以使用“@tasks.loop()”来定义循环,使用“(seconds = 1)”来定义循环重复多少秒后。
要开始循环,你需要添加“my_background_task.start()”,这意味着后台任务是启动的。
您可以添加 my_background_task.start() 作为命令:
@bot.command()
async def mybgtask(ctx):
my_background_task.start()
await ctx.send("my_background_task loop has started")
代码如下:
import discord
import asyncio
from discord.ext import tasks
TOKEN = '<my-token>'
client = discord.Client()
@tasks.loop(seconds = 1) #The loop repeats every 1 seconds
async def my_background_task():
await client.wait_until_ready()
print("I am showing up!")
if not client.is_closed:
print("I am not showing up!")
servers = client.get_all_servers()
for server in servers:
for channel in server.channels:
await client.send_message(channel, "Some message")
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
my_background_task.start()
client.run(TOKEN)