def te_chat(work, slot, colour, text): no_echo = [False] echo_lines = [] event_type = None agent = work.terraria.user if slot == 255: match = re.match(r'((?P<sn>\[\S+\])|\*(?P<an>\S+))\s*(?P<m>.*)', text) if match: event_type = 'MESSAGE' if match.group('sn') else 'ACTION' event_name = match.group('sn') or match.group('an') event_text = match.group('m') else: event_type = 'MESSAGE' event_name = work.terraria_protocol.players.get(slot, slot) event_text = text if event_type is not None: reply = bridge.substitute_reply( context = work.terraria.name, local_name = event_name, msg_local = lambda m: terraria_protocol.chat(work, strip_codes(m)), msg_bridge = lambda m: echo_lines.append('<%s> %s' % (agent, m)), cancel_bridge = lambda: operator.setitem(no_echo, 0, True)) yield util.msign(ab_mode, ('BRIDGE', event_type), ab_mode, event_name, work.terraria.name, event_text, reply) if not no_echo[0] and slot != work.terraria_protocol.slot: if slot != 255: text = '<%s> %s' % (name, text) echo_lines.insert(0, text) for line in echo_lines: line = bridge.substitute_text(work.terraria.name, line) yield sign('TERRARIA', work, line)
def notice(bot, nick, user, host, target, msg): if target != bot.nick: return if ID(nick, user, host) != nickserv: return match = re.match(r'STATUS (?P<nick>\S+) (?P<code>\S+)', msg) result = int(match.group('code')) >= 3 if result: passed.add(id) yield msign(mode, 'RESULT', result) bot.unlink('NOTICE', notice)
def reconnect_work(work, version=None, delay=None): return util.msign(ab_mode, 'terraria.reconnect_work', work, version, delay)
def te_terraria(work, msg, **kwds): wname = world_name(work) yield util.msign(ab_mode, 'TERRARIA', ab_mode, work.terraria.name, msg, wname, **kwds)
def h_query_success_failure(work, type, key, val): yield util.msign(ab_mode, ('minecraft.query', work, key), (type, val))