diff --git a/.gitignore b/.gitignore index e5bb182..e4ae184 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,6 @@ nosetests.xml .pydevproject .idea/ -conf/test.conf -conf/sandbox.conf +conf/*.conf -nohup.out \ No newline at end of file +nohup.out diff --git a/conf/example.conf b/conf/example.conf index a6af66c..fd4a546 100644 --- a/conf/example.conf +++ b/conf/example.conf @@ -5,4 +5,8 @@ rooms = ExampleRoom,SecondRoom [aws] access_key = example -secret_key = example \ No newline at end of file +secret_key = example + +[geckoboard] +api = example +widget = example diff --git a/pancake.py b/pancake.py index 6f5b245..37eca4f 100755 --- a/pancake.py +++ b/pancake.py @@ -22,7 +22,8 @@ bot = library.Bot( conf.general['api_token'], name=conf.general['bot_name'], - aws=conf.aws + aws=conf.aws, + gecko=conf.geckoboard ) bot.joinRooms(conf.general['rooms']) diff --git a/src/bot.py b/src/bot.py index 3656812..1cf4548 100644 --- a/src/bot.py +++ b/src/bot.py @@ -2,6 +2,7 @@ import re import random import inspect +import json from time import time,sleep from ec2_helper import EC2Helper from simple_hipchat import HipChat @@ -18,6 +19,7 @@ class Bot(): EC2_DOWN_CODE = 80 ec2 = None + geckoboard = None rooms = None joined_rooms = {} actions = {} @@ -31,7 +33,7 @@ class Bot(): rooms_users = {} get_users_timeout = 5 * 60 # 5 min - def __init__(self, api_token, name=None, aws=False): + def __init__(self, api_token, name=None, aws=False, gecko=False): self.hipster = HipChat(token=api_token) @@ -44,6 +46,8 @@ def __init__(self, api_token, name=None, aws=False): if aws: self.__awsInit(aws) + self.gecko = gecko + if name: self.name = name @@ -111,6 +115,10 @@ def __setActions(self): 'action': self.__cmdGetLimit, 'help': 'Get current HipChat API limit status' }, + '/board': { + 'action': self.__cmdPostToBoard, + 'help': 'Post message to geckoboard' + }, '/?': { 'action': self.__cmdAsk, 'help': 'Ask me a question' @@ -249,6 +257,27 @@ def __cmdTell(self, room_name, message): message = ' '.join(message_parts[2:]) self.postMessage(room_name, "Hey {}, {}".format(recipient, message)) + def __cmdPostToBoard(self, room_name, message): + message_parts = message.split(' ', 1) + + if not self.gecko: + return self.postMessage(room_name, 'Have no credentials for geckoboard') + + params = { + "api_key": self.gecko["api"], + "data": { "item":[{"text": message_parts[1],"type":0}] } + } + headers = {'Content-type': 'application/json'} + r = requests.post('https://push.geckoboard.com/v1/send/' + self.gecko["widget"], data=json.dumps(params), headers=headers) + + if r.status_code == 200: + response = r.json() + + if response['success']: + return self.postMessage(room_name, 'Message was posted to Geckoboard') + + return self.postMessage(room_name, 'Something went wrong') + def __cmdGetRandomChuckPhrase(self, room_name): message = "Can't connect to Chuck API =(" params = {'limitTo': '[nerdy]'} diff --git a/src/config.py b/src/config.py index d100158..9af541a 100644 --- a/src/config.py +++ b/src/config.py @@ -9,7 +9,8 @@ class Settings(): rules = { 'general': ['api_token', 'rooms', 'bot_name'], - 'aws': ['access_key', 'secret_key'] + 'aws': ['access_key', 'secret_key'], + 'geckoboard': ['api', 'widget'] } default_conf_name = 'example.conf'