Как сделать проверку, которая разрешает только команду на сервере, которую я указываю

#python #discord.py

Вопрос:

Я хочу создать команду, которую я хочу запускать только на серверах, которые я хочу выбрать, так можно ли сделать пользовательскую проверку, которая делает это?

Ответ №1:

У вас есть варианты:

 allowedGuilds = [some, ids, here]

# 1. Check guild id with an if statement:
@bot.command()
async def test(ctx):
    if not ctx.guild.id in allowedGuilds:
        return
    # your code

# 2. Create your own decorator:
def allowed_guild():
    def predicate(ctx):
        return ctx.guild.id in allowedGuilds

    return commands.check(predicate)


@bot.command()
@allowed_guild()
async def test(ctx):
    # your code
 

Ответ №2:

Вы можете использовать checks , что довольно просто, когда значение возврата равно True, команда будет обработана

Это позволит вам использовать одну и ту же проверку для разных команд

  • Вернитесь True , чтобы просигнализировать, что человек может выполнить команду.
  • Вернитесь False , чтобы сообщить, что пользователь не может выполнить команду.
  • Вызовите CommandError производное исключение, чтобы сообщить, что пользователь не может выполнить команду. Это позволяет создавать пользовательские сообщения об ошибках для обработки в обработчиках ошибок.
 async def is_channel(ctx):
    return ctx.channel.id in [123,456]

@bot.command()
@commands.check(is_channel)
async def something(ctx):
    await ctx.send('Hey.')
 

Ответ №3:

Простое утверждение «если бы» сработало.

 @bot.command()
async def yourcommand(ctx):
    guilds = [Yourguilidhere, Yourguilidhere, Yourguilidhere]
    if ctx.guild.id in guilds:
        #do the command here
    else:
        await ctx.send("You can't use this command here!")