def test_check_ascii(self): e = Emojis() # 1 rs = e.check_ascii("f") self.assertTrue(rs) # 2 rs = e.check_ascii("😈") self.assertFalse(rs)
def test_emoji_word_2_unicode_char(self): e = Emojis() # 1 c = e.emoji_word_2_unicode_char("smile") self.assertEqual(c, "😄") # 2 c = e.emoji_word_2_unicode_char("relaxed") self.assertEqual(c, "☺️")
def test_unicode_char_2_emoji_word(self): e = Emojis() # 1 word = e.unicode_char_2_emoji_word("😂") self.assertEqual(word, "joy") # 2 word = e.unicode_char_2_emoji_word("☺️") self.assertEqual(word, "relaxed")
def test_transfer_sentence_with_plain_word(self): e = Emojis() # 1 origin = "hi😈, what are you doing?😅" transfered = e.transfer_sentence_with_plain_word(origin) expected = "hi:smiling_imp:, what are you doing?:sweat_smile:" self.assertEqual(transfered, expected) # 2 origin = "hello, how are you?☺" transfered = e.transfer_sentence_with_plain_word(origin) expected = "hello, how are you?:relaxed:"
class Plugin(object): def __init__(self, bot): self.bot = bot config = configparser.ConfigParser() config.read(CONF_FILE) self.ignore_users = [] if "ignore_users" in config["bot"]: users = config["bot"]["ignore_users"] self.ignore_users = [u for u in users.split("\n") if len(u.strip()) > 0] # fill the bearychat cache Cache.init() self.bc = Bearychat(self.bot) self.emojis = Emojis() @irc3.event(irc3.rfc.PRIVMSG) def recv_msg(self, mask, event, target, data): data = self.emojis.transfer_sentence_with_plain_word(data) msg = "[%s]: %s" %(mask.nick, data) if mask.nick not in self.ignore_users: Logger.log_msg_transfer("irc => bc: %s" % msg) self.bc.say(msg) @command(permission='view') def echo(self, mask, target, args): """Echo %%echo <message>... """ yield ' '.join(args['<message>'])
def test_check_chinese(self): e = Emojis() # 1 rs = e.check_chinese("中") self.assertTrue(rs) # 2 rs = e.check_chinese("😈") self.assertFalse(rs) # 3 rs = e.check_chinese("☺") self.assertFalse(rs) # 4 rs = e.check_chinese("。") self.assertTrue(rs)
def test_transfer_sentence_with_unicode_char(self): e = Emojis() # 1 origin = "hello, :blush: every one! :stuck_out_tongue_winking_eye:" transfered = e.transfer_sentence_with_unicode_char(origin) expected = "hello, 😊 every one! 😜" self.assertEqual(transfered, expected) # 2 origin = "hello:xpp:::iixx:blush:exxx:blush,very one! :stuck_out_tongue_winking_eye::::xx::" #origin = "hello:xx:opx:blush:every one! :stuck_out_tongue_winking_eye:" transfered = e.transfer_sentence_with_unicode_char(origin) expected = "hello:xpp:::iixx😊exxx:blush,very one! 😜:::xx::" self.assertEqual(transfered, expected) # 3 origin = "hello, how are you!:relaxed:" transfered = e.transfer_sentence_with_unicode_char(origin) expected = "hello, how are you!☺️" self.assertEqual(transfered, expected)
def __init__(self, bot): self.bot = bot config = configparser.ConfigParser() config.read(CONF_FILE) self.ignore_users = [] if "ignore_users" in config["bot"]: users = config["bot"]["ignore_users"] self.ignore_users = [u for u in users.split("\n") if len(u.strip()) > 0] # fill the bearychat cache Cache.init() self.bc = Bearychat(self.bot) self.emojis = Emojis()
def __init__(self, irc_bot=None): self.irc_bot = irc_bot # bc config config_bc = configparser.ConfigParser() config_bc.read(BC_INI) id_filter = config_bc["global"]["id_filter"] self.bc_default_channel = config_bc["global"]["channel_id"] self.msg_enable_pre = config_bc["global"]["msg_enable_pre"] self.id_filter = [i for i in id_filter.split("\n") if len(i.strip()) > 0] # irc info config_irc = configparser.ConfigParser() config_irc.read(IRC_INI) self.irc_channel = "#%s" % config_irc["bot"]["autojoins"] self.emojis = Emojis() self.exit_all = False
class BC_Server: # refreshed by recv any msg connect_live = True def __init__(self, irc_bot=None): self.irc_bot = irc_bot # bc config config_bc = configparser.ConfigParser() config_bc.read(BC_INI) id_filter = config_bc["global"]["id_filter"] self.bc_default_channel = config_bc["global"]["channel_id"] self.msg_enable_pre = config_bc["global"]["msg_enable_pre"] self.id_filter = [i for i in id_filter.split("\n") if len(i.strip()) > 0] # irc info config_irc = configparser.ConfigParser() config_irc.read(IRC_INI) self.irc_channel = "#%s" % config_irc["bot"]["autojoins"] self.emojis = Emojis() self.exit_all = False def send_ping(self, ws): msg_id = 0 while not self.exit_all: try: msg = '{"type":"ping","call_id":%d}' % msg_id Logger.log_bc_ws(">>> %s" % msg) ws.send(msg) msg_id += 1 time.sleep(5) except Exception as exc: Logger.log("[send_ping]catch exception: %s" % str(exc)) break def start_server(self): api = BC_API() api.login() ws_url = api.get_ws_url() ws = create_connection(ws_url) Logger.log("connected to bc server") # send ping thread threading.Thread(target=self.send_ping, args=(ws, )).start() # loop worker self.server_loop(ws) def server_loop(self, ws): while not self.exit_all: result = ws.recv() if len(result): self.connect_live = True data = json.loads(result) Logger.log_bc_ws("<<< %s" % result) self.handle_msg(data) else: Logger.log("recv empty msg, connected: ", ws.connected) if not ws.connected: Logger.log("**=** recv empty msg, ws conn may be kicked by bc server") break def handle_msg(self, data): msg_type = data.get("type") if msg_type == "update_user": Cache.update() elif msg_type == "channel_message": self.handle_channel_msg(data) def handle_channel_msg(self, data): # normal msg doesn't contain subtype => F**K, normal msg contain subtype now. #if data.get("subtype"): # return # filter mismatch channel c_id = data.get("vchannel_id") if c_id != self.bc_default_channel: return sender_id = "" name = "" # get sender if data.get("subtype") == "robot": sender_id = data.get("robot_id") name = Cache.get_robot_true_name(sender_id) else: sender_id = data.get("uid") name = Cache.get_user_en_name(sender_id) # filter sender if sender_id in self.id_filter: Logger.log("sender %s (%s) in the filter list, abort msg" % (name, sender_id)) return msg = data.get("text") # filter msg if msg.startswith(self.msg_enable_pre): msg = msg.split(self.msg_enable_pre, 1)[-1:][0] self.send_irc_msg(name, msg) else: Logger.log("bc msg (%s) was not the standardized format, abort forwarding" % (msg)) def send_irc_msg(self, user, msg): if len(msg) == 0: return c = self.irc_channel msg = self.pre_handle_irc_msg(user, msg) Logger.log_msg_transfer("bc => irc: %s" % msg) self.irc_bot.privmsg(c, msg) def pre_handle_irc_msg(self, user, msg): msg = self.emojis.transfer_sentence_with_unicode_char(msg) msg = "[%s]: %s" %(user, msg) return msg def stop_all(self): self.stop_all = True