用 Python 编写 Discord 机器人 - 如何让机器人将命令限制在某个服务器上?

时间:2021-02-04 19:43:50

标签: python discord.py

我的机器人在多台服务器上,如果它在某个服务器上,我想让它只听一个命令。这是我的代码:

@client.command()
async def test(ctx):
  server = ctx.message.guild
  our_server = ('806969018689781870')
  if server.id == our_server:
    await ctx.send("Test confirmed!")

这里我得到了触发命令的服务器的 ID。然后我看看它是否等于我想要限制它的服务器的 ID。如果是,则该命令将被执行。

然而,这似乎不起作用。它不执行命令,我没有收到任何错误。我是编程新手,因此不胜感激。

2 个答案:

答案 0 :(得分:2)

ID 是整数,你在比较一个字符串

our_server = 806969018689781870
if server.id == our_server:
    await ctx.send("Test confirmed")

此外,如果您不想在每个命令之前都放置它,则可以进行全局检查

@client.check
async def check_guild(ctx):
    return ctx.guild.id == 806969018689781870

答案 1 :(得分:1)

一个简单的方法是制作一个自定义的检查装饰器:

def only_this_guild(guild_id: int):
    async def predicate(ctx):
        if ctx.guild is None:
            raise commands.NoPrivateMessage() 
        return ctx.guild.id == guild_id           

    return commands.check(predicate)

然后你可以在你的命令中使用这个装饰器

@client.command()
@only_this_guild(806969018689781870)
async def test(ctx):
    await ctx.send("Test confirmed!")

如果您随后尝试从 DM 或其他服务器运行此命令,则会引发错误,您可以捕获该错误以通知用户不要使用此命令或只是默默地忽略它。