discord.py运行出现RuntimeWarning: Command.__call__ was never awaited报错求助
错误原因
open_account被定义为普通同步函数,但你在异步命令中使用await调用它,同时函数内部也使用了await语法调用同步函数get_bank_data,同步函数不支持await操作,直接触发协程未等待的报错。open_account内部逻辑冗余:第一行users = await get_bank_data()执行后,你又直接读取bank.json覆盖了users变量,这行代码完全无效,是报错的直接诱因。- 额外隐藏问题:discord.py的颜色类首字母大写,
discord.color.dark_green写法错误,后续运行会触发属性错误。
修复方法
按以下规则修改代码即可:
- 将
open_account改为异步函数 - 删除
open_account内多余的users = await get_bank_data()行 - 修正Embed的颜色写法
修复后完整代码
import discord import json import random from discord.ext import commands # 此处保留你原有client初始化代码 @client.command() async def balance(ctx): await open_account(ctx.author) user = ctx.author users = get_bank_data() wallet_amt = users[str(user.id)]["wallet"] bank_amt = users[str(user.id)]["bank"] em = discord.Embed(title = f"{ctx.author.name}'s balance",color=discord.Color.dark_green()) em.add_field(name = "Wallet Balance", value = wallet_amt) em.add_field(name = "Bank Balance", value = bank_amt) await ctx.send(embed=em) @client.command() async def beg(ctx): await open_account(ctx.author) users = get_bank_data() user = ctx.author earnings = random.randrange(51) await ctx.send(f"Someone gave you {earnings} coins!!") users[str(user.id)]["wallet"] += earnings with open("bank.json", "w") as f: json.dump(users, f) # 修正后的open_account函数 async def open_account(user): with open("bank.json", "r") as f: users = json.load(f) if str(user.id) in users: return False else: users[str(user.id)] = {} users[str(user.id)]["wallet"] = 0 users[str(user.id)]["bank"] = 0 with open("bank.json", "w") as f: json.dump(users, f) return True def get_bank_data(): with open("bank.json", "r") as f: users = json.load(f) return users
额外注意
首次运行前请确保你项目目录下已经创建了bank.json文件,且写入了初始内容{},否则会报文件读取错误。
内容的提问来源于stack exchange,提问作者Tree Jin
相关产品推荐
相关产品推荐

