async def on_reaction_add(reaction, user):
emoji = reaction.emoji
if emoji == "?":
await user.channel.send("HI")
我在使用 user
时遇到了问题。
我想在这里与 ctx 一起使用,例如 ctx.channel.send
。
但是这里也出现了如何使用ctx的错误?
答案 0 :(得分:1)
在这种情况下,最好使用 on_reaction_add
命令事件而不是使用 wait_for
事件。这意味着该事件只能触发一次,并且只能在调用命令时触发。但是,对于您当前的事件,这允许任何人对带有该表情符号的消息做出反应,机器人会做出响应。
通过使用 client.wait_for("reaction_add")
,您可以控制用户何时可以对表情符号做出反应。您还可以添加检查,这意味着只有用户才能使用对机器人发送的消息的反应。可以传递其他参数,但这取决于您想要如何设置它的样式。
在下面的示例中,用户可以调用命令,然后要求做出反应。机器人已经添加了这些反应,所以用户只需要做出反应。 wait_for
属性将等待用户对指定的表情符号做出反应,您的命令将发送一条消息。
@client.command()
async def react(ctx):
message = await ctx.send('React to this message!')
mail = '?'
post = '?'
await message.add_reaction(mail)
await message.add_reaction(post)
def check(reaction, user):
return user == ctx.author and str(
reaction.emoji) in [mail, post]
member = ctx.author
while True:
try:
reaction, user = await client.wait_for("reaction_add", timeout=10.0, check=check)
if str(reaction.emoji) == mail:
await ctx.send('Hi you just received')
if str(reaction.emoji) == post:
await ctx.send('Hi you just posted...')
答案 1 :(得分:0)
您需要使用 reaction.message.channel.send
async def on_reaction_add(reaction, user):
emoji = reaction.emoji
if str(emoji) == "?": await reaction.message.channel.send("HI")