首页 > 解决方案 > Discord.py client.say 在事件循环任务中不起作用

问题描述

我正在将 discord.py 用于机器人,并且试图让设置功能在后台运行,同时其他功能也运行。它似乎正在工作,但程序在 client.say 处停止(打印 a 但不打印 b)。我也没有收到任何错误。

async def setup():
    embed = discord.Embed(title='Setting game up...',colour=0xff66ff)
    print('a')
    setupmsg = await client.say(embed=embed)
    print('b')
    #send message for each person
    for i in USER_LIST:
        embed = discord.Embed(title=f"{i.name}",colour=0xff66ff)
        msg = await client.say(embed=embed)
        await client.add_reaction(message=msg,emoji='\u2705')
        await client.add_reaction(message=msg,emoji='\u274E')
        await client.add_reaction(message=msg,emoji='\u2754')
        await client.add_reaction(message=msg,emoji='\U0001F31F')
    await client.delete_message(setupmsg)

标签: pythonpython-3.xdiscord.py

解决方案


根据文档,您不能await client.say()在 a 之外@client.command()

您可以尝试将消息参数从事件传递给 coro 并send_message()改用

就像是

@client.event
async def on_message(message):
  if message.author != client.user:
    await setup(message)

async def setup(message):
  USER_LIST = message.server.members
  embed = discord.Embed(title='Setting game up...',colour=0xff66ff)
  print('a')
  setupmsg = await client.send_message(message.channel,embed=embed)
  print('b')
  #send message for each person
  for i in USER_LIST:
    embed = discord.Embed(title=f"{i.name}",colour=0xff66ff)
    msg = await client.send_message(message.channel,embed=embed)
    await client.add_reaction(message=msg,emoji='\u2705')
    await client.add_reaction(message=msg,emoji='\u274E')
    await client.add_reaction(message=msg,emoji='\u2754')
    await client.add_reaction(message=msg,emoji='\U0001F31F')
  await client.delete_message(setupmsg)

推荐阅读