Discord 机器人 python 数学

Discord bot python math

我试图在我的 discord 机器人中制作一个简单的计算器,但它不起作用, 它给出了一个错误。

顺便说一下,我使用 discord.py(discord bot 在 python 中编写脚本)

谁能帮帮我?

这是我的代码

@bot.command()
async def calc(ctx):
   await ctx.send("Number 1: ")

   number_1 = await  bot.wait_for("message" )

   await ctx.send("Operator: ")

   operator = await  bot.wait_for("message" )

   await ctx.send("number 2: ")

   number_2 = await  bot.wait_for("message" )


    number_1 = float(number_1)
    number_2 = float(number_2)

    ouput = none

    if operator == "+":
        ouput = number_1 + number_2

    elif operator == "-":
        output = number_1 - number_2

    elif operator == "/":
        output = number_1 / number_2
    
    elif operator == "*":
        output = number_1 * number_2
    
    else :
        ctx.send(f"invalid input")

    ctx.send(f"Answer: " + str(output))

你误解了一些事情:

  1. wait_for 函数需要 check 来查看您 等待 的东西是否就是您得到的东西,
  2. number_1number_2 & operator 将是消息对象而不是消息内容,因此您必须从该对象获取 content 属性,
  3. 在你的代码变量 output 有时是名称 ouput 并且你将 none 分配给它这是完全错误的,它应该是 None 大写字母,
  4. 你最后的 2 ctx.send() 开头没有 await
  5. 您必须 return 在无效输入后,否则机器人将发送“应答消息”
  6. 你的代码中有一些不必要的f"strings"

我想就是这样。您的代码应如下所示:

@bot.command()
async def calc(ctx):
    def check(m):
        return len(m.content) >= 1 and m.author != bot.user

    await ctx.send("Number 1: ")
    number_1 = await bot.wait_for("message", check=check)
    await ctx.send("Operator: ")
    operator = await bot.wait_for("message", check=check)
    await ctx.send("number 2: ")
    number_2 = await bot.wait_for("message", check=check)
    try:
        number_1 = float(number_1.content)
        operator = operator.content
        number_2 = float(number_2.content)
    except:
        await ctx.send("invalid input")
        return
    output = None
    if operator == "+":
        output = number_1 + number_2
    elif operator == "-":
        output = number_1 - number_2
    elif operator == "/":
        output = number_1 / number_2
    elif operator == "*":
        output = number_1 * number_2
    else:
        await ctx.send("invalid input")
        return
    await ctx.send("Answer: " + str(output))

此外 - 你在那里犯了一些非常像初学者的错误,首先你应该学习 python 的基础知识而不是尝试编写不和谐的机器人。我知道这很酷,但当你真正知道自己在做什么时,它会更有趣。

这是一种更简单的计算器制作方法

import sympy
import numpy
@bot.command()
async def calc(ctx,arg):        #arg is desired calculation(since this code is simple make sure u dont leave any spaces
  answer=N(arg)                  #this will calculate the result    
  ans=np.format_float_positional(answer,trim='-')   #this will remove extra zeros from float
  tu=discord.Embed(title='{0}={1}'.format(arg,ans),color=0XEDAF65)
  await ctx.send(embed=tu)