所有服务器的级别都相同,discord.py

问题描述

我有一个问题...我刚刚使用 python rewrite 和 json 制作了一个功能齐全的级别系统,用于不和谐。但是,每个人的级别仍然保留在该人和机器人所在的所有服务器上......我想让机器人为每个服务器的同一个人或类似的东西在json中创建一个新的级别字典来完成这项工作。 .. 这是我的代码

import discord
from discord.ext import commands
import json
import asyncio
messages = 0
class Levels(commands.Cog):
    def __init__(self,bot):
        self.bot = bot

        self.bot.loop.create_task(self.save_users())


        with open(r"Path-To-Json-File",'r') as f:
            self.users = json.load(f)
    

    @commands.Cog.listener()
    async def on_ready(self):
        print(f"{self.__class__.__name__} Cog has been loaded\n-----")


    async def save_users(self):
        await self.bot.wait_until_ready()
        
        while not self.bot.is_closed():
           
            with open(r"Path-To_Json_File",'w') as f:
                json.dump(self.users,f,indent=4)
                

                
            await asyncio.sleep(5)


    def lvl_up(self,author_id):
        cur_xp = self.users[author_id]['exp']
        cur_lvl = self.users[author_id]['level']

        # if self.users[author_id]['level'] <=2:
        if cur_xp >= round((1000 * cur_lvl) / 8):
            self.users[author_id]['level'] += 1
            return True
        else:
            return False

        


    @commands.Cog.listener()
    async def on_message(self,message):
        global messages
        if message.author.bot:
            return

        author_id = str(message.author.id)
        

        print(message.guild.name)
        print(message.guild.id)
        if not author_id in self.users:
            self.users[author_id] = {}
            self.users[author_id]['level'] = 1
            self.users[author_id]['exp'] = 0
            self.users[author_id]['messages'] = 0
            print("New user list created")

        self.users[author_id]['exp'] += 5
        self.users[author_id]['messages'] += 1

        if self.lvl_up(author_id):
            await message.channel.send(f"{message.author.mention} Good job... U leveled up... U are Now level {self.users[author_id]['level']}")
        

    @commands.command()
    async def rank(self,ctx,member: discord.Member = None):
        member = ctx.author if not member else member
        member_id = str(member.id)

        if not member_id in self.users:
            await ctx.send("Member doesn't have a level...")
        else:
            embed = discord.Embed(color = member.color,timestamp=ctx.message.created_at)
            embed.set_author(name=f"Level - {member}",icon_url=self.bot.user.avatar_url)
            embed.add_field(name="Level",value=self.users[member_id]['level'])
            embed.add_field(name="XP",value=self.users[member_id]['exp'])
            embed.add_field(name='Messages',value=self.users[member_id]['messages'])

            await ctx.send(embed=embed)
           



def setup(bot):
    bot.add_cog(Levels(bot))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)