|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
from . import OutputAdapter
|
|
|
|
|
|
|
|
|
|
|
|
class HipChat(OutputAdapter):
|
|
|
|
"""
|
|
|
|
An output adapter that allows a ChatterBot instance to send
|
|
|
|
responses to a HipChat room.
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(self, **kwargs):
|
|
|
|
super(HipChat, self).__init__(**kwargs)
|
|
|
|
|
|
|
|
self.hipchat_host = kwargs.get("hipchat_host")
|
|
|
|
self.hipchat_access_token = kwargs.get("hipchat_access_token")
|
|
|
|
self.hipchat_room = kwargs.get("hipchat_room")
|
|
|
|
|
|
|
|
authorization_header = "Bearer {}".format(self.hipchat_access_token)
|
|
|
|
|
|
|
|
self.headers = {
|
|
|
|
'Authorization': authorization_header,
|
|
|
|
'Content-Type': 'application/json'
|
|
|
|
}
|
|
|
|
|
|
|
|
import requests
|
|
|
|
self.session = requests.Session()
|
|
|
|
self.session.verify = kwargs.get('ssl_verify', True)
|
|
|
|
|
|
|
|
def send_message(self, room_id_or_name, message):
|
|
|
|
"""
|
|
|
|
Send a message to a HipChat room.
|
|
|
|
https://www.hipchat.com/docs/apiv2/method/send_message
|
|
|
|
"""
|
|
|
|
message_url = "{}/v2/room/{}/message".format(
|
|
|
|
self.hipchat_host,
|
|
|
|
room_id_or_name
|
|
|
|
)
|
|
|
|
|
|
|
|
response = self.session.post(
|
|
|
|
message_url,
|
|
|
|
headers=self.headers,
|
|
|
|
data=json.dumps({
|
|
|
|
'message': message
|
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
return response.json()
|
|
|
|
|
|
|
|
def reply_to_message(self):
|
|
|
|
"""
|
|
|
|
The HipChat api supports responding to a given message.
|
|
|
|
This may be a good feature to implement in the future to
|
|
|
|
help with multi-user conversations.
|
|
|
|
https://www.hipchat.com/docs/apiv2/method/reply_to_message
|
|
|
|
"""
|
|
|
|
raise self.AdapterMethodNotImplementedError()
|
|
|
|
|
|
|
|
def process_response(self, statement, session_id=None):
|
|
|
|
data = self.send_message(self.hipchat_room, statement.text)
|
|
|
|
|
|
|
|
# Update the output statement with the message id
|
|
|
|
self.chatbot.storage.update(
|
|
|
|
statement.add_extra_data('hipchat_message_id', data['id'])
|
|
|
|
)
|
|
|
|
|
|
|
|
return statement
|