Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "socket"
- require "openssl"
- require "colorize"
- require "json"
- USERNAME = "Name0fTheUser"
- puts "Please paste source of https://www.reddit.com/robin/ here:"
- #source = gets.chomp;
- url = "/robin/93b7e714-fd06-11 PUT YOUR WSS URL HERE"
- s = TCPSocket.new("wss.redditmedia.com", 443)
- ssl = OpenSSL::SSL::SSLSocket.new(s)
- ssl.connect
- ssl.write "\
- GET #{url} HTTP/1.1\r\n\
- Connection: Upgrade\r\n\
- Upgrade: websocket\r\n\
- Host: wss.redditmedia.com\r\n\
- Sec-WebSocket-Version: 13\r\n\
- Sec-WebSocket-Key: MTMtMTQ1OTc2NDIxOTk4Mg==\r\n\
- \r\n"
- puts ssl.gets("\r\n\r\n")
- def colorName(name)
- colors = [:red, :yellow, :light_yellow, :green, :blue, :magenta]
- color = colors[name.downcase.gsub(/[^0-9a-z]/, "").to_i(36) % colors.length]
- return name.ljust(20, " ").colorize(color)
- end
- def compare(strA, strB) # for when people typo your username
- score = 0
- strA.downcase!
- strB.downcase!
- strA.length.times do |i|
- score += 1 if strA[i] == strB[i]
- end
- return score/strA.length.to_f
- end
- def checkMention(str)
- match = false
- #(str.length - USERNAME.length).times do |i|
- # match = true if compare(str.slice(i, USERNAME.length), USERNAME) < 0.2
- #end
- match = str.include? USERNAME
- return str.red if match
- return str
- end
- @spamCount = Hash.new(0)
- def isSpam(str)
- # remove bots
- return true if str.match(/\[.*?\]/) != nil
- if @spamCount[str] >= 2 then
- #puts "blocked spam: #{str.red}"
- return true
- else
- @spamCount[str] += 1
- end
- # check for repeated patterns
- (str.length/2).downto 1 do |l|
- if (Regexp.new("(.{#{l}})\\1").match(str).to_a[0]||"").length > 4 then
- #puts "blocked spam: #{str.red}"
- return true
- end
- end
- # check for too much CAPS
- caps = str.scan(/[A-Z]/).length
- if caps > str.length/3
- #puts "blocked spam: #{str.red}"
- return true
- end
- # blacklist
- blacklist = ["nigglets", "meesa", "mesa", "!nl ", "elect ", "/me "]
- blacklist.each do |word|
- return true if str.downcase.include? word
- end
- return false
- end
- loop do
- ssl.read(1)
- len = ssl.read(1).unpack("C")[0]
- len = ssl.read(2).unpack("n")[0] if len == 126
- data = JSON.parse(ssl.read(len))
- if data["type"] == "chat" then
- message = data["payload"]["body"]
- puts "#{colorName(data["payload"]["from"])} | #{checkMention(message)}" unless isSpam(message)
- STDOUT.flush
- end
- end
Add Comment
Please, Sign In to add comment