我的机器人在多台服务器上,如果它在某个服务器上,我想让它只听一个命令。这是我的代码:
@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。如果是,则该命令将被执行。
然而,这似乎不起作用。它不执行命令,我没有收到任何错误。我是编程新手,因此不胜感激。
答案 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 或其他服务器运行此命令,则会引发错误,您可以捕获该错误以通知用户不要使用此命令或只是默默地忽略它。