Hiss at other bots.
authorCMDR furrycat <elite@furrycat.net>
Mon, 10 Apr 2017 13:25:32 +0000 (14:25 +0100)
committerCMDR furrycat <elite@furrycat.net>
Mon, 10 Apr 2017 13:33:54 +0000 (14:33 +0100)
plugin/greetings/greetings.py

index b7cdd94..af0ec04 100644 (file)
@@ -1,4 +1,5 @@
 import asyncio
+import discord
 import re
 import shlex
 
@@ -40,6 +41,37 @@ class Greetings(DBConnection):
   def on_member_join(self, member):
     result = yield from self.maybe_greet(member)
 
+  @asyncio.coroutine
+  def on_member_update(self, before, after):
+    if before.status == after.status:
+      return
+
+    if not after.bot:
+      return
+
+    log.debug('{}#{} status was {} now {}.'.format(after.name, after.discriminator, before.status, after.status))
+
+    if discord.Status.offline not in [before.status, after.status]:
+      return
+
+    try:
+      servers = []
+      for server in client.servers:
+        if server.get_member(after.id):
+          servers.append(server.id)
+      if not len(servers):
+        log.debug("{}#{} isn't on any shared servers!".format(after.name, after.discriminator))
+        return
+      for channel_id in [greeting['channel_id'] for greeting in list(self.get_greetings(client))]:
+        channel = client.get_channel(channel_id)
+        if not bot.shared_with(after, channel):
+          log.debug("{}#{} isn't in channel {} on server {}".format(after.name, after.discriminator, channel.name, server.name))
+          continue
+        yield from bot.maybe_say(channel, 'hiss! {}'.format(after.mention))
+        return
+    except:
+      log.exception('on_member_update')
+
   def valid_commands(self):
     return ['greet', 'greeting', 'greetings']