Guest User

Untitled

a guest
Apr 7th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.34 KB | None | 0 0
  1. require "socket"
  2. require "openssl"
  3. require "colorize"
  4. require "json"
  5.  
  6. USERNAME = "Name0fTheUser"
  7.  
  8. puts "Please paste source of https://www.reddit.com/robin/ here:"
  9.  
  10. #source = gets.chomp;
  11. url = "/robin/93b7e714-fd06-11 PUT YOUR WSS URL HERE"
  12. s = TCPSocket.new("wss.redditmedia.com", 443)
  13.  
  14. ssl = OpenSSL::SSL::SSLSocket.new(s)
  15. ssl.connect
  16.  
  17. ssl.write "\
  18. GET #{url} HTTP/1.1\r\n\
  19. Connection: Upgrade\r\n\
  20. Upgrade: websocket\r\n\
  21. Host: wss.redditmedia.com\r\n\
  22. Sec-WebSocket-Version: 13\r\n\
  23. Sec-WebSocket-Key: MTMtMTQ1OTc2NDIxOTk4Mg==\r\n\
  24. \r\n"
  25.  
  26. puts ssl.gets("\r\n\r\n")
  27.  
  28. def colorName(name)
  29.     colors = [:red, :yellow, :light_yellow, :green, :blue, :magenta]
  30.     color = colors[name.downcase.gsub(/[^0-9a-z]/, "").to_i(36) % colors.length]
  31.     return name.ljust(20, " ").colorize(color)
  32. end
  33.  
  34. def compare(strA, strB) # for when people typo your username
  35.     score = 0
  36.     strA.downcase!
  37.     strB.downcase!
  38.     strA.length.times do |i|
  39.         score += 1 if strA[i] == strB[i]
  40.     end
  41.     return score/strA.length.to_f
  42. end
  43.  
  44. def checkMention(str)
  45.     match = false
  46.     #(str.length - USERNAME.length).times do |i|
  47.     #   match = true if compare(str.slice(i, USERNAME.length), USERNAME) < 0.2
  48.     #end
  49.     match = str.include? USERNAME
  50.     return str.red if match
  51.     return str
  52. end
  53.  
  54. @spamCount = Hash.new(0)
  55.  
  56. def isSpam(str)
  57.  
  58.     # remove bots
  59.    
  60.     return true if str.match(/\[.*?\]/) != nil
  61.  
  62.     if @spamCount[str] >= 2 then
  63.         #puts "blocked spam: #{str.red}"
  64.         return true
  65.     else
  66.         @spamCount[str] += 1
  67.     end
  68.    
  69.     # check for repeated patterns
  70.    
  71.     (str.length/2).downto 1 do |l|
  72.         if (Regexp.new("(.{#{l}})\\1").match(str).to_a[0]||"").length > 4 then
  73.             #puts "blocked spam: #{str.red}"
  74.             return true
  75.         end
  76.     end
  77.    
  78.     # check for too much CAPS
  79.    
  80.     caps = str.scan(/[A-Z]/).length
  81.     if caps > str.length/3
  82.         #puts "blocked spam: #{str.red}"
  83.         return true
  84.     end
  85.    
  86.     # blacklist
  87.     blacklist = ["nigglets", "meesa", "mesa", "!nl ", "elect ", "/me "]
  88.     blacklist.each do |word|
  89.         return true if str.downcase.include? word
  90.     end
  91.    
  92.     return false
  93. end
  94.  
  95. loop do
  96.     ssl.read(1)
  97.     len = ssl.read(1).unpack("C")[0]
  98.     len = ssl.read(2).unpack("n")[0] if len == 126
  99.     data = JSON.parse(ssl.read(len))
  100.    
  101.     if data["type"] == "chat" then
  102.         message = data["payload"]["body"]
  103.         puts "#{colorName(data["payload"]["from"])} |  #{checkMention(message)}" unless isSpam(message)
  104.         STDOUT.flush
  105.     end
  106. end
Add Comment
Please, Sign In to add comment