#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!")