Discord.py - Changing prefix with command

亡梦爱人 提交于 2020-12-09 06:02:30

问题


I want to make a command where an admin can change the prefix for commands (eg: instead of using "." they can change it to "-" and only "-" will work if they do) I'd be able to setup the permissions to make only admins able to use the command

I've looked around, through the docs & interwebs but haven't found anything and I haven't had any idea on how to do this


回答1:


You should use the command_prefix argument for discord.Bot this accepts either a string (meaning one bot wide prefix) or a callable (meaning a function that returns a prefix based on a condition).

Your condition relies on the invoking message. Therefore you can allow guilds to define their own prefixes. I'll use a dict as a simple example:

...

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

For a great example of this in use, refer to Rapptz (the creator of discord.py)'s very own RoboDanny bot, he made it a public repo for educational purposes as an example. In specific, see prefix_callable function, it's a more robust version of my determine_prefix example.



来源:https://stackoverflow.com/questions/56796991/discord-py-changing-prefix-with-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!