Ledger Nano X - The secure hardware wallet
SHARE
TWEET

Untitled

a guest Jan 15th, 2015 554 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import rtmp_protocol
  2. import httplib
  3. from xml.dom.minidom import parseString
  4. import thread
  5. import time
  6. import random
  7. import socket
  8.  
  9. # Credits for code base to MegaLOLer
  10. # Edits by Nola
  11.  
  12. # Add Cauth token - API - http://tinychat.com/api/captcha/check.php?room=tinychat^[roomname]&guest_id=[user_id]
  13. # Fix Bug - If Using Admin account - all messages come in as PMs
  14. # Fix Youtube/Sound Cloud API Calls
  15. # Unban command - API - http://tinychat.com/ajax/user/clearbans
  16. # Ability to tell whether users are moderators or not - Prase JOINS
  17. # Add Auto Bans Based on Usernames
  18. # Add Trivia/Poker Bot based on IRC Bots
  19. # Other things
  20.  
  21. DEBUG = True
  22.  
  23. def httpRequest(server, resource, body="", headers={}, method="GET"):
  24.                 connection = httplib.HTTPConnection(server)
  25.                 connection.request(method, resource, body, headers)
  26.                 response = connection.getresponse()
  27.                 headers = response.getheaders()
  28.                 data = response.read()
  29.                 connection.close()
  30.                 return (headers, data)
  31.            
  32. class TinychatMessage():
  33.                 def __init__(self, msg, nick, user=None, recipient=None, color=None, pm=False):
  34.                                 self.msg = msg
  35.                                 self.nick = nick
  36.                                 self.user = user
  37.                                 self.recipient = recipient
  38.                                 self.color = color
  39.                                 self.pm = pm
  40.            
  41.                 def printFormatted(self):
  42.                                 if self.pm:
  43.                                                 pm = "(PM) "
  44.                                 else:
  45.                                                 pm = ""
  46.                                 print(pm + self.recipient + ": " + self.nick + ": " + self.msg)
  47.  
  48. class TinychatUser():
  49.                 def __init__(self, nick, id=None, color=None, lastMsg=None):
  50.                                 self.nick = nick
  51.                                 self.id = id
  52.                                 self.color = color
  53.                                 self.lastMsg = lastMsg
  54.  
  55. TINYCHAT_COLORS = ["#a78901"]
  56.  
  57. class TinychatRoom():
  58.                 # Manages a single room connection    
  59.                 def __init__(self, room, nick=None, passwd=None):
  60.                                 self.room = room
  61.                                 self.tcUrl = self._getTcUrl()
  62.                                 parts = self.tcUrl.split("/")
  63.                                 server = parts[2].split(":")
  64.                                 self.server = server[0]
  65.                                 self.port = int(server[1])
  66.                                 self.app = parts[3]
  67.                                 self.url = "http://tinychat.com/" + room
  68.                                 self.connected = False
  69.                                 self.queue = []
  70.                                 self.color = TINYCHAT_COLORS[random.randint(0, len(TINYCHAT_COLORS) - 1)]
  71.                                 self.nick = nick
  72.                                 self.passwd = passwd
  73.                                 if self.nick == "": self.nick = None
  74.                                 if self.passwd == "": self.passwd = None
  75.                                 self.topic = None
  76.                                 self.users = {}
  77.                                 self.echo = __name__ == "__main__"
  78.                                 self.stack = False
  79.                                 self.userID = None
  80.  
  81.                 def connect(self):
  82.                                 if not self.connected:
  83.                                                 self.connection = rtmp_protocol.RtmpClient(self.server, self.port, self.tcUrl, self.url, '', self.app)
  84.                                                 if self.nick:
  85.                                                                 n = self.nick.lower()
  86.                                                 else:
  87.                                                                 n = ""
  88.                                                 self.connection.connect([self.room, self._getAutoOp(), u'show', u'tinychat', n])
  89.                                                 self.connected = True
  90.                                                 self._listen()
  91.            
  92.                 def disconnect(self):
  93.                                 if self.connected:
  94.                                                 self.connected = False
  95.                                                 try:
  96.                                                                 self.connection.socket.shutdown(socket.SHUT_RDWR)
  97.                                                 except:
  98.                                                                 pass
  99.                                                 self.onDisconnect()
  100.            
  101.                 def poll(self):
  102.                                 q = self.queue
  103.                                 self.queue = []
  104.                                 return q
  105.                            
  106.                 # Commands
  107.                 def cauth(self):
  108.                                 self._sendCauth(self._getTcCauth())
  109.            
  110.                 def say(self, msg):
  111.                                 if len(msg) > 152: return
  112.                                 self._sendCommand("privmsg", [u"" + self._encodeMessage(msg), u"" + self.color + ",en"])
  113.                            
  114.                 def pm(self, msg, recipient):
  115.                                 if len(msg) > 152: return
  116.                                 self._sendCommand("privmsg", [u"" + self._encodeMessage("/msg " + recipient + " " + msg), u"" + self.color + ",en", u"n" + self._getUser(recipient).id + "-" + recipient])
  117.                            
  118.                 def setNick(self, nick=None):
  119.                                 if not nick: nick = self.nick
  120.                                 self.nick = nick
  121.                                 self._sendCommand("nick", [u"" + nick])
  122.            
  123.                 def cycleColor(self):
  124.                                 try:
  125.                                                 i = TINYCHAT_COLORS.index(self.color)
  126.                                 except:
  127.                                                 i = TINYCHAT_COLORS[random.randint(0, len(TINYCHAT_COLORS) - 1)]
  128.                                 i = (i + 1) % len(TINYCHAT_COLORS)
  129.                                 self.color = TINYCHAT_COLORS[i]
  130.            
  131.                 def ban(self, nick):
  132.                                 self._sendCommand("kick", [u"" + nick, self._getUser(nick).id])
  133.            
  134.                 def playYoutube(self, video):
  135.                                 self.say("/mbs youTube " + str(video) + " 0")
  136.            
  137.                 def stopYoutube(self):
  138.                                 self.say("/mbc youTube")
  139.            
  140.                 def playSoundcloud(self, track):
  141.                                 self.say("/mbs soundCloud " + str(track) + " 0")
  142.            
  143.                 def stopSoundcloud(self):
  144.                                 self.say("/mbc soundCloud")
  145.            
  146.                 # Events
  147.                 def onMessage(self, user, message):
  148.                                 if self.echo: message.printFormatted()
  149.                            
  150.                 def onPM(self, user, message):
  151.                                 if self.echo: message.printFormatted()
  152.            
  153.                 def onQuit(self, user):
  154.                                 if self.echo: print(self.room + ": " + user.nick + " left the room.")
  155.            
  156.                 def onBan(self, user):
  157.                                 if self.echo: print(self.room + ": " + user.nick + " was banned.")
  158.            
  159.                 def onJoin(self, user):
  160.                                 if self.echo: print(self.room + ": " + user.nick + " entered the room.")
  161.            
  162.                 def onRegister(self, user):
  163.                                 if self.echo: print("You have connected to " + self.room + ".")
  164.            
  165.                 def onNickChange(self, new, old, user):
  166.                                 if self.echo: print(self.room + ": " + old + " changed nickname to " + new + ".")
  167.            
  168.                 def onTopic(self, topic):
  169.                                 if self.echo: print(self.room + ": Topic set to \"" + topic + "\".")
  170.            
  171.                 def onUserList(self, users):
  172.                                 pass
  173.            
  174.                 def onDisconnect(self):
  175.                                 if self.echo: print("You have disconnected from " + self.room + ".")
  176.            
  177.                 # Helper methods
  178.                 def _listen(self):
  179.                                 while self.connected:
  180.                                                 try:
  181.                                                                 msg = self.connection.reader.next()
  182.                                                                 if DEBUG: print("SERVER: " + str(msg))
  183.                                                                 if msg['msg'] == rtmp_protocol.DataTypes.COMMAND:
  184.                                                                                 pars = msg['command']
  185.                                                                                 cmd = pars[0].encode("ascii", "ignore").lower()
  186.                                                                                 if len(pars) > 3:
  187.                                                                                                 pars = pars[3:]
  188.                                                                                 else:
  189.                                                                                                 pars = []
  190.                                                                                 for i in range(len(pars)):
  191.                                                                                                 if type(pars[i]) == str: pars[i] = pars[i].encode("ascii", "ignore")
  192.                                                                                 if cmd == "privmsg":
  193.                                                                                                 recipient = pars[0]
  194.                                                                                                 message = pars[1]
  195.                                                                                                 color = pars[2].lower().split(",")[0]
  196.                                                                                                 nick = pars[3]
  197.                                                                                                 if recipient[0] == "#":
  198.                                                                                                                 recipient = "^".join(recipient.split("^")[1:])
  199.                                                                                                 else:
  200.                                                                                                                 recipient = "-".join(recipient.split("-")[1:])
  201.                                                                                                 user = self._getUser(nick)
  202.                                                                                                 message = TinychatMessage(self._decodeMessage(message), nick, user, recipient, color)
  203.                                                                                                 user.lastMsg = message
  204.                                                                                                 user.color = color
  205.                                                                                                 if self.stack: self.queue.append(message)
  206.                                                                                                 if recipient.lower() == self.nick.lower():
  207.                                                                                                                 message.pm = True
  208.                                                                                                                 if message.msg.startswith("/msg ") and len(message.msg.split(" ")) >= 2: message.msg = " ".join(message.msg.split(" ")[2:])
  209.                                                                                                                 self.onPM(user, message)
  210.                                                                                                 else:
  211.                                                                                                                 self.onMessage(user, message)
  212.                                                                                 elif cmd == "registered":
  213.                                                                                                 if self.nick: self.setNick()
  214.                                                                                                 user = self._getUser(pars[0])
  215.                                                                                                 user.id = pars[1]
  216.                                                                                                 self.onRegister(user)
  217.                                                                                 elif cmd == "topic":
  218.                                                                                                 self.topic = pars[0]
  219.                                                                                                 self.onTopic(self.topic)
  220.                                                                                 elif cmd == "nick":
  221.                                                                                                 user = self._getUser(pars[0])
  222.                                                                                                 old = user.nick
  223.                                                                                                 user.nick = pars[1]
  224.                                                                                                 if old.lower() in self.users.keys():
  225.                                                                                                                 del self.users[old.lower()]
  226.                                                                                                                 self.users[user.nick.lower()] = user
  227.                                                                                                 if user.nick == self.nick:
  228.                                                                                                         self.userID = user.id
  229.                                                                                                         self.cauth();
  230.                                                                                                 self.onNickChange(user.nick, old, user)
  231.                                                                                 elif cmd == "quit":
  232.                                                                                                 user = self.users[pars[0].lower()]
  233.                                                                                                 del self.users[pars[0].lower()]
  234.                                                                                                 self.onQuit(user)
  235.                                                                                 elif cmd == "kick":
  236.                                                                                                 self.onBan(user = self.users[pars[1].lower()])
  237.                                                                                 elif cmd == "join":
  238.                                                                                                 user = self._getUser(pars[1])
  239.                                                                                                 user.id = pars[0]
  240.                                                                                                 self.onJoin(user)
  241.                                                                                 elif cmd == "joins":
  242.                                                                                                 for i in range((len(pars) - 1) / 2):
  243.                                                                                                                 user = self._getUser(pars[i*2 + 2])
  244.                                                                                                                 user.id = pars[i*2 + 1]
  245.                                                                                                 #self.cauth();
  246.                                                                                 elif cmd == "joinsdone":
  247.                                                                                                 self.onUserList(self.users)
  248.                                                 except:
  249.                                                                 self.disconnect()
  250.                                                                            
  251.                 def _getUser(self, nick):
  252.                                 if not nick.lower() in self.users.keys(): self.users[nick.lower()] = TinychatUser(nick)
  253.                                 return self.users[nick.lower()]
  254.    
  255.                 def _decodeMessage(self, msg):
  256.                                 chars = msg.split(",")
  257.                                 msg = ""
  258.                                 for i in chars:
  259.                                                 msg += chr(int(i))
  260.                                 return msg
  261.                    
  262.                 def _encodeMessage(self, msg):
  263.                                 msg2 = []
  264.                                 for i in msg:
  265.                                                 msg2.append(str(ord(i)))
  266.                                 return ",".join(msg2)
  267.            
  268.                 def _sendCommand(self, cmd, pars=[]):
  269.                                 msg = {"msg": rtmp_protocol.DataTypes.COMMAND, "command": [u"" + cmd, 0, None,] + pars}
  270.                                 if DEBUG: print("CLIENT: " + str(msg))
  271.                                 self.connection.writer.write(msg)
  272.                                 self.connection.writer.flush()
  273.            
  274.                 def _sendCauth(self, cauth):
  275.                                 self._sendCommand("cauth", [cauth])
  276.    
  277.                 def _getTcUrl(self):  
  278.                                 return parseString(httpRequest("apl.tinychat.com", "/api/find.room/" + self.room + "?site=tinychat&url=tinychat.com")[1]).getElementsByTagName("response")[0].getAttribute("rtmp")
  279.          
  280.                 def _getTcCauth(self):
  281.                                 return self._uglyStripCauthKey(httpRequest("tinychat.com", "/api/captcha/check.php?room=tinychat^" + self.room + "&guest_id=" + self.userID)[1])
  282.  
  283.                 def _uglyStripCauthKey(self, json):
  284.                                 cauth = json.split('"key":"')[1].split('"')[0]
  285.                                 print("CAUTH KEY: " + cauth)
  286.                                 return cauth
  287.  
  288.                 def _getAutoOp(self):
  289.                                 if self.nick and self.passwd:
  290.                                                 headers = httpRequest("tinychat.com", "/login", "form_sent=1&referer=&next=&username=" + self.nick + "&password=" + self.passwd + "&passwordfake=Password&remember=1", {"Content-Type": "application/x-www-form-urlencoded"}, "POST")[0]
  291.                                                 cookies = []
  292.                                                 for header in headers:
  293.                                                                 if header[0].lower() == "set-cookie":
  294.                                                                                 parts = header[1].split(", ")
  295.                                                                                 for i in range(len(parts)):
  296.                                                                                                 part = parts[i]
  297.                                                                                                 part2 = part.split(";")[0]
  298.                                                                                                 if "=" in part2:
  299.                                                                                                                 if "," in part2:
  300.                                                                                                                                 part2 = part2.split(", ")[1]
  301.                                                                                                                 cookies.append(part2)
  302.                                                                                 break
  303.                                                 if len(cookies) > 0:
  304.                                                                 html = httpRequest("tinychat.com", "/" + self.room, "", {"Content-Type": "application/x-www-form-urlencoded", "Cookie": "; ".join(cookies)})[1]
  305.                                                                 if ", autoop: \"" in html:
  306.                                                                                 return html.split(", autoop: \"")[1].split("\"")[0]
  307.                                 return u"none"
  308.    
  309. if __name__ == "__main__":
  310.                 room = TinychatRoom(raw_input("Enter room name: "), raw_input("Enter username (optional): "), raw_input("Enter password (optional): "))
  311.                 thread.start_new_thread(room.connect, ())
  312.                 while not room.connected: time.sleep(1)
  313.                 while room.connected:
  314.                                 msg = raw_input()
  315.                                 if len(msg) > 0:
  316.                                                 if msg[0] == "/":
  317.                                                                 msg = msg[1:]
  318.                                                                 if len(msg) > 0:
  319.                                                                                 parts = msg.split(" ")
  320.                                                                                 if len(parts) == 1:
  321.                                                                                                 cmd = parts[0]
  322.                                                                                                 pars = []
  323.                                                                                                 par = ""
  324.                                                                                 else:
  325.                                                                                                 cmd = parts[0]
  326.                                                                                                 pars = parts[1:]
  327.                                                                                                 par = " ".join(parts[1:])
  328.                                                                                 if cmd.lower() == "say":
  329.                                                                                                 room.say(par)
  330.                                                                                 elif cmd.lower() == "pm":
  331.                                                                                                 if len(pars) > 1:
  332.                                                                                                                 room.pm(" ".join(pars[1:]), pars[0])
  333.                                                                                                 else:
  334.                                                                                                                 print("Please supply the recipient's nick as well as the message to send")
  335.                                                                                 elif cmd.lower() == "nick":
  336.                                                                                                 room.setNick(par)
  337.                                                                                 elif cmd.lower() == "color":
  338.                                                                                                 room.cycleColor()
  339.                                                                                 elif cmd.lower() == "ban":
  340.                                                                                                 room.ban(par)
  341.                                                                                 elif cmd.lower() == "quit":
  342.                                                                                                 room.disconnect()
  343.                                                                                 elif cmd.lower() == "playyoutube":
  344.                                                                                                 room.playYoutube(par)
  345.                                                                                 elif cmd.lower() == "stopyoutube":
  346.                                                                                                 room.stopYoutube()
  347.                                                                                 elif cmd.lower() == "playsoundcloud":
  348.                                                                                                 room.playSoundcloud(par)
  349.                                                                                 elif cmd.lower() == "stopsoundcloud":
  350.                                                                                                 room.stopSoundcloud()
  351.                                                                                 elif cmd.lower() == "cauth":
  352.                                                                                                 room.cauth()
  353.                                                 else:
  354.                                                                 room.say(msg)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top