Discord.py 模态表单命令没有响应,尽管控制台中没有错误

问题描述 投票:0回答:1

我想创建一个命令,这样当我使用它时,会弹出一个表格供我填写,我的回复将通过 DM 发送给我,然后发布在另一个频道中。下面是我在名为

modal
的小组中使用的代码(我参考了多个 YouTube 教程);由于隐私和其他原因,姓名和号码略有更改。

我能够正常运行机器人,没有任何错误,并且所有其他齿轮和命令都正常工作。但是,当我使用模态表单命令时,机器人根本没有响应,尽管控制台中没有打印任何错误

启动机器人时,

在控制台中会打印数字

2
3
4
5
6
7
8
(为什么会发生这种情况??? ),并且当我使用模态形式命令时,控制台中仅打印数字0,这可能意味着
await interaction.response.send_modal(myModal())
由于某种原因无法工作。

我期望发生什么

当我
    使用命令
  • 时,控制台打印 0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    15
    15
    15
    15
    16
    17
    Discord 向我展示了一个模态表单,其中包含 5 个问题需要完成(均为必填,段落,1000 个字符限制),并且在我完成模态表单后,包含我的回复的嵌入内容将发送到文本通道和我的私信
    在我完成模态表单后,机器人会使用包含我的用户名和用户 ID 的消息来响应命令
    
    
    到底发生了什么
  • 当我
  • 启动机器人
  • 时,控制台打印
  • 18

19

    20
  • 2
    3
    4
    5
    (为什么???)
    当我
    使用命令
    时,控制台打印
    6
    (为什么???)
    机器人不响应命令(几秒钟后显示“应用程序未响应”)
  • 文件:
    7
8

文件:

0

commands/slash_commands_modal.py

编辑

我尝试从头开始并制作一个包含三个问题的测试模式,如下面的代码所示。这次机器人命令和
模式按预期工作
。但是,控制台
没有按我的预期打印

(我希望控制台打印对问题的回答,而控制台打印问题本身)。 请注意,与上面的代码不同,我根本没有更改下面的代码 我预期会发生什么:

当我

使用命令时,控制台打印 import discord from discord import app_commands, ui from discord.ext import commands from misc.dicts import DICT class myModal(ui.Modal, title="Why not working"): print("2") # debug no.2 a1 = ui.TextInput( label=DICT["a"][0], placeholder=DICT["ax"][0], style=discord.TextStyle.paragraph, max_length=1000, required=True ) print("3") # debug no.3 a2 = ui.TextInput( label=DICT["a"][1], placeholder=DICT["ax"][1], style=discord.TextStyle.paragraph, max_length=1000, required=True ) print("4") # debug no.4 a3 = ui.TextInput( label=DICT["a"][2], placeholder=DICT["ax"][2], style=discord.TextStyle.paragraph, max_length=1000, required=True ) print("5") # debug no.5 a4 = ui.TextInput( label=DICT["a"][3], placeholder=DICT["ax"][3], style=discord.TextStyle.paragraph, max_length=1000, required=True ) print("6") # debug no.6 a5 = ui.TextInput( label=DICT["a"][4], placeholder=DICT["ax"][4], style=discord.TextStyle.paragraph, max_length=1000, required=True ) print("7") # debug no.7 a = [a1,a2,a3,a4,a5] print("8") # debug no.8 async def on_submit(self, interaction: discord.Interaction): print("9") # debug no.9 channel = self.bot.get_channel(9999999999999999999) print("10") # debug no.10 d = f"- Username: **{interaction.user.name}**\n- User ID: ||**`{interaction.user.id}`**||" print("11") # debug no.11 e = discord.Embed(title=f"Form", description=d, colour=0xe74c3c) print("12") # debug no.12 e.set_footer(text="Form Response") print("13") # debug no.13 q = DICT["a"] print("14") # debug no.14 for i, j in zip(q, self.a): e.add_field(name=i, value=j, inline=False) print("15") # debug no.15 await channel.send(embed=e) print("16") # debug no.16 await interaction.response.send_message(f"- Username: **{interaction.user.name}**\n- User ID: ||**`{interaction.user.id}`**||\n\nThe form is done yay", ephemeral=True) print("17") # debug no.17 user = self.bot.get_user(interaction.user.id) print("18") # debug no.18 await user.create_dm() print("19") # debug no.19 await user.dm_channel.send(embed=e) print("20") # debug no.20 class SlashCmd_Modal(commands.GroupCog, group_name="modal"): def __init__(self, bot): self.bot = bot @app_commands.command(name="form", description="a description") @app_commands.describe(role="another description") @app_commands.choices(role = [ app_commands.Choice(name="A", value="a"), app_commands.Choice(name="B", value="b"), app_commands.Choice(name="C", value="c"), app_commands.Choice(name="D", value="d") ]) async def form(self, interaction: discord.Interaction, role: str): if role == "a": print("0") # debug no.0 await interaction.response.send_modal(myModal()) print("1") # debug no.1 elif role == "b": ... # similar kind of form but different class elif role == "c": ... # similar kind of form but different class elif role == "d": ... # similar kind of form but different class async def setup(bot): await bot.add_cog(SlashCmd_Modal(bot))

misc/dict.py

    DICT = { "a": [ # questions "Q1", "Q2", "Q3", "Q4", "Q5" ], "ax": [ # placeholders "P1", "P2", "P3", "P4", "P5" ] }
  • mt0
    mt1
    mt2
    mt3
    mt4
    mt5
    mt6
    mt7
    
    
    实际发生了什么:
    当我
    启动机器人
    时,控制台打印
  • [<response to q1>, <response to q2>, <response to q3>]

mt8

    mt9
  • mt2(为什么???)
    当我
    使用命令
    时,控制台打印
    mt3
    mt4
  • mt5
  • mt0
    mt1
    mt6
    mt7
    
    
    我之前哪里做错了?为什么控制台在机器人启动时打印这些内容?如何让控制台打印我的回答而不是问题?
    控制台(当我使用命令时)
[<details of q1>, <details of q2>, <details of q3>]


文件:

mt8

mt9

为了更快地沟通,请随时在 Discord 上给我发私信 (@ajgoh)

    

当我启动机器人时,控制台打印 mt2 mt3 mt4 mt5 (为什么???) 所有这些打印都直接在您的班级中,并将在您启动程序时调用。

mt0 mt1 mt6 mt7 [<TextInput label='first question' placeholder=None required=True>, <TextInput label='second question' placeholder='a placeholder' required=True>, <TextInput label='third question' placeholder='another placeholder' required=True>] mt8 mt9
python discord discord.py modal-dialog
1个回答
0
投票
commands/slash_commands_modaltest.py

import discord from discord import app_commands, ui from discord.ext import commands class myModal(ui.Modal, title="test modal"): print("mt2") a1 = ui.TextInput( label="first question" ) print("mt3") a2 = ui.TextInput( label="second question", placeholder="a placeholder" ) print("mt4") a3 = ui.TextInput( label="third question", placeholder="another placeholder", style=discord.TextStyle.paragraph, max_length=1000, required=True ) print("mt5") async def on_submit(self, interaction: discord.Interaction): print("mt6") a = [self.a1, self.a2, self.a3] print("mt7") print(a) print("mt8") await interaction.response.send_message("modal successful") print("mt9") class SlashCmd_Modal(commands.GroupCog, group_name="modal"): def __init__(self, bot): self.bot = bot @app_commands.command(name="test", description="A Discord modal test command.") async def application(self, interaction: discord.Interaction): print("mt0") await interaction.response.send_modal(myModal()) print("mt1") async def setup(bot): await bot.add_cog(SlashCmd_Modal(bot))

及以上内容包含在函数内,因此仅在调用这些函数时才会执行。

关于您的回复,您直接打印您的 TextInputs,您应该打印每个输入的值:

mt0
如果您在使用模态时遇到困难,这里有一个
基本模态的好例子
。它还实现了

mt1

,您可以用它来通过 5 个问题模式解决您的初始问题。

	

© www.soinside.com 2019 - 2024. All rights reserved.