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