如何转换需要用户输入才能在Discord bot中工作的python代码?

时间:2019-02-21 03:07:07

标签: python discord discord.py

所以我有一段代码,它需要用户多次输入(输入的内容并不总是一样)。与其将代码传递给不和谐的所有人,我不希望将其直接放入不和谐的bot中,以便每个人都可以使用它。给出代码后,我所有的机器人如何接收用户味精

这是我想要的例子:

-。botcalc
-这是不和谐的机器人,请输入第一个数字:
-1
-输入第二个数字:
-2
--1 + 2 = 3

2 个答案:

答案 0 :(得分:0)

使用wait_for

async def botcalc(self, ctx):
        author = ctx.author
        numbers = []

        def check(m):
            return m.author ==  author

        for _ in ('first', 'second'):
            await ctx.send(f"enter {_} number")
            num = ""
            while not num.isdigit():
                num = await client.wait_for('message', check=check)
            numbers.append[int(num)]

        await channel.send(f'{numbers[0]}+{numbers[1]}={sum{numbers)}')

修改

添加了支票

答案 1 :(得分:0)

如果您要启动新的漫游器,请使用the rewrite version of discord.py。您可以找到the documentation here

您可以通过两种方式编写此命令:一种是在问题中使用“对话”风格

from discord.ext.commands import Bot

bot = Bot("!")

def check(ctx):
    return lambda m: m.author == ctx.author and m.channel == ctx.channel

async def get_input_of_type(func, ctx):
    while True:
        try:
            msg = await bot.wait_for('message', check=check(ctx))
            return func(msg.content)
        except ValueError:
            continue

@bot.command()
async def calc(ctx):
    await ctx.send("What is the first number?")
    firstnum = await get_input_of_type(int, ctx)
    await ctx.send("What is the second number?")
    secondnum = await get_input_of_type(int, ctx)
    await ctx.send(f"{firstnum} + {secondnum} = {firstnum+secondnum}")

第二种方法是使用converters接受参数作为命令调用的一部分

@bot.command()
async def calc(ctx, firstnum: int, secondnum: int):
    await ctx.send(f"{firstnum} + {secondnum} = {firstnum+secondnum}")