1
0
Fork 0
This commit is contained in:
nemunaire 2017-07-14 12:20:18 +02:00
parent 4e8504bd1d
commit d84bf36ca0
1 changed files with 50 additions and 13 deletions

View File

@ -18,6 +18,13 @@ from nemubot.hooks import hook
from more import Response
# LOADING #############################################################
def load(context):
for wn in context.data.getNodes("watched_newsgroup"):
watch(**wn)
# MODULE CORE #########################################################
def list_groups(group_pattern="*", **server):
@ -64,22 +71,50 @@ def format_article(art, **response_args):
title=title.format(adler32(art["Newsgroups"].encode()) & 0xf, adler32(art["X-FromEmail"].encode()) & 0xf, **{h: decode_header(i) for h,i in art.items()}),
**response_args)
def watch(to_server, to_channel, group="*", **server):
def newevt(arg):
context.add_event(ModuleEvent(call=fini, call_data=arg, interval=42))
def fini(cnow):
newevt(datetime.now())
n = 0
for art in whatsnew(cnow, group, **server):
n += 1
if n > 10:
continue
context.send_response(to_server, format_article(art, channel=to_channel))
watches = dict()
def _indexServer(**kwargs):
return "{user}:{password}@{host}:{port}".format(**kwargs)
def _newevt(*args):
context.add_event(ModuleEvent(call=_fini, call_data=args, interval=42))
def _fini(lastcheck, server):
_newevt(datetime.now(), server)
n = 0
for art in whatsnew(lastcheck, group, **server):
n += 1
if n > 10:
context.send_response(to_server, Response("... and %s others news" % (n - 10), channel=to_channel))
continue
context.send_response(to_server, format_article(art, channel=to_channel))
if n > 10:
context.send_response(to_server, Response("... and %s others news" % (n - 10), channel=to_channel))
newevt(datetime.now())
def watch(to_server, to_channel, group="*", lastcheck=None, **server):
idsrv = _indexServer(**server)
if lastcheck is None:
lastcheck = datetime.now()
if idsrv not in watches:
wnnode = ModuleState("watched_newsgroup")
wnnode.setIndex("group")
wnnode["id"] = idsrv
wnnode.update(server)
context.data.addChild(wnnode)
_newevt(lastcheck, server)
else:
wnnode = context.data.index[idsrv]
if group not in wnnode:
ngnode = ModuleState("notify_group")
ngnode["group"] = group
wnnode.addChild(ngnode)
else:
ngnode = wnnode.index[group]
# Ensure this watch is not already registered
watches[idsrv][group].append((to_server, to_channel))
# MODULE INTERFACE ####################################################
@ -167,6 +202,8 @@ def cmd_watch(msg):
if not msg.frm_owner:
raise IMException("sorry, this command is currently limited to the owner")
wnnode = ModuleState("watched_newsgroup")
context.data.addChild(wnnode)
watch(msg.server, msg.channel, msg.args[0] if len(msg.args) > 0 else "*", **msg.kwargs)
return Response("Ok ok, I watch this newsgroup!", channel=msg.channel)