我编写了一个代码来显示级别,该级别工作得非常好,只是当新成员加入时该代码不起作用,因为它只获取.json文件中已有内容的信息。我希望这样做,以便在新成员加入时也能看到他们的等级。
#THE LEVEL SYSTEM ITSELF
@client.event
async def on_member_join(member):
with open(r"C:\Users\Frank\Desktop\BOTZS\test.py", 'r') as f:
users = json.load(f)
await update_data(users, member)
with open('LvlUP.json', 'w') as f:
json.dump(users, f)
@client.event
async def on_message(message):
if message.author.bot == False:
with open('LvlUP.json', 'r') as f:
users = json.load(f)
await update_data(users, message.author)
await add_experience(users, message.author, 5)
await level_up(users, message.author, message)
with open('LvlUP.json', 'w') as f:
json.dump(users, f)
async def update_data(users, user):
if not f'{user.id}' in users:
users[f'{user.id}'] = {}
users[f'{user.id}']['experience'] = 0
users[f'{user.id}']['level'] = 1
async def add_experience(users, user, exp):
users[f'{user.id}']['experience'] += exp
async def level_up(users, user, message):
experience = users[f'{user.id}']['experience']
lvl_start = users[f'{user.id}']['level']
lvl_end = int(experience ** (1 / 4))
if lvl_start < lvl_end:
embed = discord.Embed(title="**LEVEL UP!**",description=f'{user.mention} has leveled up to level {lvl_end}! :fire: 'f'\n Soundwave Superior,{user.mention} Inferior ',color=discord.Color.dark_red())
embed.set_thumbnail(url=user.avatar_url)
users[f'{user.id}']['level'] = lvl_end
await message.channel.send(embed=embed)
#MY CODE
@client.event
async def on_message(message):
global m
with open(r"C:\Users\Frank\Desktop\BOTZS\LvlUP.json", 'r') as f:
m = json.load(f)
if message.content == "Level":
embed=discord.Embed(title="**Current Level**", description=(str(m[str(message.author.id)]["level"])),color=discord.Color.dark_red())
await message.channel.send(embed=embed)
非常感谢!
答案 0 :(得分:0)
我注意到您没有使用on_member_remove
事件。当用户离开您的不和谐服务器时,它将允许您删除用户。另外,我认为您的代码可能更轻巧,更易于理解。
这是为您的机器人制作一个非常简单的关卡系统的方法:
import discord
from discord.ext import commands
from json import dumps, loads
from random import randint
def get_data():
with open('members.json', 'r') as file:
return loads(file.read())
def set_data(members):
with open('members.json', 'w') as file:
file.write(dumps(members, indent=2))
@client.event
async def on_member_join(member):
members = self.get_data()
members.append({'name': member.name, 'id': member.id, 'level': 0,'xp': 0})
set_data(members)
@client.event
async def on_member_remove(self, member):
members = self.get_data()
members.remove({'name': member.name, 'id': member.id, 'level': member.level, 'xp': member.xp})
set_data(members)
@client.event
async def on_message(message):
members = self.get_data()
member = members[message.author.id]
member['xp'] += 5
if member['xp'] > member['xp']**(1 / 4):
member['level'] += 1
await message.channel.send(f"? {message.author.mention} leveled up! He's now level {member['level']}")
set_data(members)
@commands.command()
async def xp(self, ctx):
members = self.get_data()
for member in members:
if ctx.author.id == member['id']:
await ctx.send(f"?️ You're level {member['level']} ({member['xp']}/{self.base_xp * (member['level']+1 * self.factor)})")