python - 所有服务器的级别都相同,discord.py
问题描述
我有一个问题......我刚刚用python rewrite和json为discord制作了一个功能齐全的级别系统。然而,每个人的级别都保留在人和机器人所在的所有服务器上......我想让机器人在 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))
解决方案
推荐阅读
- go - go1.10 之前的天花板功能
- kubernetes - 如何区分同名的 Prometheus 指标和 Kubernetes 中动态发现的微服务
- php - 如何在执行操作的表中创建下拉菜单,即根据该行中的条目重定向到页面(HTML,PHP)
- django - Django 自定义模板标签
- javascript - 正确的错误处理 - 在 javascript/Ionic 中
- regex - 使用 RegEx 表达式删除 Windows 目录路径
- swift - 约束布局更改后不触发 UIButton 操作
- python - Python刷新sqlite3连接以检索最新值
- java - 我在java中使用大内存的最佳实践是什么?
- powershell - SCCM - 脚本仍在运行