import time
from collections import deque
import net.mapserv as mapserv
import badge
from loggers import debuglog
from utils import extends, preloadArray
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_"]
chat_beings_ignored = preloadArray("config/chat_beings_ignored.txt")
chat_wisper_ignored = preloadArray("config/chat_wisper_ignored.txt")
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):
if '*' in chat_beings_ignored:
return
real_name, _ = data.message.split(' : ', 1)
if real_name in chat_beings_ignored:
return
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
if '*' in chat_wisper_ignored:
return
if nick in chat_wisper_ignored:
return
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)