Added bot.parse_role.
authorCMDR furrycat <elite@furrycat.net>
Sun, 11 Feb 2018 08:49:50 +0000 (08:49 +0000)
committerCMDR furrycat <elite@furrycat.net>
Sun, 11 Feb 2018 09:33:21 +0000 (09:33 +0000)
bot.py

diff --git a/bot.py b/bot.py
index eb66e7b..4a0b368 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -274,7 +274,7 @@ def parse_mention(text, *, author = None):
     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)
 
@@ -372,6 +372,30 @@ async def parse_user(text, *, author = None):
   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)