Added get_member_by_name().
authorCMDR furrycat <elite@furrycat.net>
Fri, 31 Mar 2017 09:31:19 +0000 (10:31 +0100)
committerCMDR furrycat <elite@furrycat.net>
Fri, 31 Mar 2017 09:31:19 +0000 (10:31 +0100)
bot.py
plugin/developer/developer.py

diff --git a/bot.py b/bot.py
index d1f0faa..99dbc16 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -38,6 +38,31 @@ def is_admin(user, server = None):
   log.info('User {} {} an administrator{}'.format(user.name, 'is' if ret else 'is not', ' on server {}'.format(server.name) if server is not None else ''))
   return ret
 
+def is_member(member, name, author = None):
+  if author is not None:
+    if not member.server.get_member(author.id):
+      return False
+  parts = name.split('#')
+  member_name = parts[0].lower()
+  if len(parts) > 1:
+    discriminator = parts[1]
+  else:
+    discriminator = None
+  if member.name.lower() != member_name:
+    if member.nick is None:
+      return False
+    if member.nick.lower() != member_name:
+      return False
+  if discriminator is not None and member.discriminator != discriminator:
+    return False
+  return True
+
+def get_member_by_name(name, author = None):
+  for member in client.get_all_members():
+    if is_member(member, name, author):
+      return member
+  return None
+
 def get(key):
   if key in variables:
     return variables[key].value
@@ -289,20 +314,8 @@ def parse_mention(text, *, author = None):
             log.warning("User {} isn't on role{} server {}!".format(author, role.name, server.name))
     if m.group(1) != '&':
       log.debug('Member {}.'.format(name))
-      parts = name.split('#')
-      member_name = parts[0].lower()
-      if len(parts) > 1:
-        discriminator = parts[1]
-      else:
-        discriminator = None
-      for member in client.get_all_members():
-        if member.name.lower() != member_name:
-          if member.nick is None:
-            continue
-          if member.nick.lower() != member_name:
-            continue
-        if discriminator is not None and member.discriminator != discriminator:
-          continue
+      member = get_member_by_name(name, author)
+      if member is not None:
         log.info('Parsed {} as {}#{} on {}'.format(name, member.name, member.discriminator, server.name))
         return member.id
     log.warning("Can't find role or member with name {}!".format(name))
index 233ebe7..009dfa9 100644 (file)
@@ -194,14 +194,10 @@ class Developer(object):
             results.append(member)
             break
       else:
-        for member in client.get_all_members():
-          if target:
-            parts = target.lower().split('#')
-            if member.name.lower() != parts[0]:
-              continue
-            if len(parts) > 1 and member.discriminator != parts[1]:
-              continue
-          results.append(member)
+        if target:
+          member = bot.get_member_by_name(target)
+          if member is not None:
+            results.append(member)
     if do & Identify.role.value:
       if role_id:
         for server in client.servers: