首页 > 解决方案 > on_message 问题时未向用户发送消息

问题描述

您好我在将消息从频道发送到用户直接消息时遇到问题。使用 @user 时的消息后跟消息应该 DM 用户我不确定为什么这不起作用。

消息中的提及应采用用户对象。

这是代码:

@commands.Cog.listener()
async def on_message(self, message):
    """Send a message thread reply to user."""
    for member in message.mentions: #get user object from mention in message?
        if not member.dm_channel: 
            await member.create_dm()
        try:
            time = datetime.utcnow()
            embed = discord.Embed(title=f"Reply", timestamp=time, colour=discord.Colour(0xff8100))
            embed.add_field(name="Message:", value="test message")
            await member.dm_channel.send(embed=embed)
        except discord.Forbidden:
            await message.channel.send(f"Reply cannot be sent because {member.name}'s direct messages are set to private.")
        except discord.HTTPException:
            await message.channel.send('I failed in sending the message.')
        except Exception as e:
            await message.channel.send(f'There\'s been a problem while sending the message that\'s not of type "Forbidden" or'
                       f' "HTTPException", but {e}.')
        else:
            await message.channel.send(f'Reply sent to {member.name}')

标签: pythonpython-3.xdiscord.pydiscord.py-rewrite

解决方案


在 discord.py 中,您不再需要创建 dm 频道。只需执行一个await ctx.author.send(# whatever message you want) 如果您尝试创建一个向消息作者发送特定 DM 的命令,可以尝试这个

@client.command()
async def dm(ctx, *, message):
    await ctx.author.send(f"This is your dm {message}")

这非常简单。如果您有任何问题或我误解了您的问题,请在评论中告诉我。

编辑:如果您想向特定成员发送 dm ,您可以试试这个。

@client.command()
async def dm(ctx, member: discord.Member, *, message):
    await member.send(message)

希望您的问题已经解决。

PS:以后,请更详细地解释您的问题/问题。


推荐阅读