python - 如何让这个脚本正常工作?
问题描述
所以我输入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)```
解决方案
错误在数据类型规范中。
错误是什么?
您正在使用
Commands API
,因此您不能使用Client
Object,因为它不是为此而设计的。当您尝试发出命令时,您需要Bot
使用Commands API
. 否则机器人将无法工作,只能上网。您正在制作
command
,然后将其制作为event
。您已经创建了一个用户可以使用的命令,所以不是 anevent
但它是command()
. 所以你基本上Commands API
是在使用图书馆。您首先说
x
函数中的 the 是一个字符串,然后将其与一个数字相乘。您不能将字符串与 int 相乘。由于库 discord.py,除了库错误之外,该错误将不可见。所以你看不到基本错误。您需要注意您在脚本中所做的事情。
如何解决?
- 第一个错误是由于机器人声明为:
discord.Client
删除此行
这不是为 the 设计的,Commands API
而它是为event
s 设计的。您需要为此使用命令声明。
(i) 像这样导入库:
import discord
from discord.ext import commands
(ii) 像这样声明机器人:
client = commands.Bot(command_prefix="!")
现在您将能够使用您的命令,例如:!taxcalc <value>
. 这将专门让您使用命令。
- 第二个错误是由于
event
鉴别器造成的。这是一个command()
所以你需要改变它。
您需要从以下位置更改代码:
@client.event
至:
@client.command()
- 您在函数中的参数是一个字符串 (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
推荐阅读
- phpmailer - 通过没有 SMTP 的 PHPmailer 发送电子邮件
- j - J中给定长度的所有布尔可能性
- list - 从列表中删除重复但未在 SWI-Prolog 中返回两个相同的结果?
- html - 使用 CSS 完全垂直对齐 2 种不同文本大小的字体顶部
- reactjs - 分叉 react-scripts 以添加自定义依赖项
- python - 如何使用 Python 将有序的一维数据粗化为不规则的 bin
- javascript - 使用对象数据动态创建选择菜单并实现的问题
- python - Python-写入txt文件的问题
- javascript - 将 HTML 元素的字符串分离为字符串
- java - 从正则表达式中排除字符集