【问题标题】:Discord Bot Role Mentioning不和谐机器人角色提及
【发布时间】:2019-02-02 04:35:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    Discord 中的角色提及是这样触发的:

    <@&ROLE_ID>
    

    其中 ROLE_ID 是您尝试提及的角色的 ID。获取版主角色的 ID,将其添加到相应的字符串中,机器人将像从 Discord 客户端一样提及该角色。

    This method also works for webhooks.

    【讨论】:

      【解决方案2】:

      在嵌入中提及需要特殊格式。最简单的方法是参考下表:

      Type Structure Example
      User <@USER_ID> <@80351110224678912>
      User (Nickname) <@!USER_ID> <@!80351110224678912>
      Channel <#CHANNEL_ID> <#103735883630395392>
      Role <@&ROLE_ID> <@&165511591545143296>
      Custom Emoji <:NAME:ID> <:mmLol:216154654256398347>
      Custom Emoji (Animated) <:a:NAME:ID> <a:b1nzy:392938283556143104>

      取自Discord docs

      【讨论】:

        【解决方案3】:

        假设您使用的是discord.py的当前稳定版本

        根据documentation,角色对象有一个名为mention 的方法。所以你需要做的就是

        msg = '{} ...'.format(role.mention) 
        

        要获取角色对象,您可能需要遍历服务器的可用角色并找到您正在寻找的角色对象

        【讨论】:

          【解决方案4】:

          你必须先获取角色对象。为此,只需这样做:

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

          只发一条消息

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

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

          【讨论】:

            【解决方案5】:

            如果您发送消息“@SomeRole”,discord 会将其作为纯文本发送,同样,如果您“@提及”一个人,它会执行相同的操作。如果您发送“: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())
            • 提前谢谢您! :D
            猜你喜欢
            • 2020-11-08
            • 2020-12-15
            • 1970-01-01
            • 1970-01-01
            • 2021-01-06
            • 2021-01-22
            • 2020-11-18
            • 1970-01-01
            • 2018-11-06
            相关资源
            最近更新 更多