コード例 #1
0
class ZulipBot(object):
    def __init__(self):
        self.client = zulip.Client(site="https://rhtp.zulipchat.com/api/")
        self.subscribe_all()
        self.chatbot = ChatBot(
            "Test", trainer='chatterbot.trainers.ChatterBotCorpusTrainer')
        #self.chatbot.train("chatterbot.corpus.english")
        #self.chatbot.train("chatterbot.corpus.english.greetings")
        #self.chatbot.train("chatterbot.corpus.english.conversations")
        self.currency = curr()
        #self.lat_lon = latlon()
        self.language = Lang()
        self.restaurants = Rest()
        self.bus_stations = Bus()
        self.tourist_places = Tour()
        self.jobs = Job()

        self.directions = Direct()
        self.atm = Atm()
        self.subkeys = [
            "currency", "language", "restaurant", "bus", "tourist", "job",
            "direction", "atm"
        ]
        #mesg = dhelp()
        #self.client.send_message({
        #	"type": "stream",
        #	"content" : self.mesg
        #	})

    def urls(self, link):
        urls = re.findall(
            'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+',
            link)
        return urls

    def subscribe_all(self):
        json = self.client.get_streams()["streams"]
        streams = [{"name": stream["name"]} for stream in json]
        self.client.add_subscriptions(streams)

    def help(self):
        message = "**Welcome to I-BOT**\nIBOT has various subfields\nType `ibot help <subfield>` to get help for specific subfield.\n"
        message += "\n**Subfields**\n"
        message += "`currency` - Get currency conversion rate\n"
        message += "`atm` - Get addresses of nearby ATM(s)\n"
        message += "`restaurant` - Get addresses of nearby restaurant(s)\n"
        message += "`bus` - Get addresses of nearest bus stand(s)\n"
        message += "`tourist` - Get addresses of nearby tourist place(s)\n"
        message += "`job` - Get a list of jobs available nearby\n"
        message += "`direction` - Get directions from one place to other\n"
        message += "`language` - Translate your English sentences to other languages\n"
        message += "\nIf you're bored Talk to IBOT, it will supercharge you"
        return message

    def help_sub(self, key):
        key = key.lower()
        message = "**Usage**\n"
        if key == "currency":
            message += "`ibot currency from <currency code - 1> to <currency code - 2>` - To get currency conversion rate.\n"
        elif key == "atm":
            message += "`ibot atm <nearby location>` - To get addresses of nearby ATM(s).\n"
        elif key == "restaurant":
            message += "`ibot restaurant <nearby location>` - To get addresses of nearby restaurant(s).\n"
        elif key == "bus":
            message += "`ibot bus <nearby location>` - To get addresses of nearby bus stand(s).\n"
        elif key == "tourist":
            message += "`ibot tourist <nearby location>` - To get addresses of nearby tourist place(s).\n"
        elif key == "job":
            message += "`ibot job <nearby location>` - To get a list of jobs available nearby.\n"
        elif key == "direction":
            message += "`ibot direction from <source> to <destination>` - To get directions from one place to another.\n"
        elif key == "language":
            message += "`ibot language to <language name>` - To translate your English sentences to other languages.\n"
        else:
            message = self.help()
            message += "\n{} is not a valid subfield\n".format(key)
        return message

    def process(self, msg):
        content = msg["content"].split()
        sender_email = msg["sender_email"]
        ttype = msg["type"]
        stream_name = msg['display_recipient']
        stream_topic = msg['subject']

        print(content)
        l = len(content)
        #		temstr = spell(content[1].lower())
        #		content[1] = temstr
        #		print(content[1])
        if sender_email == BOT_MAIL:
            return

        print("doing")

        if content[0].lower() == "ibot" or content[0] == "@**IBOT**":
            if content[1].lower() == "currency":
                message = self.currency.curfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "latilongi":
                message = self.lat_lon.latlonfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "language":
                message = self.language.langconvert(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "restaurant":
                message = self.restaurants.restfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "bus":
                message = self.bus_stations.busfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "tourist":
                message = self.tourist_places.tourfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "job":
                message = self.jobs.jobfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "atm":
                message = self.atm.atmfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "direction":
                message = self.directions.directfun(content)
                #print(message)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "help" and len(content) == 2:
                message = self.help()
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })
            if content[1].lower() == "help" and len(content) > 2:
                subkey = content[2]
                message = self.help_sub(subkey)
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })

            if content[1] not in self.subkeys:
                ip = content[1:]
                ip = " ".join(ip)
                message = self.chatbot.get_response(ip).text
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": message
                })

        if self.urls(" ".join(content)):
            summary = self.w.wiki(" ".join(content))
            if summary:
                self.client.send_message({
                    "type": "stream",
                    "subject": msg["subject"],
                    "to": msg["display_recipient"],
                    "content": summary
                })
        elif "ibot" in content and content[0] != "ibot":
            self.client.send_message({
                "type":
                "stream",
                "subject":
                msg["subject"],
                "to":
                msg["display_recipient"],
                "content":
                "Alas! Finally you called me :blush:"
            })
        else:
            return