def base_command(self, ctx, *roles: discord.Role):
"""Base command for all opt-ins. With no subcommand, it functions like optin add."""
if not roles:
return await ctx.send('BAKA! You must specify roles!')
settings = ctx.get(GuildOptins, id=ctx.guild.id).one_or_none()
if settings is None or not settings.optin_roles:
return await ctx.send('BAKA! This guild has no optins!')
optin_ids = {optin.id for optin in settings.optin_roles}
optin_roles = {role for role in roles if role.id in optin_ids}
already_have = optin_roles & set(ctx.author.roles)
given = optin_roles - already_have
await ctx.author.add_roles(*given)
responses = []
if given:
responses.append('You have opted into {}.'.format(format.list(role.name for role in given)))
if already_have:
responses.append('BAKA! You have already opted into {}!'.format(format.list(role.name for role in already_have)))
if len(optin_roles) < len(roles):
responses.append('BAKA! {}!'.format(format.list((role.name for role in set(roles) - optin_roles), ' is not an optin', ' are not optins')))
await ctx.send('\n'.join(responses)) # One or more of the above is always true
评论列表
文章目录