Discord Python Bot: система повышения уровня - PullRequest
0 голосов
/ 28 января 2020

Итак, я погуглил несколько разных поисков и посмотрел это видео 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 должно быть, пожалуйста, будьте милы: ^) Извините, что это так долго, и если все не так, просто скажите мне.

Любая помощь приветствуется. Если вы хотите увидеть больше кода, просто спросите.

...