python - 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}')
解决方案
在 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:以后,请更详细地解释您的问题/问题。
推荐阅读
- c++ - 如何获取顺序线程 ID
- python - com.univocity.parsers.common.TextParsingException:解析输入的长度(1000001)超过最大字符数
- python - Python:似乎无法解码文本文件
- javascript - 为什么 svg 图片的字体系列会发生变化?
- postgresql - Postgres Sharding:在主节点上创建分区的影响?
- elixir - Phoenix框架如何使用参数链接到控制器
- python - 无法从 Dockerfile 为烧瓶 python 应用程序构建?
- java - 在 JUnit 5 中将测试摘要打印到控制台
- parallel-processing - 如何在与 GNU-parallel 并行的循环中并行化 csh
- python - 是否有任何工具或算法可以将 3D 点云转换为 2.5D 图像?