我如何让这个脚本正常工作?
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)```
错误在数据类型规范中。
错误是什么?
您正在使用 Commands API
因此您不能使用 Client
对象,因为它不是为此而制作的。当您尝试发出命令时,您需要使用 Commands API
的 Bot
个对象。否则机器人将无法运行,只能上线。
您正在制作 command
,然后将其制作成 event
。您创建了一个可供用户使用的命令,因此它不是 event
,而是 command()
。所以你基本上是在使用库的Commands API
。
你先说函数中的x
是一个字符串,然后再乘以一个数字。您不能将字符串与 int 相乘。由于库 discord.py,除了库错误外,错误将不可见。所以你看不到基本的错误。您需要注意您在脚本中所做的事情。
如何解决?
- 第一个错误是由于机器人声明为:
discord.Client
删除此行
这不是为 Commands API
制作的,而是为 event
制作的。您需要为此使用命令声明。
(i) 像这样导入库:
import discord
from discord.ext import commands
(ii) 像这样声明机器人:
client = commands.Bot(command_prefix="!")
现在您将能够使用如下命令:!taxcalc <value>
。这将专门让您使用命令。
- 第二个错误是由于
event
鉴别器造成的。这是一个 command()
所以你需要改变它。
您需要更改以下代码:
@client.event
至:
@client.command()
- 您在函数中的参数是一个字符串 (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
所以我输入了 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
对象,因为它不是为此而制作的。当您尝试发出命令时,您需要使用Commands API
的Bot
个对象。否则机器人将无法运行,只能上线。您正在制作
command
,然后将其制作成event
。您创建了一个可供用户使用的命令,因此它不是event
,而是command()
。所以你基本上是在使用库的Commands API
。你先说函数中的
x
是一个字符串,然后再乘以一个数字。您不能将字符串与 int 相乘。由于库 discord.py,除了库错误外,错误将不可见。所以你看不到基本的错误。您需要注意您在脚本中所做的事情。
如何解决?
- 第一个错误是由于机器人声明为:
discord.Client
删除此行
这不是为 Commands API
制作的,而是为 event
制作的。您需要为此使用命令声明。
(i) 像这样导入库:
import discord
from discord.ext import commands
(ii) 像这样声明机器人:
client = commands.Bot(command_prefix="!")
现在您将能够使用如下命令:!taxcalc <value>
。这将专门让您使用命令。
- 第二个错误是由于
event
鉴别器造成的。这是一个command()
所以你需要改变它。
您需要更改以下代码:
@client.event
至:
@client.command()
- 您在函数中的参数是一个字符串 (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