Skip to content Skip to sidebar Skip to footer

Per Server Prefixs

I was wondering how I would go about allowing every server my bot is connected to, to set their own prefix. I am using the async version of dpy with Commands ext. I would assume y

Solution 1:

You can do this with dynamic command prefixes. Write a function or coroutine that takes a Bot and a Message and outputs the appropriate prefix for that message. Assuming you had a JSON of server ids to prefixes:

{ 
  "1234": "!",
  "5678": "?"
}

You can load that json into a dictionary and then look up server ids in that dictionary. Below I also include a default prefix, but you could also raise a CommandError or something for servers with no specific prefix.

from discord import commands
import json

with open("prefixes.json") as f:
    prefixes = json.load(f)
default_prefix = "!"

def prefix(bot, message):
    id = message.guild.id
    return prefixes.get(id, default_prefix)

bot = commands.Bot(command_prefix=prefix)

...

Solution 2:

Late answer, but for those others also looking for this you can use the get_prefix function.

It's very similar to Patrick Haugh's version, but a little different maybe because of different discord library versions?

prefixes = ['.','!','s.','k!']
ser_pref={'server id':['.',',']}
def get_prefix(bot, msg):
    if msg.guild.id in ser_pref:
        return commands.when_mentioned_or(*ser_pref['server id'])


    return commands.when_mentioned_or(*prefixes)(bot, msg)

bot = commands.Bot(command_prefix=get_prefix)

You can then later make commands to allow more custom server prefixes to other servers by adding their options to the dict


Post a Comment for "Per Server Prefixs"