WIP
This commit is contained in:
parent
4e8504bd1d
commit
d84bf36ca0
@ -18,6 +18,13 @@ from nemubot.hooks import hook
|
|||||||
from more import Response
|
from more import Response
|
||||||
|
|
||||||
|
|
||||||
|
# LOADING #############################################################
|
||||||
|
|
||||||
|
def load(context):
|
||||||
|
for wn in context.data.getNodes("watched_newsgroup"):
|
||||||
|
watch(**wn)
|
||||||
|
|
||||||
|
|
||||||
# MODULE CORE #########################################################
|
# MODULE CORE #########################################################
|
||||||
|
|
||||||
def list_groups(group_pattern="*", **server):
|
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()}),
|
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)
|
**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):
|
watches = dict()
|
||||||
newevt(datetime.now())
|
|
||||||
n = 0
|
def _indexServer(**kwargs):
|
||||||
for art in whatsnew(cnow, group, **server):
|
return "{user}:{password}@{host}:{port}".format(**kwargs)
|
||||||
n += 1
|
|
||||||
if n > 10:
|
def _newevt(*args):
|
||||||
continue
|
context.add_event(ModuleEvent(call=_fini, call_data=args, interval=42))
|
||||||
context.send_response(to_server, format_article(art, channel=to_channel))
|
|
||||||
|
def _fini(lastcheck, server):
|
||||||
|
_newevt(datetime.now(), server)
|
||||||
|
n = 0
|
||||||
|
for art in whatsnew(lastcheck, group, **server):
|
||||||
|
n += 1
|
||||||
if n > 10:
|
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 ####################################################
|
# MODULE INTERFACE ####################################################
|
||||||
@ -167,6 +202,8 @@ def cmd_watch(msg):
|
|||||||
if not msg.frm_owner:
|
if not msg.frm_owner:
|
||||||
raise IMException("sorry, this command is currently limited to the 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)
|
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)
|
return Response("Ok ok, I watch this newsgroup!", channel=msg.channel)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user