merging devel into master #7

Merged
pratyush merged 2 commits from devel into master 2021-08-20 13:58:26 +02:00
5 changed files with 83 additions and 9 deletions

3
.gitignore vendored
View File

@ -1 +1,2 @@
env/
env/
.vscode

View File

@ -1 +0,0 @@
Parses the Server Notices from ErgoIRCd

27
README.rst Normal file
View 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.

View File

@ -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:

View File

@ -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