Discord.py 在命令后监听消息

Off*_*Off 5 python discord.py

我一直在尝试创建一个机器人命令,在发送命令后侦听消息。这旨在用于创建命令作者的配置文件,以便稍后存储在 JSON 文件中。

@client.command()     #creates player profile
async def create(ctx):
    await ctx.send("You will be asked a series of questions to create your Profile. If you accidentally typed this wait 15 seconds for it to cancel.")
    message = await client.wait_for('message',check=None,timeout=15)
    await ctx.send(message) #used to check what message is holding
Run Code Online (Sandbox Code Playgroud)

虽然上面的代码可以工作,但它并没有按照我想要的方式工作。它会发回服务器、成员、频道、消息和作者的 ID 以及其他信息,而不是保留命令作者的回复。

Coh*_*hen 3

因此,您想要的是存储用户的输入数据并将其附加到就像面试表格一样:

它获取用户的输入消息并将其附加到他们回答的消息中,如下所示:

q_list = [
    'Your question 1',
    'Your question 2',
    'Your question 3']

a_list = []


@client.command()
async def create(ctx):

        await ctx.send("You will be asked a series of questions to create your Profile. If you accidentally typed this wait 15 seconds for it to cancel.")

        a_list = []
        submit_channel = client.get_channel(CHANNEL_ID_FOR_SUBMISSIONS)
        channel = await ctx.author.create_dm()

        def check(m):
                return m.content is not None and m.channel == channel

        for question in q_list:
                await asyncio.sleep(3)
                await channel.send(question)
                msg = await client.wait_for('message', check=check)
                a_list.append(msg.content)

        submit_wait = True
        while submit_wait:
                await channel.send(
                    'You have completed the interview, type ``submit`` to confirm')
                msg = await client.wait_for('message', check=check)
                if "submit" in msg.content.lower():
                        submit_wait = False
                        answers = "\n".join(f'{a}. {b}' for a, b in enumerate(a_list, 1))
                        submit_msg = f'''**Submission - Created by {msg.author.mention}** \n{answers}'''
                        await submit_channel.send(submit_msg)


Run Code Online (Sandbox Code Playgroud)