import time from collections import deque import net.mapserv as mapserv import badge from loggers import debuglog from utils import extends from textutils import preprocess as pp from textutils import (simplify_links, remove_formatting, replace_emotes) pp_actions = (simplify_links, remove_formatting, replace_emotes) sent_whispers = deque() afk_message = '*AFK* I am away from keyboard' afk_ts = 0 chat_bots = ["guild", "_IRC_"] def send_whisper(nick, message): badge.is_afk = False ts = time.time() sent_whispers.append((nick, message, ts)) mapserv.cmsg_chat_whisper(nick, message) def general_chat(message): badge.is_afk = False mapserv.cmsg_chat_message(message) @extends('smsg_whisper_response') def send_whisper_result(data): now = time.time() while True: try: nick, msg, ts = sent_whispers.popleft() except IndexError: return if now - ts < 1.0: break if data.code == 0: m = "[-> {}] {}".format(nick, pp(msg, pp_actions)) debuglog.info(m) else: debuglog.warning("[error] {} is offline.".format(nick)) @extends('smsg_being_chat') def being_chat(data): message = pp(data.message, pp_actions) debuglog.info(message) @extends('smsg_player_chat') def player_chat(data): message = pp(data.message, pp_actions) debuglog.info(message) @extends('smsg_whisper') def got_whisper(data): nick, message = data.nick, data.message message = pp(message, pp_actions) m = "[{} ->] {}".format(nick, message) debuglog.info(m) if badge.is_afk: if nick in chat_bots: return if message.startswith('!'): return now = time.time() global afk_ts if now > afk_ts + 20: afk_ts = now send_whisper(nick, afk_message) badge.is_afk = True @extends('smsg_party_chat') def party_chat(data): nick = mapserv.party_members.get(data.id, str(data.id)) message = pp(data.message, pp_actions) m = "[Party] {} : {}".format(nick, message) debuglog.info(m) @extends('smsg_gm_chat') def gm_chat(data): m = "[GM] {}".format(data.message) debuglog.info(m)