📅  最后修改于: 2023-12-03 14:55:49.445000             🧑  作者: Mango
在 Discord 中,我们可以通过 Python Discord.py 库来编写自己的 Bot。其中一种常见的情况是,需要检查消息是否在 DM(Direct Message,即私信)中发送而非在服务器频道中。
@bot.command()
async def my_command(ctx):
"""
如果命令是从私信中发出,Bot 将回复“你在私信中”;
否则,Bot 将回复“你在服务器频道中”
"""
if isinstance(ctx.channel, discord.DMChannel):
# 如果消息是从私信中发出,ctx.channel 将是 discord.DMChannel 类型的
await ctx.send("你在私信中")
else:
await ctx.send("你在服务器频道中")
在 Discord.py 中,当 Bot 收到消息时,会调用一个函数(或称“命令”),这个函数需要一个 ctx
参数,代表这个消息的上下文(包括哪个服务器、哪个频道等等)。可以通过这个 ctx
参数的 channel
属性来获取这个消息的频道对象。如果这个消息是从私信中发送的,则 ctx.channel
将是 discord.DMChannel
类型的。因此,我们只需要检查 ctx.channel
的类型即可知道消息是否在私信中。
如果消息在私信中,我们就可以使用 ctx.send()
函数来回复用户。如果消息不在私信中,我们可以使用 ctx.send()
回复同一个服务器频道中。