python—如何检查json中是否存在成员id?

bwleehnv  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(304)

我正在建立一个机器人,应该存储每个 member 以及相应的 guild 在json中。这在代码中工作没有问题,但我只是不能得到一件事是正确的。
首先,代码如下:

async def on_member_join(self, member):
        with open("src/member.json", "r", encoding='utf-8') as f:
            mlist = json.load(f)

        guild = str(member.id)

        #try:
            #mlist[str(member.guild.id)] = guild
        #except KeyError:
            #print("KEY ERROR")
            #mlist[str(member.guild.id)] = guild

        if guild in mlist:
            return print("IN LIST")
        else:
            mlist[str(member.guild.id)] = guild
            print("NOT IN LIST")

        with open('src/member.json', 'w', encoding='utf-8') as f:
            json.dump(mlist, f, indent=2)

当我使用我的帐户进入服务器时,会创建条目,但当我重新进入服务器时,会创建条目 print("NOT IN LIST") 还是上来了。
这就是我的json的样子:

{
  "731855252277690XXX": "704712637988077XXX" # GuildID : UserID
}

这里有人看到我的错误吗?
我已经尝试了以下方法:
反向搜索:
if guild not in raidlist tryexcept 声明包括
远离的 str 转化 member.idguild.id 去别的地方

wrrgggsh

wrrgggsh1#

您现在正在做的是将每个公会和用户存储为单个键值对。换句话说,每个公会只能储存一名成员。我们可以做的是使用列表:

async def on_member_join(self, member):
    with open("src/member.json", "r", encoding='utf-8') as f:
        mlist = json.load(f)

    # changed to member id so it's less confusing
    memberid = str(member.id)
    guildid = str(member.guild.id)

    if guildid in mlist:
        if memberid in mlist[guildid]: # the member has already been recorded
            return
        mlist[guildid].append(memberid) # add the member to that guild's list
    else:
        mlist[guildid] = [memberid] # making a list with 1 element

    with open('src/member.json', 'w', encoding='utf-8') as f:
        json.dump(mlist, f, indent=2)

您应该在运行此代码之前清除json,因为它与以前的格式不兼容。
这样,json将如下所示:

{
   'GUILDID': ['MEMBERID1', 'MEMBERID2]
}

相关问题