Discord机器人userinfo命令优化求助:移除角色提及并显示权限键
解决Discord机器人userinfo命令的角色提及与权限显示问题
没问题,我来帮你调整这个userinfo命令,搞定不提及所有角色和显示权限键这两个需求。下面是修改后的完整代码,我会逐一拆解关键改动:
from typing import Optional import discord from datetime import datetime @client.command() async def userinfo(ctx, target: Optional[discord.Member]): if ctx.author.guild_permissions.administrator: # 先判断目标用户是否有效且在当前服务器内 if target and target in ctx.guild.members: # 处理角色:排除默认@everyone,只显示角色名称(避免提及) roles = [role.name for role in target.roles if role != ctx.guild.default_role] # 处理权限:提取所有开启的权限键,转成易读格式 permissions = [ perm.replace("_", " ").title() for perm, value in dict(target.guild_permissions).items() if value ] embed = discord.Embed(title="User Information", colour=discord.Color.gold(), timestamp=datetime.utcnow()) embed.set_author(name=target.display_name, icon_url=target.avatar.url) embed.set_thumbnail(url=target.avatar.url) embed.set_footer(text="Mr.KapiBara", icon_url="https://cdn.discordapp.com/attachments/618434755981213716/718861010223497236/kapi-1.png") # 更新字段:替换角色提及为名称,新增权限展示项 fields = [ ("Name", str(target), False), ("ID", target.id, False), ("Status", str(target.status).title(), False), (f"Roles ({len(roles)})", ", ".join(roles) if roles else "None", False), ("Created At", target.created_at.strftime("%d/%m/%Y %H:%M:%S"), False), ("Joined At", target.joined_at.strftime("%d/%m/%Y %H:%M:%S"), False), ("Permissions", ", ".join(permissions) if permissions else "None", False) ] for name, value, inline in fields: embed.add_field(name=name, value=value, inline=inline) await ctx.send(embed=embed) else: await ctx.send("你需要@当前服务器里的某个用户哦!") else: await ctx.send("你没有使用这个命令的权限哦~")
关键改动说明:
角色部分优化:
- 把原来的
role.mention改成role.name,彻底避免@角色带来的打扰 - 新增判断
if role != ctx.guild.default_role,过滤掉默认的@everyone角色,让角色列表更简洁 - 处理了空角色场景:如果用户只有@everyone,会显示"None"而不是空内容
- 把原来的
权限键显示:
- 通过
dict(target.guild_permissions).items()遍历用户的服务器权限集合 - 筛选出值为
True的权限键,并用replace("_", " ").title()把下划线格式的权限名转换成更易读的标题格式(比如administrator变成Administrator) - 在嵌入消息里新增了"Permissions"字段,专门展示用户的有效权限
- 通过
细节修复:
- 修正了拼写错误
soneone为someone - 适配了Discord.py v2.x的API,把
target.avatar_url改成target.avatar.url(如果用的是旧版本可以改回avatar_url) - 优化了目标用户的判断逻辑,避免空值报错
- 修正了拼写错误
这样修改后,你的userinfo命令就完全符合需求啦~
内容的提问来源于stack exchange,提问作者enesd
相关产品推荐
相关产品推荐

