【发布时间】:2020-05-13 11:04:08
【问题描述】:
所以我在谷歌上搜索了几个不同的搜索,并观看了这个视频https://www.youtube.com/watch?v=pKkrCHnun0M,关于为我的机器人制作关卡系统。基本上,机器人(IN PYTHON)就像一个冒险坦克游戏;游戏给你一个坦克开始,允许你选择一张地图,移动到地图的不同区域,并会使用 rng 来判断是否有敌方坦克。每个被摧毁的敌方坦克会给你 10 点经验值。现在,在前面提到的视频中,为了添加 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
请注意,最后一个 sn-p 会生成之前发布的错误。
这也是我的第一篇文章,我不知道我应该说得有多具体,请多多关照 :^) 很抱歉这么长,如果都错了,请告诉我。
感谢任何帮助。如果您想查看更多代码,请询问。
【问题讨论】: