我正在构建一个机器人,允许用户向机器人发送命令以获取游戏内货币。我已经为这个项目安装了所有必需的模块,它能够在命令提示符中运行它的启动消息。
但是,我遇到了一个问题,即在 Discord 服务器中调用时,机器人不响应我的命令。这是 cmd 提示符中显示的 Error Message。我已经查找过类似的问题,但它没有帮助我解决这个问题。
我对如何进一步改进我的代码持开放态度,因为我对 Python 还是个新手。
import discord
from discord.ext import commands
import json
import os
import random
os.chdir("D:\\Work\\Programming\\Sublime Text\\Projects")
client = discord.Client()
client = commands.Bot(command_prefix = "bot!")
##Event portion
@client.event
async def on_ready():
print("Hello, the bot is ready.")
@client.command() ##Account opening
async def open_account(user):
users = await get_bank_data()
with open("bank.json","r") as f:
users = json.load(users,f)
if str(user.id) in users:
return false
else:
users[str(user.id)] = {}
users[str(user.id)]["Wallet"] = 150
with open("bank.json","w") as f:
json.dump(users,f)
return True
async def get_bank_data():##Bank data
with open("bank.json","r") as f:
users = json.load(f)
return users
async def balance(ctx):##Balance portion
await open_account(ctx,author) ##Open an account if it is not an existing user
user = ctx.author
users = await get_bank_data()
wallet_amt = users[str(user.id)]["Wallet"]
async def earn(ctx):##Earning portion
await open_account(ctx,author)
user = ctx.author
users = await get_bank_data()
earnings = randomrange(1000)
wallet_amt = users[str(user.id)]["Wallet"]
await ctx.send(f"You made {earnings} dollars")
users[str(user.id)]["Wallet"] += earnings
with open("bank.json","w") as f:
json.dump(users,f)
##Embeded portion
em= discord.Embed(title =f"{ctx.author.name}'s balance", color =discord.Color.red())
em.add_field(name = "Wallet", value = wallet_amt)
await ctx.send(emded = em)
client.run('TOKEN')
答案 0 :(得分:0)
在做 @client.command
之前总是要加上 async def
,否则它不会将其识别为命令。
答案 1 :(得分:0)
有两种类型的函数可以使它变得简单。
async def
当您想使用 await
def
如果没有 await
你的命令必须是异步函数,它看起来像这样
@client.command
async def test(ctx):
#code
在您的情况下,您在 @client.command
balance
和 myabe 中缺少 earn
。