Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__author__ = 'nik'
3 changes: 2 additions & 1 deletion slackclient/_channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ def __eq__(self, compare_str):
def __str__(self):
data = ""
for key in self.__dict__.keys():
data += "{} : {}\n".format(key, str(self.__dict__[key])[:40])
if key != "server":
data += "{} : {}\n".format(key, str(self.__dict__[key])[:40])
return data

def __repr__(self):
Expand Down
11 changes: 8 additions & 3 deletions slackclient/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ def rtm_connect(self):
try:
self.server.rtm_connect()
return True
except:
except Exception as e:
print e
return False

def api_call(self, method, **kwargs):
return self.server.api_call(method, kwargs)
return self.server.api_call(method, **kwargs)

def rtm_read(self):
#in the future, this should handle some events internally i.e. channel creation
Expand All @@ -33,7 +34,11 @@ def rtm_read(self):
raise SlackNotConnected

def rtm_send_message(self, channel, message):
return self.server.channels.find(channel).send_message(message)
if channel.startswith("D"):
return self.server.ims.find(channel).send_message(message)
else:
return self.server.channels.find(channel).send_message(message)


class SlackNotConnected(Exception):
pass
26 changes: 26 additions & 0 deletions slackclient/_im.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class Im(object):
def __init__(self, server, user, id):
self.server = server
self.user = user
self.id = id

def __eq__(self, compare_str):
if self.id == compare_str or self.user == compare_str:
return True
else:
return False

def __str__(self):
data = ""
for key in self.__dict__.keys():
if key != "server":
data += "{} : {}\n".format(key, str(self.__dict__[key])[:40])
return data

def __repr__(self):
return self.__str__()

def send_message(self, message):
message_json = {"type": "message", "channel": self.id, "text": message}
self.server.send_to_websocket(message_json)

25 changes: 24 additions & 1 deletion slackclient/_server.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from _slackrequest import SlackRequest
from _channel import Channel
from _util import SearchList
from slackclient.slackclient._im import Im
from slackclient.slackclient._user import User

from websocket import create_connection
import json
Expand All @@ -12,8 +14,11 @@ def __init__(self, token, connect=True):
self.domain = None
self.login_data = None
self.websocket = None

self.users = SearchList()
self.channels = SearchList()
self.ims = SearchList()

self.connected = False
self.pingcounter = 0
self.api_requester = SlackRequest()
Expand Down Expand Up @@ -50,7 +55,8 @@ def parse_slack_login_data(self, login_data):
self.username = self.login_data["self"]["name"]
self.parse_channel_data(login_data["channels"])
self.parse_channel_data(login_data["groups"])
self.parse_channel_data(login_data["ims"])
self.parse_im_data(login_data["ims"])
self.parse_user_data(login_data["users"])
try:
self.websocket = create_connection(self.login_data['url'])
self.websocket.sock.setblocking(0)
Expand All @@ -65,6 +71,23 @@ def parse_channel_data(self, channel_data):
channel["members"] = []
self.attach_channel(channel["name"], channel["id"], channel["members"])

def parse_im_data(self, im_data):
for im in im_data:
self.ims.append(Im(self, im["user"], im["id"]))

def parse_user_data(self, user_data):
for user in user_data:
if user["deleted"]:
continue

if "real_name" not in user:
user["real_name"] = user["name"]

if "tz" not in user:
user["tz"] = None

self.users.append(User(self, user["id"], user["name"], user["real_name"], user["tz"]))

def send_to_websocket(self, data):
"""Send (data) directly to the websocket."""
data = json.dumps(data)
Expand Down
23 changes: 23 additions & 0 deletions slackclient/_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class User(object):
def __init__(self, server, id, name, real_name, tz):
self.tz = tz
self.name = name
self.real_name = real_name
self.server = server
self.id = id

def __eq__(self, compare_str):
if self.id == compare_str:
return True
else:
return False

def __str__(self):
data = ""
for key in self.__dict__.keys():
if key != "server":
data += "{} : {}\n".format(key, str(self.__dict__[key])[:40])
return data

def __repr__(self):
return self.__str__()
2 changes: 1 addition & 1 deletion slackclient/_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def find(self, name):
if child == name:
items.append(child)

if len(items) == 1:
if len(items) > 0:
return items[0]
elif items != []:
return items
Expand Down