#--depends-on ircv3_msgid from src import ModuleManager, utils TAG = utils.irc.MessageTag("msgid", "draft/msgid") CHATHISTORY_BATCH = utils.irc.BatchType("chathistory") EVENTPLAYBACK_CAP = utils.irc.Capability(None, "draft/event-playback", alias="event-playback") HISTORY_BATCH = utils.irc.BatchType("history") @utils.export("cap", EVENTPLAYBACK_CAP) class Module(ModuleManager.BaseModule): @utils.hook("received.batch.end") def batch_end(self, event): if (CHATHISTORY_BATCH.match(event["batch"].type) or HISTORY_BATCH.match(event["batch"].type)): target_name = event["batch"].args[0] if target_name in event["server"].channels: target = event["server"].channels.get(target_name) else: target = event["server"].get_user(target_name) last_msgid = target.get_setting("last-msgid", None) if not last_msgid == None: lines = event["batch"].get_lines() stop_index = -1 for i, line in enumerate(lines): msgid = TAG.get_value(line.tags) if msgid == last_msgid: stop_index = i break if not stop_index == -1: return lines[stop_index+1:]