Как вы конвертируете код Python, который требует ввода данных пользователем для работы в боре разногласий? - PullRequest
0 голосов
/ 21 февраля 2019

Итак, у меня есть кусок кода, и он требует ввода пользователя несколько раз (и то, что вводится, не всегда то же самое).Вместо того, чтобы передавать код всем, кто находится в моем диссонансе, я хотел бы превратить его непосредственно в бот-дискорд, чтобы каждый мог его использовать.Как мне всем ботом принять пользовательское сообщение после ввода кода

Вот пример того, что я хочу:

-. Botcalc
- это диссонансбот, введите первое число:
-1
- введите второе число:
-2
--1 + 2 = 3

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете написать эту команду двумя способами: один использует стиль «разговор» в вашем вопросе

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}")

Второй - использовать конвертеры для принятия аргументов как частивызова команды

@bot.command()
async def calc(ctx, firstnum: int, secondnum: int):
    await ctx.send(f"{firstnum} + {secondnum} = {firstnum+secondnum}")
0 голосов
/ 21 февраля 2019

Использование 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)}')

edit

Добавлен чек

...