如何使用discord bot根据json文件列出的值更改用户角色

如何使用discord bot根据json文件列出的值更改用户角色,json,asynchronous,discord,discord.py,Json,Asynchronous,Discord,Discord.py,我已经创建了一个discord机器人,它有一个级别系统供用户升级,他们可以检查自己的级别,并从存储在json文件中的每条发送的消息中获取exp。我想在此代码中添加一个函数,用于在特定级别更改用户角色。我知道我需要一个包含lvl_end变量的if语句,但是我不太确定这段代码应该是什么样子。这是我的代码,我非常感谢您的帮助 import discord import json import asyncio import os import time import random from discor

我已经创建了一个discord机器人,它有一个级别系统供用户升级,他们可以检查自己的级别,并从存储在json文件中的每条发送的消息中获取exp。我想在此代码中添加一个函数,用于在特定级别更改用户角色。我知道我需要一个包含lvl_end变量的if语句,但是我不太确定这段代码应该是什么样子。这是我的代码,我非常感谢您的帮助

import discord
import json
import asyncio
import os
import time
import random
from discord.ext import commands

TOKEN = 
client = commands.Bot(command_prefix = '!')



@client.event
async def on_ready():
    print("Bot is online and ready to connect to server")
    await client.change_presence(game=discord.Game(name='SHADOWSMAR is cool!'))


@client.command(pass_context=True)
async def clear(ctx, amount=100):
    channel = ctx.message.channel
    messages = []
    async for message in client.logs_from(channel, limit=int(amount)):
        messages.append(message)
    await client.delete_messages(messages)
    await client.say('Messages deleted')

@client.event
async def on_member_join(member):
    role = discord.utils.get(member.server.roles, name='Tourist')
    await client.add_roles(member, role)

    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):
    await client.process_commands(message)
    with open('users.json', 'r') as f:
        users = json.load(f)
    upgrade = random.randint(5,10)

    await update_data(users, message.author)
    await add_experience(users, message.author, upgrade)
    await level_up(users, message.author, message.channel)

    with open('users.json', 'w') as f:
        json.dump(users, f)

#Update data
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
#Get xp per message
async def add_experience(users, user, exp):
    users[user.id]['experience'] += exp
#Level up
async def level_up(users, user, channel):
    experience = users[user.id]['experience']
    lvl_start = users[user.id]['level']
    lvl_end = int(experience ** 1.75)


    if lvl_start < lvl_end and lvl_end == 5 or lvl_end == 10 or lvl_end == 15 or lvl_end == 20:
        await client.send_message(channel, '{} has leveld up to level {}'.format(user.mention, lvl_end))

    users[user.id]['level'] = lvl_end

#Rank check
@client.command(pass_context=True)
async def rank(ctx, user : discord.Member=None):
    if user is None:
        user = ctx.message.author
    with open('users.json', 'r') as f:
        users = json.load(f) 
        lvl_end = users[user.id]['level']
        exp = users[user.id]['experience']
        rank = discord.Embed(name="{}'s rank is".format(user.name), colour = 0xec134b)
        rank.add_field(name="{}'s rank:".format(user.name), value="{}".format(lvl_end))
        rank.add_field(name="total experience points:", value="{}".format(exp), inline=True)
        rank.add_field(name="Highest role", value=user.top_role)
        rank.set_footer(text="Thanks for being part of the community :D")
        rank.set_thumbnail(url=user.avatar_url)
        await client.say(embed=rank)

client.run(TOKEN)
导入不一致
导入json
导入异步
导入操作系统
导入时间
随机输入
从discord.ext导入命令
令牌=
client=commands.Bot(命令前缀='!')
@客户端事件
_ready()上的异步定义:
打印(“机器人已联机并准备连接到服务器”)
等待客户。改变状态(游戏=discord.game(name='SHADOWSMAR is cool!')
@client.command(pass\u context=True)
异步def清除(ctx,数量=100):
通道=ctx.message.channel
消息=[]
客户端中消息的异步。日志来自(通道,限制=int(数量)):
messages.append(消息)
等待客户端。删除_消息(消息)
等待客户端。说('Messages deleted')
@客户端事件
成员加入时的异步定义(成员):
role=discord.utils.get(member.server.roles,name='tourism')
等待客户。添加_角色(成员、角色)
将open('users.json','r')作为f:
users=json.load(f)
等待更新_数据(用户、成员)
将open('users.json','w')作为f:
json.dump(用户,f)
@客户端事件
异步def on_消息(消息):
等待客户端处理命令(消息)
将open('users.json','r')作为f:
users=json.load(f)
升级=random.randint(5,10)
等待更新_数据(用户,message.author)
等待添加体验(用户、message.author、升级)
等待级别(用户、message.author、message.channel)
将open('users.json','w')作为f:
json.dump(用户,f)
#更新数据
异步def更新_数据(用户,用户):
如果不是用户中的user.id:
用户[user.id]={}
用户[user.id]['experience']=0
用户[user.id]['level']=1
#每封邮件获取xp
异步def添加体验(用户、用户、经验):
用户[user.id]['experience']+=exp
#升级
异步def液位(用户、用户、通道):
体验=用户[user.id]['experience']
lvl_start=users[user.id]['level']
lvl_end=int(经验**1.75)
如果lvl_开始
您可以设置一个字典,用户级别与他们的级别相对应,并在他们每次写邮件时检查该级别
例如,类似这样的事情:

from discord.utils import get

@client.event
async def on_message(message):
  user = message.author
  role_dict = {1:"role#1_name",2:"role#2_name",3:"role#3_name"}
  roles = message.server.roles
  try:
    for key,value in role_dict.items():
      if value in [rl.name for rl in user.roles]:
        await client.remove_roles(user,get(roles,name = value))
  except discord.Forbidden:
    print("Bot permissions aren't high enough to remove roles from this user")


  with open('users.json', 'r') as f:
      users = json.load(f)

  await client.add_roles(user,get(roles,name = role_dict[users[user.id]['level']]))