Esempio n. 1
0
    def test_check_ascii(self):
        e = Emojis()
        # 1
        rs = e.check_ascii("f")
        self.assertTrue(rs)

        # 2
        rs = e.check_ascii("😈")
        self.assertFalse(rs)
Esempio n. 2
0
    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, "☺️")
Esempio n. 3
0
    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")
Esempio n. 4
0
    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:"
Esempio n. 5
0
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>'])
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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()
Esempio n. 9
0
    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
Esempio n. 10
0
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