如何将discord.py机器人Kick命令的可选Reason改为必填项?
解决discord.py Kick命令理由必填的问题
要将reason参数改为必填字符串类型,你需要做以下修改:
- 调整参数定义:将原代码中的
reason: Optional[str] = None直接改为reason: str——discord.py的斜杠命令会自动将没有默认值的参数识别为必填项,无需额外配置。 - 移除不必要的导入:如果你的代码里有
from typing import Optional,现在可以删除这一行,因为不再需要Optional类型注解。
修改后的完整代码如下:
import discord import asyncio import datetime from discord import appcommands @bot.tree.command(name="kick", description="Kicks specified user from the server.") async def kick(interaction: discord.Interaction, member: discord.Member, reason: str): if interaction.user.guild_permissions.kick_members: await member.kick(reason=reason) embed = discord.Embed( title="Successfully Kicked.", description=f"{member.mention} has been successfully kicked off the server.\nFor {reason} reason.", color=discord.Color.green(), timestamp=datetime.datetime.utcnow() ) embed.set_footer(text=interaction.user.name, icon_url=interaction.user.avatar.url) await interaction.response.send_message(embed=embed) await asyncio.sleep(10) await interaction.delete_original_response()
额外说明:
- 原代码中
interaction.user.avatar需要改为interaction.user.avatar.url才能正确获取头像的URL,否则可能会触发属性错误。 - 修改后用户使用
/kick命令时,Discord客户端会强制要求填写reason参数,不填写无法完成命令提交。
内容的提问来源于stack exchange,提问作者Hylex
相关产品推荐
相关产品推荐

