Per server prefixs

折月煮酒 提交于 2019-12-09 00:53:35

问题


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 you would store the prefix's and server name in a .json file, but I don't know how you would write them or check the file for them.

Thanks


回答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.server.id
    return prefixes.get(id, default_prefix)

bot = commands.Bot(command_prefix=prefix)

...



回答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.server.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



来源:https://stackoverflow.com/questions/51915962/per-server-prefixs

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