from pseudoclient.cmd_manager import *
import mythreading as threading
-from datetime import datetime
from utils import strip_ascii_irc
from core import anope_major
# 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):
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)
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
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')
import time
from sys_base import *
from core import anope_major
+from datetime import datetime
class Request(object):
def __init__(self, user, channel, action):
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.')