我正在为服务器制作一个简单的Discord机器人,因为一个机器人的一部分无法正常工作。但是,该机器人程序需要标记某个角色的人员(例如,该角色为“主持人”)。我希望它标记所有人的主持人角色,就像@Moderator一样。这是我的代码(我正在使用Python 3.6):
if message.content.startswith('!startbot'):
msg = '@Moderator, (some message after this)'.format(message)
但是,“ @ Moderator”实际上并没有标记主持人角色中的任何人。就像其他所有消息一样,它只是空白文本。但是,当我作为来自Discord服务器类型@Moderator的真实用户时,它会带来红色(由我设置)并标记主持人。
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
在嵌入中提及需要特殊格式。最简单的方法是使用以下格式:
类型 | 结构 | 示例 | |
---|---|---|---|
用户 | <@USER_ID> | <@80351110224678912> | |
用户(昵称) | <@!USER_ID> | <@!80351110224678912> | |
频道 | <#CHANNEL_ID> | <#103735883630395392> | |
角色 | <@&ROLE_ID> | <@&165511591545143296> | |
自定义表情符号 | <:NAME:ID> | <:mmLol:216154654256398347> | |
自定义表情符号(动画) | <:a:NAME:ID> |
取自Discord docs。
答案 1 :(得分:2)
假设您正在使用discord.py
的当前稳定版本
对于每个documentation,角色对象都有一个名为mention
的方法。因此,您所需要做的就是
msg = '{} ...'.format(role.mention)
要获取角色对象,您可能需要遍历服务器的可用角色并找到您要查找的角色对象
答案 2 :(得分:1)
如果您发送消息“ @SomeRole”,不和谐会将其以纯文本形式发送,则与您“ @mention”一个人的方式相同,它也会执行相同的操作。如果您发送的是“:thinking:”,也只会发送文本。
此代码将根据其ID提及特定用户:
user = message.guild.members.find("id", "201909896357216256");
await message.guild.send(`${user} is the best!`);
如果您知道角色的名称,并且可以对其进行硬编码就可以了
modRole = msg.channel.server.roles.mention('name', 'Moderator')
bot.sendMessage(msg, modRole.mention() + " is anyone here?")
如果您自己发送“ \ @SomeRole”(即不是机器人)来扩展@pkqxdd,则将获得角色ID。然后,您可以通过id而不是名称来执行与上面的代码类似的操作。
答案 3 :(得分:0)
Discord中的角色提及是这样触发的:
<@&ROLE_ID>
其中ROLE_ID是您要提及的角色的ID。获取主持人角色的ID,然后将其添加到字符串中,机器人将像在Discord客户端中一样提到该角色。
答案 4 :(得分:0)
您必须首先获取角色对象。为此,请执行以下操作:
moderator = discord.utils.get(ctx.guild.roles, id=moderator_role_id_here)
只需发送一条消息
await ctx.send(f'Hello {moderator.mention}')
它将使用此角色标记所有用户。