from slackclient import SlackClient import os,sys,time,logging,re class slackRequestHandler(object): def __init__(self,token=""): self.token = token self.client = None self.last_ping = 0 self.id = None self.name = None self.selector = None self.callback = None def connect(self): self.slack_client = SlackClient(self.token) try: self.slack_client.rtm_connect() self.login_data = self.slack_client.server.login_data self.id = self.login_data["self"]["id"] self.name = self.login_data["self"]["name"] self.selector = re.compile("^<@"+self.id+">: (.*)") except Exception, e: print "failed to connect" def listen(self,callback): self.callback = callback self.start() def start(self): self.connect() while True: for reply in self.slack_client.rtm_read(): if reply["type"] == "message": sender = self.slack_client.api_call("users.info",user=reply["user"]) #print "%r said" % sender['user']["name"] tmp = re.search(self.selector,reply["text"]) if tmp != None: print "direct message: %s" % tmp self.send_text(tmp.group(1)) # self.input(reply) self.ping() time.sleep(1) def ping(self): now = int(time.time()) if now > self.last_ping + 10: self.slack_client.server.ping() self.last_ping = now #print "ping!" def input(self,data): if "type" in data: print dir(data) def send_text(self,data="blank message",color=(255,0,0),background=(0,0,0)): print ("trying to send",data) msg = { 'text': data.split(), 'type':'text', 'color':color, 'background':(0,0,0) } try: self.callback(msg, self) except: print "err with callback"