我如何让这个脚本正常工作?

How do I allow this script to work properly?

所以我输入了 taxcalc(金额),但它不起作用。我不明白我做错了什么。该命令应该显示给定金额的 8% 的税收计算,但机器人不会响应该命令。我想知道我是否配置了机器人错误,但也可能是代码错误。


# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user.name} has connected to Discord!')

@client.event
async def taxcalc(ctx, x: str):
        x = CHECK_M_K(str(x))
        lost = x*0.08
        lost2 = x*0.033045
        plus = round(x + x*0.12)
        plost = int(plus-lost2)
        print("plus: "+str(plus))
        print("plus lost: " + str(plost))
        for i in range(int(plus-lost2), plus):
            if x > int(1e12):
                await ctx.channel.send("***IMPOSSIBLE! You definitely DO NOT have more than 1 trillion!!***")
                break
            temp = i
            lost = i-x
            lost = "{:,}".format(lost)
            i -= round(i*0.08)
            if (i == x):
                x = temp
                x = "{:,}".format(x)
                embed = discord.Embed(title="Tax Calculator", description="Amount expected to pay: `⏣ "+ x + "`\n" + "Amount lost by tax: `⏣ "+lost+"`\n" + "Tax rate: 8%", color=0xace1af)
                await ctx.channel.send(embed=embed)
                print(x)
                break
            elif x == 20:
                embed = discord.Embed(title="Tax Calculator", description="Amount expected to pay: `⏣ "+ str(x+2) + "`\n" + "Amount lost by tax: `⏣ 2`\n" + "Tax rate: 8%", color=0xace1af)
                await ctx.channel.send(embed=embed)
                print(x)
                break
            elif x > 6 and x < 19:
                embed = discord.Embed(title="Tax Calculator", description="Amount expected to pay: `⏣ "+ str(x+1) + "`\n" + "Amount lost by tax: `⏣ 1`\n" + "Tax rate: `8%`", color=0xace1af)
                await ctx.channel.send(embed=embed)
                print(x)
                break
            elif x <= 6:
                embed = discord.Embed(title="Tax Calculator", description="Amount expected to pay: `⏣ "+ str(x) + "`\n" + "Amount lost by tax: `⏣ 0`\n" + "Tax rate: `8%`", color=0xace1af)
                await ctx.channel.send(embed=embed)
                print(x)
                break
            else: 
                i = 0 

client.run(token removed lul)```

错误在数据类型规范中。

错误是什么?

  1. 您正在使用 Commands API 因此您不能使用 Client 对象,因为它不是为此而制作的。当您尝试发出命令时,您需要使用 Commands APIBot 个对象。否则机器人将无法运行,只能上线。

  2. 您正在制作 command,然后将其制作成 event。您创建了一个可供用户使用的命令,因此它不是 event,而是 command()。所以你基本上是在使用库的Commands API

  3. 你先说函数中的x是一个字符串,然后再乘以一个数字。您不能将字符串与 int 相乘。由于库 discord.py,除了库错误外,错误将不可见。所以你看不到基本的错误。您需要注意您在脚本中所做的事情。

如何解决?

  1. 第一个错误是由于机器人声明为:
discord.Client

删除此行

这不是为 Commands API 制作的,而是为 event 制作的。您需要为此使用命令声明。

(i) 像这样导入库:

import discord
from discord.ext import commands

(ii) 像这样声明机器人:

client = commands.Bot(command_prefix="!")

现在您将能够使用如下命令:!taxcalc <value>。这将专门让您使用命令。

  1. 第二个错误是由于 event 鉴别器造成的。这是一个 command() 所以你需要改变它。

您需要更改以下代码:

@client.event

至:

@client.command()
  1. 您在函数中的参数是一个字符串 (str),然后您试图对其进行数学运算。您不能对任何字符串类型使用 Math Ops。

要修复它,您需要更改两行。

(i) 第一行:

async def taxcalc(ctx, x: str):

改为:

async def taxcalc(ctx, x: int):

(ii) 第二行:

x = CHECK_M_K(str(x))

改为:

x = CHECK_M_K(x)

如果您进行了上述所有更改,那么您的代码将得到修复,您的机器人将 运行 正确。如果您遇到任何问题,请在评论中询问他们。 :)

谢谢! :D