summaryrefslogtreecommitdiff
path: root/chat.py
diff options
context:
space:
mode:
Diffstat (limited to 'chat.py')
-rw-r--r--chat.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/chat.py b/chat.py
new file mode 100644
index 0000000..5fecb51
--- /dev/null
+++ b/chat.py
@@ -0,0 +1,92 @@
+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)