【发布时间】:2021-06-10 00:47:05
【问题描述】:
我正在尝试做的事情:我正在用我的机器人制作反人类卡 (CAH) 游戏,以便与朋友一起玩。为此,我想尽可能在同一时间向作者给出的所有玩家发送消息,而不是一个一个地向他们发送消息并等待某人的输入,然后再获得下一个人的输入。下面是我制作的一个简单的可视化示例,以防令人困惑。
我的问题:我如何一次向多个人发送消息并接收他们各自的输入?
代码:
我尝试通过ctx.invoke 使用多个命令将其分开,因此机器人将按人运行命令。然而,机器人并没有按照我的预期去做并在逐个浏览列表时向他们发送消息,而是在每个人之间停下来等待他们的输入,然后再将消息发送给下一个人。
@client.command() # part 1: beginning the command sequence
@commands.check(check_blacklist)
async def test(ctx, members: commands.Greedy[discord.Member]=None):
if members != None:
members.append(ctx.author)
msg = ""
for member in members:
msg += f"\> {member.display_name}\n"
await ctx.send(f"These people will be test: \n{msg}")
else:
await ctx.send("Nobody")
return
await ctx.invoke(client.get_command('test2'), members=members)
@client.command() # part 2: sending messages to each person to see if their dms are open
async def test2(ctx, members):
for member in members:
try:
await member.send("wa")
await ctx.send(f"Successful wa to {member.display_name}")
await ctx.invoke(client.get_command('test3'), member=member)
except:
await ctx.send(f"{member.mention} has their dms closed or is a bot :pensive:")
@client.command() # part 3: receiving inputs from each person
async def test3(ctx, member:discord.Member):
def check(msg):
return msg.author==member and str(msg.channel.type) == "private"
await member.send("Please provide an input:")
try:
response = await client.wait_for('message', check=check, timeout=75)
except:
await ctx.send(f"{member.display_name} didn't respond :pensive:")
return
await ctx.send(f"{member.mention}: {response.content}")
【问题讨论】:
标签: python discord.py