return None
# @everyone or @here.
- m = re.match(r'^@?(everyone|here)$', text)
+ m = re.match(r'^@?&?(everyone|here)$', text)
if m is not None:
return m.group(1)
user = await client.get_user_info(parsed)
return user
+async def parse_role(text, *, author = None, server = None):
+ text = re.sub(r'^[@&]*', '@&', text)
+ parsed = parse_mention(text, author = author)
+ if parsed is None:
+ return None
+ if parsed in ['everyone', 'here']:
+ if author is not None:
+ if isinstance(author, discord.member.Member):
+ return author.server.default_role
+ m = re.match(r'^&(\d+)$', parsed)
+ if not m:
+ return None
+ id = m.group(1)
+ if server is None:
+ servers = client.servers
+ else:
+ servers = [server]
+ for server in servers:
+ for role in server.roles:
+ if role.id == id:
+ return role
+ log.warning('Parsed role {} is not on any of our servers!'.format(id))
+ return None
+
def format_mention(mention):
if mention in ['everyone', 'here']:
return '@{}'.format(mention)