Итак, я погуглил несколько разных поисков и посмотрел это видео https://www.youtube.com/watch?v=pKkrCHnun0M о создании системы уровней для моего бота. По сути, бот (IN PYTHON) похож на приключенческую танковую игру; игра дает вам танк для запуска, позволяет вам выбирать карту, перемещаясь в разные сектора карты, и будет использовать rng, чтобы решить, есть ли вражеский танк. Каждый уничтоженный вражеский танк дает вам 10 очков опыта. Теперь, в вышеупомянутом видео, чтобы добавить xp, он использует сообщения, а также запускает профиль игрока c statisti после их входа на сервер.
Теперь я хочу, чтобы мой пользователь начал свой профиль после ввод команды '& 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
Обратите внимание, что последний фрагмент генерирует ранее опубликованную ошибку.
Это также мой первый пост, и я не знал, как указать c I должно быть, пожалуйста, будьте милы: ^) Извините, что это так долго, и если все не так, просто скажите мне.
Любая помощь приветствуется. Если вы хотите увидеть больше кода, просто спросите.