web-dev-qa-db-fra.com

Discord.py - changer de préfixe avec commande

Je veux faire une commande où un administrateur peut changer le préfixe des commandes (par exemple: au lieu d'utiliser "." "Ils peuvent le changer à" - "et seulement" - "fonctionnera si elles le font) les autorisations pour ne faire que des admins pouvant utiliser la commande

J'ai regardé autour de moi, à travers les docs et les interwebs, mais je n'ai rien trouvé et je n'ai eu aucune idée sur la façon de faire ça

4
Jakaboi

Vous devriez utiliser le command_prefix argument pour discord.Bot Ceci accepte soit une chaîne (signification d'un préfixe large de bot) ou d'un fichier appelable fonction qui renvoie un préfixe basé sur une condition) .

Votre état repose sur l'invoquant message. Par conséquent, vous pouvez permettre aux guildes de définir leurs propres préfixes. Je vais utiliser un dict comme exemple simple:

...

custom_prefixes = {}
#You'd need to have some sort of persistance here,
#possibly using the json module to save and load
#or a database
default_prefixes = ['.']

async def determine_prefix(bot, message):
    guild = message.guild
    #Only allow custom prefixs in guild
    if guild:
        return custom_prefixes.get(guild.id, default_prefixes)
    else:
        return default_prefixes

bot = commands.Bot(command_prefix = determine_prefix, ...)
bot.run()

@commands.command()
@commands.guild_only()
async def setprefix(self, ctx, *, prefixes=""):
    #You'd obviously need to do some error checking here
    #All I'm doing here is if prefixes is not passed then
    #set it to default 
    custom_prefixes[ctx.guild.id] = prefixes.split() or default_prefixes
    await ctx.send("Prefixes set!")

Pour un excellent exemple d'utilisation, reportez-vous à - RAPPTZ (le créateur de Discord.py) 's propre - robodanny Bot, il a fait un repo public à des fins éducatives comme exemple. En spécifique, voir prefix_callable fonction, c'est une version plus robuste de mon determine_prefix Exemple.

10
Jab