merging devel into master #7
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
||||
env/
|
||||
env/
|
||||
.vscode
|
27
README.rst
Normal file
27
README.rst
Normal file
@ -0,0 +1,27 @@
|
||||
SnoParser
|
||||
=========
|
||||
|
||||
Parses the Server Notices from ErgoIRCd.
|
||||
|
||||
|
||||
Assumptions
|
||||
-----------
|
||||
|
||||
- ``force-nick-equals-account=True``
|
||||
- The Bot needs to be oper and have all the snomasks.
|
||||
|
||||
Current Coverage
|
||||
----------------
|
||||
|
||||
1. CONNECT
|
||||
2. XLINE
|
||||
3. NICK
|
||||
4. KILL
|
||||
5. ACCOUNT (reg only)
|
||||
|
||||
Configurations
|
||||
--------------
|
||||
|
||||
1. Formatting for 'AutoVhost' post Registration (TODO: Disable)
|
||||
2. Configure the '#channel' to send the SNO lines (disabled by default) (TODO: Add Exceptions)
|
||||
3. Use ZWSP to toggle nickhighlights when in channel.
|
@ -52,5 +52,13 @@ SnoParser = conf.registerPlugin('SnoParser')
|
||||
# conf.registerGlobalValue(SnoParser, 'someConfigVariableName',
|
||||
# registry.Boolean(False, _("""Help for someConfigVariableName.""")))
|
||||
|
||||
conf.registerGlobalValue(SnoParser, 'targetChannel',
|
||||
registry.String(None, ("""Sends reformatted snolines to the <channel>""")))
|
||||
|
||||
conf.registerGlobalValue(SnoParser, 'AutoVhost',
|
||||
registry.String('libcasa/user/', ("""Configure the vhost eg. libcasa/user/$account""")))
|
||||
|
||||
conf.registerGlobalValue(SnoParser, 'preventHighlight',
|
||||
registry.Boolean(True, ("""Toggles in channel highlights with ZWSP""")))
|
||||
|
||||
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
||||
|
53
plugin.py
53
plugin.py
@ -122,18 +122,57 @@ class SnoParser(callbacks.Plugin):
|
||||
quitregex = "^-QUIT- (.+) exited the network$"
|
||||
couple = re.match(quitregex, text)
|
||||
nick = couple.group(1)
|
||||
DictFromSnotice = {'notice': 'quit', 'nick': nick}
|
||||
repl = f"\x02\x1FNOTICE: quit nick: {nick} has exited the network"
|
||||
self._sendSnotice(irc, msg, repl)
|
||||
# -ACCOUNT- Client [<redacted-hostmask>] registered account [<redacted>] from IP <redacted>
|
||||
# -ACCOUNT- Operator [<redacted>] registered account [<redacted>] with SAREGISTER
|
||||
# if 'ACCOUNT' in text and 'logged into account' in text:
|
||||
# accregex = "^-ACCOUNT- "
|
||||
|
||||
if 'ACCOUNT' in text and 'registered account' in text:
|
||||
accregex = "^-ACCOUNT- Client \[(.*)\] registered account \[(.*)\] from IP (.*)$"
|
||||
couple = re.match(accregex, text)
|
||||
hostmask = couple.group(1)
|
||||
account = couple.group(2)
|
||||
ip = couple.group(3)
|
||||
DictFromSnotice = {'notice': 'accreg', 'hostmask': hostmask, 'account': account, 'ip': ip}
|
||||
repl = f"\x02\x1FNOTICE: accreg -> [{account}] was registered by hostmask [{hostmask}] from IP {ip}"
|
||||
|
||||
# Trigger HS SET
|
||||
self._setvhost(irc, msg, account)
|
||||
|
||||
self._sendSnotice(irc, msg, repl)
|
||||
if 'ACCOUNT' in text and 'registered account' in text and 'SAREGISTER' in text:
|
||||
accregex = "^-ACCOUNT- Operator \[(.*)\] registered account \[(.*)\] with SAREGISTER$"
|
||||
couple = re.match(accregex, text)
|
||||
oper = couple.group(1)
|
||||
account = couple.group(2)
|
||||
DictFromSnotice = {'notice': 'sareg', 'oper': oper, 'account': account}
|
||||
repl = f"\x02\x1FNOTICE: sareg -> [{account}] was registered by operator [{oper}]"
|
||||
|
||||
self._setvhost(irc, msg, account)
|
||||
self._sendSnotice(irc, msg, repl)
|
||||
|
||||
|
||||
# Post Registration
|
||||
|
||||
def _setvhost(self, irc, msg, account):
|
||||
arg = ['SET']
|
||||
arg.append(account)
|
||||
vhost = self.registryValue('AutoVhost')
|
||||
arg.append(f'{vhost}{account}')
|
||||
irc.sendMsg(msg=ircmsgs.IrcMsg(command='HS',
|
||||
args=arg))
|
||||
|
||||
|
||||
# Send formatted SNO to channel
|
||||
|
||||
def _sendSnotice(self, irc, msg, repl):
|
||||
irc.queueMsg(msg=ircmsgs.IrcMsg(command='PRIVMSG',
|
||||
args=('#snotices', repl)))
|
||||
try:
|
||||
channel = self.registryValue('targetChannel')
|
||||
if channel[0] == '#':
|
||||
irc.queueMsg(msg=ircmsgs.IrcMsg(command='NOTICE',
|
||||
args=(channel, repl)))
|
||||
# what sort of exception does one raise
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
Class = SnoParser
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user