]> jfr.im git - irc/rizon/acid.git/commitdiff
Allow inviteable clients to be invited (eq. to request) and kicked (eq. to remove)
authorMilos <redacted>
Mon, 21 Sep 2015 18:36:11 +0000 (20:36 +0200)
committerAdam <redacted>
Fri, 25 Sep 2015 20:07:38 +0000 (16:07 -0400)
(cherry picked from commit a7e9a742052dcd83aef34eb69453fa23138382d2)

pyva/pyva/src/main/python/pseudoclient/inviteable.py
pyva/pyva/src/main/python/pseudoclient/sys_auth.py

index b0c17ffe072d4813191da90288eec25a3a4780ad..d097cb566b2e9a8d561fdc301b94dccd3a1c4e66 100644 (file)
@@ -7,7 +7,6 @@
 
 from pseudoclient.cmd_manager import *
 import mythreading as threading
-from datetime import datetime
 from utils import strip_ascii_irc
 from core import anope_major
 
@@ -18,22 +17,7 @@ import pyva_net_rizon_acid_core_Channel as Channel
 # this is terrible 
 
 def private_channel_request(self, manager, opts, arg, channel, sender, userinfo):
-       if self.channels.is_valid(arg):
-               self.notice(channel, "I'm already in @b%s@b." % arg)
-       elif self.channels.is_banned(arg):
-               chan = self.channels[arg]
-               self.elog.request('Request for banned channel @b%s@b from @b%s@b.' % (arg, sender))
-               message = 'Request failed, channel @b%s@b was banned by @b%s@b.' % (arg, chan.ban_source)
-
-               if chan.ban_reason != None:
-                       message += ' Reason: @b%s@b.' % chan.ban_reason
-
-               if chan.ban_expiry != None:
-                       message += ' Expires: @b%s@b.' % datetime.fromtimestamp(chan.ban_expiry)
-
-               self.notice(channel, message)
-#              self.notice(channel, 'Please email @c3????@rizon.net@o to appeal.')
-       else:
+       if self.auth.is_channel_eligible(arg, sender):
                self.auth.request(sender, arg, 'request')
 
 def private_channel_remove(self, manager, opts, arg, channel, sender, userinfo):
@@ -118,14 +102,6 @@ class InviteablePseudoclient(object):
                self.elog.chanserv('%s' % msg)
                sp = msg.split(' ')
 
-               if userinfo == None:
-                       if 'tried to kick you from' in msg:
-                               nick = strip_ascii_irc(sp[1])
-                               channel = strip_ascii_irc(sp[7])
-                               self.notice(nick, 'To remove this bot (must be channel founder): @b/msg %s remove %s@b' % (self.nick, channel))
-
-                       return
-
                if anope_major == 2 and msg == 'Password authentication required for that command.':
                        self.elog.error('%s is not authed with services (maybe a wrong NickServ password was configured?).' % target)
 
@@ -154,6 +130,20 @@ class InviteablePseudoclient(object):
                else:
                        self.auth.reject_not_founder(nick, channel)
 
+       def onServerNotice(self, source, target, message):
+               if not self.initialized:
+                       return
+
+               me = User.findUser(self.nick)
+               user = User.findUser(target)
+
+               if me == user and 'tried to kick you from' in message.strip():
+                       sp = message.strip().split(' ')
+                       nick = strip_ascii_irc(sp[1])
+                       channel = strip_ascii_irc(sp[7])
+                       #self.notice(nick, 'To remove this bot (must be channel founder): @b/msg %s remove %s@b' % (self.nick, channel))
+                       self.auth.request(nick, channel, 'remove')
+
        def onPrivmsg(self, source, target, message):
                if not self.initialized:
                        return False
@@ -191,3 +181,14 @@ class InviteablePseudoclient(object):
                else:
                        # forward anyway
                        return True
+
+       def onInvite(self, inviter, invitee, channel):
+               if not self.initialized:
+                       return False
+
+               me = User.findUser(self.nick)
+               if me != invitee:
+                       return
+
+               if self.auth.is_channel_eligible(channel.getName(), inviter.getNick()):
+                       self.auth.request(inviter.getNick(), channel.getName(), 'request')
index bf1ba64f072ed5736fdba83d522d9da91bfcef67..4bc4057ff33556c15d865ade9b524b255bca8d18 100644 (file)
@@ -1,6 +1,7 @@
 import time
 from sys_base import *
 from core import anope_major
+from datetime import datetime
 
 class Request(object):
        def __init__(self, user, channel, action):
@@ -14,6 +15,25 @@ class AuthManager(Subsystem):
                Subsystem.__init__(self, module, module.options, 'auth')
                self.requests = {}
 
+       def is_channel_eligible(self, channel, sender):
+               if self.module.channels.is_valid(channel):
+                       self.module.notice(sender, "I'm already in @b%s@b." % channel)
+               elif self.module.channels.is_banned(channel):
+                       chan = self.module.channels[channel]
+                       self.module.elog.request('Request for banned channel @b%s@b from @b%s@b.' % (channel, sender))
+                       message = 'Request failed, channel @b%s@b was banned by @b%s@b.' % (channel, chan.ban_source)
+
+                       if chan.ban_reason != None:
+                               message += ' Reason: @b%s@b.' % chan.ban_reason
+
+                       if chan.ban_expiry != None:
+                               message += ' Expires: @b%s@b.' % datetime.fromtimestamp(chan.ban_expiry)
+
+                       self.module.notice(sender, message)
+               else:
+                       return True
+               return False
+
        def request(self, user, channel, action):
                if user in self.requests:
                        self.module.notice(user, 'Sorry, you already have a pending request. Please retry later.')