如何在discord.py中提交Modal后修改用户昵称?
Discord.py Modal提交后修改用户昵称的正确实现
你的代码核心问题是直接引用了TextInput对象本身,而非用户输入的实际文本内容。要获取Modal输入框里的用户输入值,必须访问每个输入框的.value属性。
修正后的完整代码
class RenameModal(ui.Modal, title="Rename"): vorname = ui.TextInput(label="Vorname", placeholder="Mein Vorname lautet...", required=True, style=discord.TextStyle.short) nachname = ui.TextInput(label="Nachname", placeholder="Mein Nachname lautet...", required=True, style=discord.TextStyle.short) spielerid = ui.TextInput(label="ID", placeholder="Meine ID lautet...", required=True, style=discord.TextStyle.short) async def on_submit(self, interaction: discord.Interaction): # 通过 .value 获取用户输入的文本内容 new_nick = f"{self.vorname.value} {self.nachname.value} | {self.spielerid.value}" await interaction.user.edit(nick=new_nick) # 给用户发送操作反馈(仅用户可见) await interaction.response.send_message(f"昵称已更新为: {new_nick}", ephemeral=True) @client.tree.command(name="rename", description="修改你的服务器昵称") async def rename(interaction: discord.Interaction): await interaction.response.send_modal(RenameModal())
重要注意事项
- 输入值获取:所有
ui.TextInput实例的用户输入内容都存在.value属性里,直接调用对象本身会得到类似<discord.ui.TextInput object at 0x...>的无效字符串,这不是你需要的内容。 - 机器人权限:确保机器人在服务器中拥有「修改成员昵称」的权限,否则会触发权限不足的错误。
- 用户权限限制:如果目标用户是服务器管理员,机器人无法修改其昵称;另外,Discord昵称长度上限为32字符,超过长度会导致修改失败。
- 反馈机制:添加
interaction.response.send_message能让用户直观确认操作结果,ephemeral=True设置可让反馈仅提交者可见,避免刷屏。
内容的提问来源于stack exchange,提问作者Icxless
相关产品推荐
相关产品推荐

