Example #1
0
    def __init__(self, bot, token, responders, flowdock, logger=None):
        """consumer(responders)

        bot - the bot 
        token - the user token
        responders - a set of responders
        """
        self.responders = responders
        self.bot = bot
        self.token = token
        self.stream_assistant = StreamAssistant(self)
        self.flowdock = flowdock
        if not logger:
            self.logger = logging.getLogger('consumers.flowdock')
        else:
            self.logger = logger
Example #2
0
class FlowDockConsumer(twistedhttpstream.MessageReceiver, Consumer):

    def __init__(self, bot, token, responders, flowdock, logger=None):
        """consumer(responders)

        bot - the bot 
        token - the user token
        responders - a set of responders
        """
        self.responders = responders
        self.bot = bot
        self.token = token
        self.stream_assistant = StreamAssistant(self)
        self.flowdock = flowdock
        if not logger:
            self.logger = logging.getLogger('consumers.flowdock')
        else:
            self.logger = logger

    def connectionMade(self):
        self.logger.info("Connection made to flowdock")
        for id, responder in self.responders:
            self.handle_response(responder.on_start(self), Request('on_start', User(None, None, 0), 'init', 'flowdock'))

    def create_request(self, message):
        if message['event'] == 'comment':
            text = message['content']['text']
        elif message['event'] == 'message':
            text = message['content']
        else:
            return False

        return Request(text, User(None, None, int(message['user'])), message['event'], 'flowdock')

    def messageReceived(self, message):
        request = self.create_request(message)
        
        if not request or request.user.id == 0:
            return

        if request.type == 'message' or request.type == 'comment':
            self.logger.debug("<<< Request: %s" % request.content)

        responses = self.handle_message(request)

        for response in responses:
            self.handle_response(response, request)

    def handle_message(self, request):
        responses = []
        for id, responder in self.responders:
            if not responder.support(request):
                continue

            self.logger.debug("    Found responder: %s" % responder)

            responses.append(self.normalize(responder.generate(request), request))

        return responses

    def handle_response(self, response, request):
        if isinstance(response, StreamResponse):
            self.stream_assistant.add(response, request)
        else:
            self.post(response, request)


    def post(self, response, request):

        response = self.normalize(response, request)

        if response in [False, None]:
            return

        if not response.content:
            return
        
        self.logger.debug(">>> Response: %s" % response.content)

        if len(response.content) > 300:
            flow_response = requests.post("https://api.flowdock.com/v1/messages/chat/%s" % self.token, data= {
                "content": "\t response too long, check the flowdock inbox!",
                "external_user_name": self.bot.name,
                "tags":  response.tags
            })

            if not flow_response.ok:
                print flow_response

            self.flowdock.post(self.bot.email, "Response to %s" % response.command, self.markdown(response.content) , from_name=self.bot.name)    
        else:
            data= {
                "content": self.format(response.content),
                "external_user_name": self.bot.name,
                "tags":  response.tags
            }
            
            flow_response = requests.post("https://api.flowdock.com/v1/messages/chat/%s" % self.token, data=data)

            if not flow_response.ok:
                print flow_response