Discord机器人角色提及

24

我正在为我的服务器制作一个简单的Discord机器人,因为其中一个机器人的部分不起作用。但是那个机器人需要从一个角色中标记人员(假设该角色是“Moderator”)。 我希望它可以标记来自Moderator角色的所有人,就像@Moderator一样。这是我的代码(我使用Python 3.6):

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

"@Moderator" 并不实际标记 Moderator 角色中的任何人。它只是像其他消息一样的空白文本。但是,当我作为 Discord 服务器中真实的某个人键入 @Moderator 时,它会变成我设置的红色并标记 Moderator。

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

5个回答

42
在嵌入中提及需要使用特定的格式。最简单的方法是查阅以下表格:
类型 结构 示例 输出
用户 <@USER_ID> <@80351110224678912> user_mention
用户(昵称) <@!USER_ID> <@!80351110224678912> user_mention
频道 <#CHANNEL_ID> <#103735883630395392> text_channel_mention

voice_channel_mention
角色 <@&ROLE_ID> <@&165511591545143296> role_mention
自定义表情 <:NAME:ID> <:mmLol:216154654256398347> custom_emoji
自定义表情(动画) <:a:NAME:ID> <a:nyancat:392938283556143104> custom_emoji_animated
Unix时间戳 <t:TIMESTAMP> <t:1618953630> timestamp
Unix时间戳(样式) <t:TIMESTAMP:STYLE> <t:1618953630:d> timestamp_styled

——表格摘自Discord API文档


27

在Discord中,角色提及的方法如下:

<@&ROLE_ID>

当你想提到某个角色时,ROLE_ID是该角色的ID。获取Moderators角色的ID,将其添加到字符串中,机器人便会像从Discord客户端一样提到该角色。

这种方法也适用于webhook。


6
假设您正在使用当前稳定版本的discord.py
根据文档,角色对象有一个名为mention的方法。因此,您所需要做的就是:
msg = '{} ...'.format(role.mention) 

为了获取角色对象,您可能需要遍历服务器上可用的角色并找到您要查找的角色对象。


2
你需要先获取角色对象。只需执行以下操作即可:

首先获取角色对象:

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

最初的回答
只需发送一条消息。
await ctx.send(f'Hello {moderator.mention}')

这将会给所有拥有该角色的用户打上标签。


1
如果您发送一条消息“@SomeRole”,Discord会将其作为纯文本发送,就像如果您"@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?")

关于@pkqxdd的回答,如果你自己发送"\@SomeRole"(即不是机器人发送),你将获得角色id。然后你可以通过id而不是名称来执行与上面代码类似的操作。


我认为你用的是JavaScript,而我用的是Python。即使像这样放置它也不起作用,但我尝试了类似于这样的东西:hereRole = msg.channel.server.roles.get('Moderator', 'here'); await client.send_message(message.channel, "Any?" + hereRole.mention()) - SomeName
谢谢您的提前致谢!:D - SomeName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接