首页 > 解决方案 > 如何让这个脚本正常工作?

问题描述

所以我输入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)```

标签: pythoncommanddiscord.py

解决方案


错误在数据类型规范中。

错误是什么?

  1. 您正在使用Commands API,因此您不能使用ClientObject,因为它不是为此而设计的。当您尝试发出命令时,您需要Bot使用Commands API. 否则机器人将无法工作,只能上网。

  2. 您正在制作command,然后将其制作为event。您已经创建了一个用户可以使用的命令,所以不是 anevent但它是command(). 所以你基本上Commands API是在使用图书馆。

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

如何解决?

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

删除此行

这不是为 the 设计的,Commands API而它是为events 设计的。您需要为此使用命令声明。

(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),然后您尝试对其使用数学运算。您不能在任何字符串类型上使用数学运算。

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

(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


推荐阅读