如何在Nextcord中获取消息发送者?踢人命令实现遇阻求助
在Nextcord中实现踢人命令并获取执行者与被踢用户名称
获取执行者信息
在Nextcord的交互命令(如Slash Command)中,不要用interaction.message.author——普通Slash Command是直接从命令栏触发的,不存在对应的message对象,所以这个属性会返回None。你应该直接使用interaction.user来获取执行操作的用户:
interaction.user.name:用户的账号名称interaction.user.display_name:用户在当前服务器的昵称(优先显示)
获取被踢出用户信息
踢人命令需要指定目标用户,在定义命令时添加Member类型的参数即可直接拿到目标用户对象:
- 比如参数
member: nextcord.Member,通过member.name或member.display_name就能获取被踢用户的名称。
完整示例代码
import nextcord from nextcord.ext import commands # 初始化机器人,确保开启所有必要权限 bot = commands.Bot(command_prefix="!", intents=nextcord.Intents.all()) # Slash Command版本的踢人命令 @bot.slash_command(name="kick", description="踢出服务器内指定用户") async def kick_slash(interaction: nextcord.Interaction, member: nextcord.Member, reason: str = "无明确理由"): # 权限检查:执行者是否有踢人权限 if not interaction.user.guild_permissions.kick_members: await interaction.response.send_message("你没有执行踢人操作的权限!", ephemeral=True) return # 权限检查:机器人自身是否有踢人权限 if not interaction.guild.me.guild_permissions.kick_members: await interaction.response.send_message("我没有踢人权限,请先赋予我对应权限!", ephemeral=True) return # 执行踢人操作 await member.kick(reason=reason) # 发送结果通知,展示双方名称 await interaction.response.send_message( f"✅ 已成功踢出用户:**{member.display_name}**\n" f"执行操作的管理员:**{interaction.user.display_name}**\n" f"踢人原因:{reason}" ) # 前缀命令版本(如果习惯用!触发) @bot.command(name="kick") async def kick_prefix(ctx, member: nextcord.Member, reason: str = "无明确理由"): if not ctx.author.guild_permissions.kick_members: await ctx.send("你没有执行踢人操作的权限!") return await member.kick(reason=reason) await ctx.send( f"✅ 已成功踢出用户:**{member.display_name}**\n" f"执行操作的管理员:**{ctx.author.display_name}**\n" f"踢人原因:{reason}" ) bot.run("你的机器人令牌")
补充说明
如果是上下文菜单命令(右键用户触发的命令),interaction.message可能存在,但依然推荐用interaction.user获取执行者,因为它更通用,适配所有交互场景。
内容的提问来源于stack exchange,提问作者Swampy
相关产品推荐
相关产品推荐

