我在执行命令后创建了一个提供人员角色的机器人。
现在,我想添加一个Command,将其赋予People的角色更改为您喜欢的任何角色。
当我执行如下命令后更改变量时:
@client.command()
async def changeStuff(ctx, now):
global test
test = now
await ctx.send("changed")
在检查后,它在我的其他测试服务器上也会更改:
@client.command()
async def checkStuff(ctx):
await ctx.send(test)
这当然是有意义的,因为它具有相同的脚本。但是有没有办法使它针对每个服务器?
答案 0 :(得分:1)
我发现自己:
这是将信息保存到Dict和Json文件中的代码(将其另存为storage.py,以使机器人无法正常工作)
import json
replist = {}
def Handle(Name, action, varname = None, data = None):
if action == "add":
o = checkInfo(Name, varname)
if o == "Error":
addentry(Name)
addInfo(Name, varname, data)
else:
addInfo(Name, varname, data)
elif action == "check":
o = checkInfo(Name, varname)
if o == "Error":
return "User doesnt exist in database"
else:
return o
def savetojson(dict):
with open('varStorage.json', 'w') as fp:
json.dump(dict, fp)
def loadfromjson():
try:
with open('varStorage.json') as json_file:
global replist
replist = json.load(json_file)
except json.decoder.JSONDecodeError:
addentry("Placeholder")
def addInfo(Name, varN, data):
loadfromjson()
if Name in replist:
replist[Name][varN] = data
savetojson(replist)
else:
return "Error"
def checkInfo(Name, varN):
loadfromjson()
try:
return replist[Name][varN]
except:
return "Error"
def addentry(Name):
replist[Name] = {}
savetojson(replist)
return "done"
您可以像这样在机器人(或其他任何地方)中调用它:
import discord, discord.utils
from discord.utils import get
from discord.ext import commands
import storage
client = commands.Bot(command_prefix= "+")
@client.event
async def on_ready():
print("Ready!")
@client.command()
async def changeStuff(ctx, name, data):
name = str(name)
data = str(data)
gid = ctx.guild.id
gid = str(gid)
storage.Handle(gid, "add", name, data)
await ctx.send("changed")
@client.command()
async def checkStuff(ctx, tocheck):
gid = ctx.guild.id
gid = str(gid)
outl = storage.Handle(gid, "check", tocheck)
await ctx.send(outl)
client.run("yourToken")
第一部分来自我前一阵子的机器人:https://github.com/Lulonaut/Discordrepbot/blob/master/Functions/storage.py(有点编辑)
希望这对某人有帮助,即使没有帮助,它:D