Discord.py如何获取角色创建者信息?无关联函数时的解决办法
解决Discord机器人获取角色创建者的问题
你提到的on_guild_role_create事件确实没有直接返回角色创建者的信息,要实现限制特定用户创建角色的需求,有两种可行的方案:
1. 通过服务器审计日志查询创建者
Discord服务器的审计日志会记录所有角色创建操作,你可以在on_guild_role_create触发后,查询对应服务器的最新角色创建审计日志条目,从中提取创建者信息。
代码示例(以discord.py为例)
@bot.event async def on_guild_role_create(role): # 查询服务器最新的角色创建审计日志,限制返回1条 async for entry in role.guild.audit_logs(action=discord.AuditLogAction.role_create, limit=1): # 确保审计日志条目对应当前创建的角色(避免短时间多角色创建的误判) if entry.target.id == role.id: creator = entry.user # 定义需要限制的用户ID列表 restricted_user_ids = [123456789012345678, 987654321098765432] if creator.id in restricted_user_ids: await role.delete(reason="限制滥用角色创建权限")
注意事项
- 机器人需要拥有**查看审计日志(View Audit Log)**的服务器权限,否则无法查询审计日志。
- 加入
entry.target.id == role.id的判断是为了避免短时间内多个角色创建时,拿到错误的审计日志条目。
2. 直接修改服务器权限(更高效的方案)
如果不需要复杂的动态限制逻辑,最直接的方法是在Discord服务器设置中,直接取消特定用户/角色的**创建角色(Create Roles)**权限。这样这些用户根本无法创建角色,不需要机器人事后删除,效率更高。
内容的提问来源于stack exchange,提问作者Iirus
相关产品推荐
相关产品推荐

