Set new members to unassigned group.
authorCMDR furrycat <elite@furrycat.net>
Mon, 19 Sep 2016 21:06:16 +0000 (22:06 +0100)
committerCMDR furrycat <elite@furrycat.net>
Tue, 20 Sep 2016 11:05:47 +0000 (12:05 +0100)
bot.py

diff --git a/bot.py b/bot.py
index bd70c38..ac62be5 100755 (executable)
--- a/bot.py
+++ b/bot.py
@@ -112,6 +112,34 @@ def do_fork(message, command, raw):
   p.expect(pexpect.EOF)
   yield from say_expect(message, p.before)
 
+@asyncio.coroutine
+def set_role(member, role_name = 'Unassigned', minimum = 1):
+  if int(member.id) in admins:
+    return
+
+  role = None
+  for server_role in member.server.roles:
+    if server_role.name != role_name:
+      continue
+    role = server_role
+    break
+  if role is None:
+    log.warning("Can't find {} role to assign to {}".format(role_name, member.name))
+    return
+
+  if minimum is not None and len(member.roles) > minimum:
+    return
+
+  log.info('Adding {} role to {}'.format(role.name, member.name))
+  try:
+    yield from client.add_roles(member, role)
+  except discord.errors.Forbidden:
+    log.warning('Forbidden to add {} role to {}'.format(role.name, member.name))
+
+@asyncio.coroutine
+def set_unassigned(member):
+  yield from set_role(member, 'Unassigned')
+
 p = pexpect.spawnu('./edi.py')
 wait_for_prompt(p)
 
@@ -152,6 +180,8 @@ def process_module(message, command, raw):
 def on_ready():
   print('Logged in as {}#{}'.format(client.user.name, client.user.id))
   print('Admins are: {}'.format(admins))
+  for member in client.get_all_members():
+    yield from set_unassigned(member)
 
 @client.event
 @asyncio.coroutine
@@ -169,4 +199,9 @@ def on_message(message):
   command = m.group(1)
   yield from process_module(message, command, raw)
 
+@client.event
+@asyncio.coroutine
+def on_member_join(member):
+  yield from set_unassigned(member)
+
 client.run(token)