def assign_roles(self, autorole_type: str, member: Member):
async with self.bot.pgpool.acquire() as pg:
# fetch autoroles for that user
record = await pg.fetchrow('SELECT * FROM autoroles WHERE guild_id = $1 AND type = $2', member.guild.id,
autorole_type)
if not record:
return []
# get the role ids we need
role_ids = record['roles']
# collect roles to add
roles_to_add = [discord.utils.get(member.guild.roles, id=role_id) for role_id in role_ids]
# filter out dead roles
roles_to_add = list(filter(lambda r: r is not None, roles_to_add))
if not roles_to_add:
# no roles to add
return
log.debug('Adding {} roles to {}.'.format(len(roles_to_add), member))
try:
# add roles
await member.add_roles(*roles_to_add)
except discord.Forbidden:
log.warning('Failed to autorole %s. Forbidden!', member)
except discord.NotFound:
log.warning('Failed to autorole %s, not found?', member)
else:
return roles_to_add
评论列表
文章目录