Discord react_add 在私信频道中不起作用
Posted
技术标签:
【中文标题】Discord react_add 在私信频道中不起作用【英文标题】:Discord reaction_add doesn't work in Direct Message channel 【发布时间】:2021-05-01 19:13:53 【问题描述】:我已经解决这个问题好几天了,这是最后一根稻草。
Reaction_add
仅在我在服务器“常规”频道中执行 !on_message
时才有效,如果我直接向机器人发送消息,它不会做任何事情。不过,有趣的是,如果我先直接向机器人发送消息,然后在服务器通用频道中输入 !on_message
,机器人会在通用频道和直接消息中做出反应。
在TimeoutError
之后,我在直接消息中不受欢迎。
这是代码,直接来自 discord.py 文档,我使用 Bot
作为 Client
:
@bot.command(pass_context=True)
async def on_message(ctx):
channel = ctx.channel
await ctx.send('Send me that ???? reaction, mate')
def check(reaction, user):
return user == ctx.author and str(reaction.emoji) == '????'
try:
reaction, user = await bot.wait_for('reaction_add', timeout=60.0, check=check)
except asyncio.TimeoutError:
await channel.send('????')
else:
await channel.send('????')
有趣的是wait_for(message, ...)
消息在任何地方都能正常工作。
尝试添加此内容,但仍然没有成功。
intents = discord.Intents.default()
intents.dm_reactions = True
bot = commands.Bot(command_prefix=PREFIX, description=DESCRIPTION, intents=intents)
【问题讨论】:
您启用了哪些意图?你启用intents.dm_reactions
了吗?
我没有启用任何。刚开始玩这个库。我需要在全球范围内声明它们吗?
不,你的做法很好
【参考方案1】:
这是因为on_message
是一个机器人事件,这意味着它不需要作为命令调用,您可以使用()
调用该命令,但在您的情况下,您尝试将该命令用作事件。
这是一个事件
@bot.event
async def on_message(message):
channel = message.channel
await message.channel.send('Send me that ? reaction, mate')
def check(reaction, user):
return user == message.author and str(reaction.emoji) == '?'
try:
reaction, user = await bot.wait_for('reaction_add', timeout=60.0, check=check)
except asyncio.TimeoutError:
await message.channel.send('?')
else:
await message.channel.send('?')
这是一个命令,一个命令需要一个函数调用,在这种情况下,它是你的前缀+拇指!thumbs
希望这两个帮助。
@bot.command()
async def thumbs(ctx):
channel = ctx.channel
await ctx.send('Send me that ? reaction, mate')
def check(reaction, user):
return user == ctx.author and str(reaction.emoji) == '?'
try:
reaction, user = await bot.wait_for('reaction_add', timeout=60.0, check=check)
except asyncio.TimeoutError:
await ctx.send('?')
else:
await ctx.send('?')
【讨论】:
不,如果我重命名函数,也会发生同样的事情。 除了意图问题,@Cohen 关于@bot.event
与@bot.command
是正确的。您不想将on_message
装饰为命令,因为这样您将无法处理消息事件。【参考方案2】:
我添加了intents = discord.Intents.all()
,这似乎可以解决问题,尽管它效率不高,因为我可能不需要所有特权意图。
对问题的输入会有所帮助。
【讨论】:
仔细查看this section of the docs。默认情况下,所有意图都启用除了特权意图。这里相关的是Intents.members
。 许多与会员相关的功能需要此意图才能正常工作,并且是最近引起许多混乱和问题的原因。以上是关于Discord react_add 在私信频道中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Discord bot无法在13.1.0中加入语音频道[重复]