def roles(self, ctx):
"""
Views detailed information about the roles in this server.
Information is presented in a table-like layout.
Columns:
- Role position
The role's position in the hierarchy. The bottom role is #0.
- Role name
- Role color
- Role ID
- Role properties
- Role members
Role properties:
Role properties are represented as a sequence of characters.
Each character has a separate meaning.
H: This role is hoisted.
M: This role is managed.
@: This role is mentionable by everyone.
D: This role is the default role (@everyone).
A: This role has the "Administrator" permission.
E: This role has the "Mention Everyone" permission.
"""
paginator = commands.Paginator()
sorted_roles = sorted(ctx.guild.roles, key=lambda r: r.position, reverse=True)
longest_role_name = max(map(lambda r: len(r.name), ctx.guild.roles))
# add lines
for role in sorted_roles:
# compile a list of role properties
attrs = {
# role attributes
'H': role.hoist, 'M': role.managed, '@': role.mentionable, 'D': role.is_default(),
# role permissions
'A': role.permissions.administrator, 'E': role.permissions.mention_everyone
}
properties = ''.join(rep for rep, val in attrs.items() if val)
# how many members?
members = utils.commas(len(role.members))
# get color
color = 'default' if role.color == discord.Color.default() else str(role.color)
fmt = (f'{role.position: <2} {role.name: <{longest_role_name}} {color} {role.id: <18} '
f'{properties: <{len(attrs)}} {members: <4}')
paginator.add_line(fmt)
for page in paginator.pages:
await ctx.send(page)
评论列表
文章目录