不和谐机器人角色提及

时间:2018-08-27 15:38:35

标签: python tags discord

我正在为服务器制作一个简单的Discord机器人,因为一个机器人的一部分无法正常工作。但是,该机器人程序需要标记某个角色的人员(例如,该角色为“主持人”)。我希望它标记所有人的主持人角色,就像@Moderator一样。这是我的代码(我正在使用Python 3.6):

if message.content.startswith('!startbot'):
    msg = '@Moderator, (some message after this)'.format(message)

但是,“ @ Moderator”实际上并没有标记主持人角色中的任何人。就像其他所有消息一样,它只是空白文本。但是,当我作为来自Discord服务器类型@Moderator的真实用户时,它会带来红色(由我设置)并标记主持人。

有人可以帮我解决这个问题吗?

5 个答案:

答案 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客户端中一样提到该角色。

This method also works for webhooks.

答案 4 :(得分:0)

您必须首先获取角色对象。为此,请执行以下操作:

moderator = discord.utils.get(ctx.guild.roles, id=moderator_role_id_here)

只需发送一条消息

await ctx.send(f'Hello {moderator.mention}')

它将使用此角色标记所有用户。