因此,我在Google上进行了一些其他搜索,并观看了https://www.youtube.com/watch?v=pKkrCHnun0M这段有关为我的机器人制作关卡系统的视频。基本上,机器人(IN PYTHON)就像一个冒险坦克游戏;游戏会给您提供一辆坦克的起点,让您选择地图,移动到地图的不同区域,然后使用rng来确定是否有敌方坦克。每个被摧毁的敌方坦克会给您10 xp点。现在,在上述视频中,他添加了xp,他使用了消息,并在玩家进入服务器后开始了玩家的统计资料。
现在,我希望我的用户在输入命令'&stats'后开始其个人资料。在视频中,他使用json。我以前从未使用过json,所以自然很困惑,但是我遵循了视频的指导。
我收到此错误:
Ignoring exception in on_message
Traceback (most recent call last): File "/home/runner/.local/share/virtualenvs/python3/lib/python3.
7/site-packages/discord/client.py", line 270, in _run_event
await coro(*args, **kwargs)
File "main.py", line 72, in on_message
await level_up(users, author, message.channel) File "main.py", line 435, in level_up
lvl_end = float('experience ** 1/2')
ValueError: could not convert string to float: 'experience ** 1/2'
在测试服务器上输入任何消息后。但是,我担心这并不重要。 我要在repl.it中构建这个机器人,在这一点上我应该提到, 因此,我想弄清楚如何根据命令启动json文件,并且我还想通过销毁敌人将xp添加到玩家的个人资料中(以及杀死人数,但这没什么大不了)。我也需要水平。目前,我所有这些代码都是
@client.event
async def on_message(message):
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):
author = message.author
with open('users.json', 'r') as f:
users = json.load(f)
await update_data(users, author)
await add_experience(users, author, 5)
await level_up(users, author, message.channel)
with open("users.json", 'w') as f:
json.dump(users, f)
if message.content.startswith("&stats"):
global Pxp
global KA
Pxp = 0
KA = 0
await message.channel.send("XP: " + str(Pxp) + ". Enemy Tanks Killed: " + str(KA) + ".")
if message.content.startswith('&start'):
await message.channel.send('Choose vehicle: VT-4, M1 Abrams, T-18 Armata. 1, 2, 3.')
并在底部
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 = float('experience ** 1/2')
if level_start < lvl_end:
await message.channel.send('{} leveled up to level {}'.format(user.mention, lvl_end))
users[user.id]['level'] = lvl_end
请注意,最后一个代码段会生成先前发布的错误。
这也是我的第一篇文章,我不知道我应该具体到哪儿,请保持友善:^)很抱歉,这么长的时间,如果全都错了,就告诉我。
感谢您的帮助。如果您想查看更多代码,只需询问。
答案 0 :(得分:0)
我已经尽力了,我已经建立了一个关卡系统!它是特定于服务器的,显示了进入下一级别所需的xp数量。
@client.event
async def on_message(message):
if not message.author.bot:
print('function load')
with open('level.json','r') as f:
users = json.load(f)
print('file load')
await update_data(users, message.author,message.guild)
await add_experience(users, message.author, 4, message.guild)
await level_up(users, message.author,message.channel, message.guild)
with open('level.json','w') as f:
json.dump(users, f)
await client.process_commands(message)
async def update_data(users, user,server):
if not str(server.id) in users:
users[str(server.id)] = {}
if not str(user.id) in users[str(server.id)]:
users[str(server.id)][str(user.id)] = {}
users[str(server.id)][str(user.id)]['experience'] = 0
users[str(server.id)][str(user.id)]['level'] = 1
elif not str(user.id) in users[str(server.id)]:
users[str(server.id)][str(user.id)] = {}
users[str(server.id)][str(user.id)]['experience'] = 0
users[str(server.id)][str(user.id)]['level'] = 1
async def add_experience(users, user, exp, server):
users[str(user.guild.id)][str(user.id)]['experience'] += exp
async def level_up(users, user, channel, server):
experience = users[str(user.guild.id)][str(user.id)]['experience']
lvl_start = users[str(user.guild.id)][str(user.id)]['level']
lvl_end = int(experience ** (1/4))
if lvl_start < lvl_end:
await channel.send('{} has leveled up to Level {}'.format(user.mention, lvl_end))
users[str(user.guild.id)][str(user.id)]['level'] = lvl_end
@client.command(aliases = ['rank','lvl'])
async def level(ctx,member: discord.Member = None):
if not member:
user = ctx.message.author
with open('level.json','r') as f:
users = json.load(f)
lvl = users[str(ctx.guild.id)][str(user.id)]['level']
exp = users[str(ctx.guild.id)][str(user.id)]['experience']
embed = discord.Embed(title = 'Level {}'.format(lvl), description = f"{exp} XP " ,color = discord.Color.green())
embed.set_author(name = ctx.author, icon_url = ctx.author.avatar_url)
await ctx.send(embed = embed)
else:
with open('level.json','r') as f:
users = json.load(f)
lvl = users[str(ctx.guild.id)][str(member.id)]['level']
exp = users[str(ctx.guild.id)][str(member.id)]['experience']
embed = discord.Embed(title = 'Level {}'.format(lvl), description = f"{exp} XP" ,color = discord.Color.green())
embed.set_author(name = member, icon_url = member.avatar_url)
await ctx.send(embed = embed)