代码(如下所示)应该在discord上为用户添加exp点。问题是,它将exp添加了1次,但再也不会添加。该用户的exp值保持在10
import discord
import json
import os
from discord.ext import commands
token = ""
client = commands.Bot(command_prefix="-")
os.chdir(r'C:\Users\aryaa\Desktop\testing')
@client.event
async def on_ready():
print('Bot Is Ready')
print('------')
@client.event
async def on_member_join(member):
with open('users.json', 'r') as f:
users = json.load(f)
await update_data(users, member)
with open('users.json', 'w') as f:
json.dump(users, f)
@client.event
async def on_message(message):
with open('users.json', 'r') as f:
users = json.load(f)
await update_data(users, message.author)
await add_experience(users, message.author, 10)
await level_up(users, message.author, message.channel)
with open('users.json', 'w') as f:
json.dump(users, f)
async def update_data(users, user):
if not user.id in users:
users[user.id] = {}
users[user.id]['experience'] = 0
users[user.id]['level'] = 1
async def add_experience(users, user, exp):
users[user.id]['experience'] += exp
async def level_up(users, user, channel):
experience = users[user.id]['experience']
lvl_start = users[user.id]['level']
lvl_end = int(experience ** (1/4))
if lvl_start < lvl_end:
await client.send(channel, '{} has leveled up to level {}'.format(user.mention, lvl_end))
users[user.id]['level'] = lvl_end
client.run(token)
下面是保存用户信息的.json文件。如你所见,它显示了10个表达式。我已经发送了大约15条消息,但这个值从未改变,所以我不知道这不更新的原因是什么
{"431524570131070988": {"experience": 10, "level": 1}}
我发现了你的问题。所以基本上你的
users
字典有整数作为键。问题是JSON不支持整数键,因此当您使用json.dump
时,所有整数键都会转换为字符串。现在很明显,整数键与字符串键不同,因此您总是覆盖用户的数据,就好像他们是新用户一样这可以通过创建一个新函数来解决,该函数在
json.load
之后再次生成整数的所有键:另外,如果可以的话,我建议使用discord.py重写。它使很多事情变得简单
编辑:还将其添加到成员加入脚本:
相关问题 更多 >
编程相关推荐