服务器专用的Discord.py变量

时间:2020-09-05 06:27:56

标签: python discord discord.py global

我在执行命令后创建了一个提供人员角色的机器人。

现在,我想添加一个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)

这当然是有意义的,因为它具有相同的脚本。但是有没有办法使它针对每个服务器?

1 个答案:

答案 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