【问题标题】:Discord bot can't mention everyone despite having its permissionDiscord bot 无法提及所有人,尽管获得了许可
【发布时间】:2019-08-22 15:42:55
【问题描述】:

这里是 sendMessage 函数:

async def sendMessage(color, title, value, should_delete=True, channel=""):
    embed = discord.Embed(color=color)
    embed.add_field(name=title, value=value, inline=False)
    if channel == "":
        msg = await client.send_message(message_obj.channel, embed=embed)
    else:
        msg = await client.send_message(client.get_channel(channel), embed=embed)
    if should_delete:
        await delete_msg(msg)

机器人可以在此处提及除所有人之外的任何人。尽管提到了所有人的许可。

sendMessage(OK_COLOR_HASH, "title", "Hello @everyone")

编辑:当我将消息类型转换为普通类型而不是嵌入类型时,它起作用了。

【问题讨论】:

  • 您看到错误了吗? everyone 角色是否设置为可在服务器配置中提及?我没有看到您在这段代码中实际添加提及的位置,您能否提供minimal reproducible example
  • 没有错误,因为它只是不能提及,只是通常在消息内容中。这是一个例子:sendMessage(OK_COLOR_HASH, "title", "Hello @everyone")
  • 尝试使用Role对象的mention属性:f"Hello {server.default_role.mention}"
  • 问题是消息要自定义,会检查格式属性。

标签: python python-3.x discord discord.py


【解决方案1】:

你可以试试这个块代码。 roles 返回一个列表所有公会的角色,但第一个角色总是一个默认的公会角色 (default_role),这就是你必须使用切片功能的原因。

@bot.command()
async def test(ctx):
    await ctx.send(ctx.message.guild.roles[0])

或者你可以这样做。

 @bot.command()
 async def test(ctx):
     await ctx.send(ctx.message.guild.default_role)

【讨论】:

    【解决方案2】:

    您可以尝试通过default_role 属性向所有人发送提及

    @bot.command(pass_context=True)
    async def evy(msg):
        await bot.say(msg.message.server.default_role)
    

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 2021-06-25
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2021-12-20
      • 2020-07-27
      相关资源
      最近更新 更多