有人可以帮我处理这个代码吗? 我想更改此代码,以便在多台服务器上,一个用户没有来自另一台服务器的数据,因为现在不同服务器上的每个用户都有相同数量的钱,并且顶级用户表是相同的,我希望它不是以便用户可以在不同的服务器上分别赚取。
这是我的经济代码:
async def portfel(ctx):
await open_account(ctx.author)
user = ctx.author
users = await get_bank_data()
wallet_amt=users[str(user.id)]["portfel"]
bank_amt=users[str(user.id)]["bank"]
em=discord.Embed(color=0xFFFF00)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
em.add_field(name="?Portfel:", value=wallet_amt)
em.add_field(name="?Bank:",value=bank_amt)
await ctx.send(embed=em)
@client.command()
@commands.cooldown(1, 120, commands.BucketType.user)
async def work(ctx):
await open_account(ctx.author)
users = await get_bank_data()
user = ctx.author
earnings=random.randrange(101)
variable=[
f"Posprzątałeś dom sąsiada! Sąsiad ci daje {earnings}",
f"Znalazłeś {earnings} pieniędzy na ulicy!",
f"Pracowałeś dodatkowo na wakacjach w Żabce, lecz twoje hot-dogi często były nie dobre, więc otrzymujesz {earnings}",
f"Pracowałeś na polu pomagając rolnikom. Otrzymujesz {earnings}",
f"Rozdawałeś dodatkowo na ulicy gazety dla pobliskiego kiosku. Zarobiłeś {earnings}",
f"Poszedłeś na konkurs fotografii i wygrałeś {earnings}",
f"Skosiłeś trawnik. Otrzymujesz {earnings}",
f"Pomogłeś starszym sąsiadom z internetem. Dali ci za to {earnings}"]
em=discord.Embed(description="{}".format(random.choice(variable)), color=0x33FF66)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
users[str(user.id)]["portfel"] += earnings
with open("mainbank.json","w") as f:
json.dump(users,f)
@work.error
async def work_error(ctx, error):
if isinstance(error, commands.CommandOnCooldown):
em=discord.Embed(description='Poczekaj **%.2fs** zanim znów użyjesz tej komendy!' % error.retry_after, color=0xFF0000)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
@client.command()
@commands.cooldown(1, 240, commands.BucketType.user)
async def crime(ctx):
await open_account(ctx.author)
users = await get_bank_data()
user = ctx.author
earnings=random.randrange(300)
variable=[
"slabo",
"dobrze",
"dobrze"]
if random.choice(variable)=="slabo":
variable=[
f"Próbowałeś coś ukraść ale cię przyłapano! Tracisz {earnings}",
f"Zbierałeś ekipę na skok na bank ale twoi towarzysze cię zdradzili. Tracisz {earnings}",
f"Próbowałeś oscamować kogoś w internecie, lecz ci się nie udało. Tracisz {earnings}",
f"Zrobiłeś napad na pobliski sklep, lecz okazało się że w środku była Policja i cię aresztowała. Tracisz {earnings}",]
em=discord.Embed(description="{}".format(random.choice(variable)), color=0xFF3333)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
users[str(user.id)]["portfel"] -= earnings
with open("mainbank.json","w") as f:
json.dump(users,f)
else:
variable=[
f"Okradłeś sklep, zyskujesz {earnings}",
f"Napadłeś na kogoś i ten ktoś dał ci {earnings}"]
em=discord.Embed(description="{}".format(random.choice(variable)), color=0x33FF66)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
users[str(user.id)]["portfel"] += earnings
with open("mainbank.json","w") as f:
json.dump(users,f)
@crime.error
async def crime_error(ctx,error):
if isinstance(error, commands.CommandOnCooldown):
em = discord.Embed(description='Poczekaj **%.2fs** zanim znów użyjesz tej komendy!' % error.retry_after,
color=0xFF0000)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
@client.command()
@commands.cooldown(1, 1250, commands.BucketType.user)
async def slut(ctx):
await open_account(ctx.author)
users = await get_bank_data()
user = ctx.author
earnings = random.randrange(500)
variable = [
"slabo",
"dobrze"]
if random.choice(variable) == "slabo":
variable = [
f"Przebrałeś się za dziewczynę żeby kusić chłopaków, lecz ci się nie udało i cię okradli! Tracisz {earnings}",
f"Zrobiłeś to tamto, ale klient oraz pracodawca nie był zadowolony! Tracisz {earnings}",
f"Twój przyjaciel cię zaprosił do klubu tanecznego, lecz okazało się że to oszustwo i jak byłeś pijany, okradli cię! Tracisz {earnings}",
f"Śledziłeś swoje znajome, lecz te cię przyłapały i pobiły! Tracisz {earnings}"]
em = discord.Embed(description="{}".format(random.choice(variable)), color=0xFF3333)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
users[str(user.id)]["portfel"] -= earnings
with open("mainbank.json", "w") as f:
json.dump(users, f)
else:
earnings = random.randrange(5000)
variable = [
f"Zrobiłeś to tamto, i klient ci dał {earnings}!",
f"Przebrałeś się za dziewczynę żeby kusić chłopaków, a ci zapłacili tobie {earnings} żebyś się odczepił!",
f"Twój znajomy ci polecił klub taneczny i się okazało że to był dobry pomysł. Wszystkim się spodobał twój taniec. Zyskujesz {earnings}"]
em = discord.Embed(description="{}".format(random.choice(variable)), color=0x33FF66)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
users[str(user.id)]["portfel"] += earnings
with open("mainbank.json", "w") as f:
json.dump(users, f)
@slut.error
async def slut_error(ctx, error):
if isinstance(error, commands.CommandOnCooldown):
em = discord.Embed(description='Poczekaj **%.2fs** zanim znów użyjesz tej komendy!' % error.retry_after,
color=0xFF0000)
em.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
@client.command()
@commands.has_permissions(administrator=True)
async def addmoney(ctx, user:discord.User, *,count):
await open_account(ctx.author)
users = await get_bank_data()
user = user
users[str(user.id)]["portfel"] += count
em=discord.Embed(description=f"Dodano {count}zł {member.mention}", color=0xFFFF00)
em.set_footer(text=f"Komenda wywołana przez {ctx.message.author.name}", icon_url=ctx.author.avatar_url)
await ctx.send(embed=em)
with open("mainbank.json", "w") as f:
json.dump(users, f)
async def open_account(user):
users = await get_bank_data()
if str(user.id) in users:
return False
else:
users[str(user.id)] = {}
users[str(user.id)]["portfel"] = 0
users[str(user.id)]["bank"] = 0
with open("mainbank.json","w") as f:
json.dump(users,f)
return True
async def get_bank_data():
with open("mainbank.json","r") as f:
users = json.load(f)
return users
@client.command(aliases = ["lb"])
async def top(ctx,x = 1):
users = await get_bank_data()
leader_board = {}
total = []
for user in users:
name = int(user)
total_amount = users[user]["portfel"] + users[user]["bank"]
leader_board[total_amount] = name
total.append(total_amount)
total = sorted(total,reverse=True)
em = discord.Embed(title = f"Top najbogatszych użytkowników!" , description = "Tabela najbogatszych osób:",color = 0xFFFF00)
index = 2
for amt in total:
id_ = leader_board[amt]
member = client.get_user(id_)
name = member.name
em.add_field(name = f"{index}. **{name}**" , value = f"?{amt}", inline = False)
em.set_footer(text="Komenda wywoałana przez {}".format(ctx.message.author.name), icon_url=ctx.author.avatar_url)
if index == x:
break
else:
index += 1
await ctx.send(embed = em)
Python 3.8.4 Discord.py-最新版本
答案 0 :(得分:0)
你应该使用嵌套字典,这样每个公会都有自己的用户字典,然后像这样访问它:
bank[guild][user]
让我们创建一个函数来更新用户余额:
async def update_balance(member, amount):
server = member.guild
with open("mainbank.json","w") as f:
bank = json.load(f)
if server not in bank:
bank[server] = {}
if member in not bank[server]:
bank[server][member] = 0
bank[server][member] += amount
with open("mainbank.json", "w") as f:
json.dump(bank, f)
那么无论何时你想更新用户的余额,你都可以调用这个函数。
不过要小心,您需要提供 discord.Member
对象而不是 discord.User
对象。