2014-10-27 16:29:04 -06:00
|
|
|
# -*- coding: utf-8 -*-
|
2015-04-20 17:49:07 -05:00
|
|
|
import config
|
|
|
|
from requests.auth import HTTPProxyAuth
|
2014-11-12 20:41:29 -06:00
|
|
|
from twitter import utils
|
2014-10-27 16:29:04 -06:00
|
|
|
from twython import TwythonStreamer
|
2014-11-12 20:41:29 -06:00
|
|
|
from pubsub import pub
|
2014-10-27 16:29:04 -06:00
|
|
|
import logging as original_logger
|
|
|
|
log = original_logger.getLogger("MainStream")
|
|
|
|
|
|
|
|
class streamer(TwythonStreamer):
|
2015-04-20 17:49:07 -05:00
|
|
|
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret, sessionObject, *a, **kw):
|
|
|
|
args = None
|
|
|
|
if config.app["proxy"]["server"] != "" and config.app["proxy"]["port"] != "":
|
|
|
|
args = {"proxies": {"http": "http://{0}:{1}".format(config.app["proxy"]["server"], config.app["proxy"]["port"]),
|
|
|
|
"https": "https://{0}:{1}".format(config.app["proxy"]["server"], config.app["proxy"]["port"])}}
|
|
|
|
if config.app["proxy"]["user"] != "" and config.app["proxy"]["password"] != "":
|
|
|
|
auth = HTTPProxyAuth(config.app["proxy"]["user"], config.app["proxy"]["password"])
|
|
|
|
args["auth"] = auth
|
|
|
|
super(streamer, self).__init__(app_key, app_secret, oauth_token, oauth_token_secret, client_args=args, *a, **kw)
|
2014-11-12 20:41:29 -06:00
|
|
|
self.session = sessionObject
|
|
|
|
self.muted_users = self.session.db["muted_users"]
|
2014-10-27 16:29:04 -06:00
|
|
|
# self.blocked_users = []
|
|
|
|
|
2015-01-18 17:19:39 -06:00
|
|
|
def on_timeout(self, *args, **kwargs):
|
|
|
|
log.debug("Twitter timeout Error")
|
|
|
|
pub.sendMessage("stream-error")
|
|
|
|
|
2014-10-27 16:29:04 -06:00
|
|
|
def on_error(self, status_code, data):
|
|
|
|
log.debug("Error %s: %s" % (status_code, data))
|
|
|
|
|
2014-11-12 20:41:29 -06:00
|
|
|
def get_user(self):
|
|
|
|
return self.session.db["user_name"]
|
|
|
|
|
|
|
|
def put_data(self, place, data):
|
|
|
|
if self.session.db.has_key(place):
|
2015-09-23 10:01:00 -05:00
|
|
|
if utils.find_item(data["id"], self.session.db[place]) != None:
|
|
|
|
log.error("duplicated tweet. Ignoring it...")
|
|
|
|
return
|
2015-09-29 08:38:05 -05:00
|
|
|
data = self.session.check_quoted_status(data)
|
2014-11-12 20:41:29 -06:00
|
|
|
if self.session.settings["general"]["reverse_timelines"] == False:
|
|
|
|
self.session.db[place].append(data)
|
|
|
|
else:
|
|
|
|
self.session.db[place].insert(0, data)
|
2015-05-12 19:11:24 -04:00
|
|
|
utils.is_audio(data)
|
2014-10-27 16:29:04 -06:00
|
|
|
def block_user(self, data):
|
|
|
|
id = data["target"]["id"]
|
|
|
|
if id in self.friends:
|
|
|
|
self.friends.remove(id)
|
2015-05-07 09:16:41 -05:00
|
|
|
if "blocks" in self.session.settings["general"]["buffer_order"]:
|
2014-11-12 20:41:29 -06:00
|
|
|
self.session.db["blocked"]["items"].append(data["target"])
|
|
|
|
pub.sendMessage("blocked-user", data=data["target"], user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
|
|
|
def unblock(self, data):
|
2015-05-07 09:16:41 -05:00
|
|
|
if "blocks" in self.session.settings["general"]["buffer_order"] == True:
|
2014-11-12 20:41:29 -06:00
|
|
|
item = utils.find_item(data["target"]["id"], self.session.db["blocked"]["items"])
|
|
|
|
self.session.db["blocked"]["items"].pop(item)
|
|
|
|
pub.sendMessage("unblocked-user", item=item, user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
|
|
|
def check_send(self, data):
|
2014-11-12 20:41:29 -06:00
|
|
|
if self.session.db["user_name"] == data["user"]["screen_name"]:
|
|
|
|
self.put_data("sent_tweets", data)
|
|
|
|
pub.sendMessage("sent-tweet", data=data, user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
|
|
|
def check_favs(self, data):
|
2014-11-12 20:41:29 -06:00
|
|
|
if data["source"]["screen_name"] == self.session.db["user_name"]:
|
|
|
|
self.put_data("favourites", data["target_object"])
|
|
|
|
pub.sendMessage("favourite", data=data["target_object"], user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
|
|
|
def check_mentions(self, data):
|
2014-11-12 20:41:29 -06:00
|
|
|
if "@%s" % (self.session.db["user_name"]) in data["text"]:
|
|
|
|
self.put_data("mentions", data)
|
|
|
|
pub.sendMessage("mention", data=data, user=self.get_user())
|
2015-07-06 09:45:56 -05:00
|
|
|
|
|
|
|
def set_quoted_tweet(self, data):
|
|
|
|
self.put_data("mentions", data)
|
|
|
|
pub.sendMessage("mention", data=data, user=self.get_user())
|
|
|
|
|
2014-10-27 16:29:04 -06:00
|
|
|
def process_dm(self, data):
|
2014-11-12 20:41:29 -06:00
|
|
|
if self.session.db["user_name"] == data["direct_message"]["sender"]["screen_name"]:
|
|
|
|
self.put_data("sent_direct_messages", data["direct_message"])
|
|
|
|
pub.sendMessage("sent-dm", data=data["direct_message"], user=self.get_user())
|
|
|
|
else:
|
|
|
|
self.put_data("direct_messages", data["direct_message"])
|
|
|
|
pub.sendMessage("direct-message", data=data["direct_message"], user=self.get_user())
|
|
|
|
|
2014-10-27 16:29:04 -06:00
|
|
|
def check_follower(self, data):
|
2014-11-12 20:41:29 -06:00
|
|
|
if data["target"]["screen_name"] == self.session.db["user_name"]:
|
2015-03-28 05:02:17 -06:00
|
|
|
if self.session.settings["general"]["reverse_timelines"] == False:
|
|
|
|
self.session.db["followers"]["items"].append(data["source"])
|
|
|
|
else:
|
|
|
|
self.session.db["followers"]["items"].insert(0, data["source"])
|
2014-11-12 20:41:29 -06:00
|
|
|
pub.sendMessage("follower", data=data["source"], user = self.get_user())
|
|
|
|
else:
|
2015-03-28 05:02:17 -06:00
|
|
|
if self.session.settings["general"]["reverse_timelines"] == False:
|
|
|
|
self.session.db["friends"]["items"].append(data["target"])
|
|
|
|
else:
|
|
|
|
self.session.db["friends"]["items"].insert(0, data["target"])
|
2014-11-12 20:41:29 -06:00
|
|
|
pub.sendMessage("friend", data=data["target"], user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
2014-11-12 20:41:29 -06:00
|
|
|
###
|
2014-10-27 16:29:04 -06:00
|
|
|
def remove_fav(self, data):
|
2014-11-12 20:41:29 -06:00
|
|
|
if self.session.db["user_name"] == data["source"]["screen_name"]:
|
|
|
|
item = utils.find_item(data["target_object"]["id"], self.session.db["favourites"])
|
|
|
|
self.session.db["favourites"].pop(item)
|
|
|
|
pub.sendMessage("unfavourite", item=item, user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
|
|
|
def remove_friend(self, data):
|
2015-05-07 09:16:41 -05:00
|
|
|
if "friends" in self.session.settings["general"]["buffer_order"]:
|
2014-11-12 20:41:29 -06:00
|
|
|
item = utils.find_item(data["target"]["id"], self.session.db["friends"]["items"])
|
2014-10-27 16:29:04 -06:00
|
|
|
if item > 0:
|
2015-06-08 10:04:16 -05:00
|
|
|
self.friends.pop(item)
|
2014-11-12 20:41:29 -06:00
|
|
|
pub.sendMessage("unfollowing", item=item, user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
|
|
|
|
def on_success(self, data):
|
|
|
|
try:
|
|
|
|
if "direct_message" in data:
|
|
|
|
self.process_dm(data)
|
|
|
|
elif "friends" in data:
|
|
|
|
self.friends = data["friends"]
|
2015-04-27 16:08:02 -05:00
|
|
|
pub.sendMessage("friends-receibed")
|
2015-02-08 05:48:40 -06:00
|
|
|
elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
|
2014-10-27 16:29:04 -06:00
|
|
|
if data["user"]["id"] in self.muted_users: return
|
|
|
|
self.check_mentions(data)
|
|
|
|
self.check_send(data)
|
2014-11-12 20:41:29 -06:00
|
|
|
if data["user"]["id"] in self.friends or data["user"]["screen_name"] == self.session.db["user_name"]:
|
|
|
|
self.put_data("home_timeline", data)
|
|
|
|
pub.sendMessage("item-in-home", data=data, user=self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
elif data.has_key("event"):
|
2015-05-07 09:16:41 -05:00
|
|
|
if "favorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]:
|
2014-10-27 16:29:04 -06:00
|
|
|
self.check_favs(data)
|
2015-05-07 09:16:41 -05:00
|
|
|
elif "unfavorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]:
|
2014-10-27 16:29:04 -06:00
|
|
|
self.remove_fav(data)
|
2015-05-07 09:16:41 -05:00
|
|
|
elif "follow" == data["event"] and "followers" in self.session.settings["general"]["buffer_order"]:
|
2014-10-27 16:29:04 -06:00
|
|
|
self.check_follower(data)
|
2015-05-07 09:16:41 -05:00
|
|
|
elif "unfollow" == data["event"] and "friends" in self.session.settings["general"]["buffer_order"]:
|
2014-10-27 16:29:04 -06:00
|
|
|
self.remove_friend(data)
|
|
|
|
elif "block" == data["event"]:
|
|
|
|
self.block_user(data)
|
2014-11-12 20:41:29 -06:00
|
|
|
elif "unblock" == data["event"]:
|
2014-10-27 16:29:04 -06:00
|
|
|
self.unblock(data)
|
|
|
|
elif "list_created" == data["event"]:
|
2014-11-12 20:41:29 -06:00
|
|
|
item = utils.find_item(data["target_object"]["id"], self.session.db["lists"])
|
|
|
|
if item != None: self.session.db["lists"].append(data["target_object"])
|
2014-10-27 16:29:04 -06:00
|
|
|
elif "list_destroyed" == data["event"]:
|
2014-11-12 20:41:29 -06:00
|
|
|
item = utils.find_item(data["target_object"]["id"], self.session.db["lists"])
|
|
|
|
if item != None: self.session.db["lists"].pop(item)
|
2014-10-27 16:29:04 -06:00
|
|
|
self.parent.remove_list(data["target_object"]["id"])
|
2014-11-12 20:41:29 -06:00
|
|
|
elif "list_member_added" == data["event"] and data["source"]["screen_name"] == self.get_user():
|
|
|
|
pub.sendMessage("new-list-member-added", **{"id":str(data["target"]["id"]), "list":data["target_object"], "user":self.get_user()})
|
|
|
|
elif "list_member_added" == data["event"] and data["target"]["screen_name"] == self.get_user():
|
|
|
|
self.session.db["lists"].append(data["target_object"])
|
|
|
|
elif "list_member_removed" == data["event"] and data["source"]["screen_name"] == self.get_user():
|
|
|
|
pub.sendMessage("list-member-deleted", **{"id":str(data["target"]["id"]), "list":data["target_object"], "user":self.get_user()})
|
|
|
|
elif "list_member_removed" == data["event"] and data["target"] == self.get_user():
|
2014-10-27 16:29:04 -06:00
|
|
|
id = data["target_object"]["id"]
|
2014-11-12 20:41:29 -06:00
|
|
|
list = utils.find_item(id, self.session.db["lists"])
|
|
|
|
if list != None: self.session.db["lists"].pop(list)
|
|
|
|
pub.sendMessage("list-deleted", **{"item":list, "user":self.get_user()})
|
2015-07-06 09:45:56 -05:00
|
|
|
elif "quoted_tweet" == data["event"]:
|
|
|
|
self.set_quoted_tweet(data["target_object"])
|
|
|
|
|
2015-05-07 09:16:41 -05:00
|
|
|
if "events" in self.session.settings["general"]["buffer_order"]:
|
2014-11-12 20:41:29 -06:00
|
|
|
pub.sendMessage("event", data= data, user= self.get_user())
|
2014-10-27 16:29:04 -06:00
|
|
|
# self.sound.play("new_event.ogg")
|
2014-11-12 20:41:29 -06:00
|
|
|
except KeyboardInterrupt:
|
2014-10-27 16:29:04 -06:00
|
|
|
pass
|