获取 MessageReference 对象的作者
Getting the author of MessageReference object
我的 Discord 机器人有一个命令需要检查 2 个 Discord 用户 ID:ctx.message.author.id
和“回复”消息的作者 ID。
获取第一个用户的 id
很容易,因为这只是使用命令的人的 id
:
def check_two_ids(ctx):
id1 = ctx.message.author.id
# come other code
获得第二个 id
要困难得多,因为该命令仅在用作回复时才有效。所以我尝试使用 MessageReference
对象并以某种方式从中获取第二个 id
。这是我尝试过的:
def check_two_ids(ctx):
id1 = ctx.message.author.id
message_reference = ctx.message.reference
id2 = message.reference.author.id
# do some more stuff with these two ids
运行 此代码 returns 一个错误:AttributeError: 'MessageReference' object has no attribute 'author'
。我认为这类似于具有这些参数的普通 Message
对象。
我可以通过这种方法获得第二个 ID 吗?
MessageReference
不直接具有作者属性的原因是因为它只是 isn't provided by Discord API. However under certain circumstances (when the reference is pointing to a reply), Discord API will provide the resolved message object for the reference which you can access with message.reference.resolved
.
def check_two_ids(ctx):
id1 = ctx.message.author.id
message_reference = ctx.message.reference
if not (message_reference and message_reference.resolved and
isinstance(message_reference.resolved, discord.Message)):
return
id2 = message_reference.resolved.author.id
resolved
属性有一些注意事项:
- 可能是
None
,Discord API 无法获取它。
- 算作
DeletedReferencedMessage
,引用已删除。
我的 Discord 机器人有一个命令需要检查 2 个 Discord 用户 ID:ctx.message.author.id
和“回复”消息的作者 ID。
获取第一个用户的 id
很容易,因为这只是使用命令的人的 id
:
def check_two_ids(ctx):
id1 = ctx.message.author.id
# come other code
获得第二个 id
要困难得多,因为该命令仅在用作回复时才有效。所以我尝试使用 MessageReference
对象并以某种方式从中获取第二个 id
。这是我尝试过的:
def check_two_ids(ctx):
id1 = ctx.message.author.id
message_reference = ctx.message.reference
id2 = message.reference.author.id
# do some more stuff with these two ids
运行 此代码 returns 一个错误:AttributeError: 'MessageReference' object has no attribute 'author'
。我认为这类似于具有这些参数的普通 Message
对象。
我可以通过这种方法获得第二个 ID 吗?
MessageReference
不直接具有作者属性的原因是因为它只是 isn't provided by Discord API. However under certain circumstances (when the reference is pointing to a reply), Discord API will provide the resolved message object for the reference which you can access with message.reference.resolved
.
def check_two_ids(ctx):
id1 = ctx.message.author.id
message_reference = ctx.message.reference
if not (message_reference and message_reference.resolved and
isinstance(message_reference.resolved, discord.Message)):
return
id2 = message_reference.resolved.author.id
resolved
属性有一些注意事项:
- 可能是
None
,Discord API 无法获取它。 - 算作
DeletedReferencedMessage
,引用已删除。