Skip to content

Instantly share code, notes, and snippets.

@0x263b
Created April 30, 2018 06:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0x263b/8abee9bbd94554dfd32c4e6594224246 to your computer and use it in GitHub Desktop.
Save 0x263b/8abee9bbd94554dfd32c4e6594224246 to your computer and use it in GitHub Desktop.
Delete discord post history
#!/usr/bin/env ruby
# encoding: utf-8
Encoding.default_external = "UTF-8"
Encoding.default_internal = "UTF-8"
require "open-uri"
require "json"
require "net/https"
require "uri"
GUILD = "" # Server ID
CHANNEL = "" # A Channel ID for the server, doesn't matter which
AUTHOR = "" # My ID
TOKEN = "" # My API Token
COOKIE = "" # My Cookie
REFERER = "https://discordapp.com/channels/#{GUILD}/#{CHANNEL}"
@messages = []
more = true
offset = 0
while more == true do # Loop through search result pages
begin
puts "Search offset: #{offset}"
data = open("https://discordapp.com/api/v6/guilds/#{GUILD}/messages/search?author_id=#{AUTHOR}&offset=#{offset}",
"Authorization" => TOKEN,
"Cookie" => COOKIE,
"Referer" => REFERER).read
data = JSON.parse(data)
@messages << data["messages"]
more = false if data["messages"].length == 0
offset += 25
sleep 0.5 # Sleep to avoid Rate Limit
rescue
more = false
end
end
@messages.flatten!.uniq!{ |msg| msg["id"] } # delete duplicates
@export = @messages.select do |message| # filter only my messages
message["author"]["id"] == AUTHOR
end
@export.sort_by!{ |message| -message["timestamp"] } # Sort oldest to newest
# Save a backup
File.write("#{File.expand_path(File.dirname(__FILE__))}/search_results.json", JSON.pretty_generate(@export))
number_deleted = 0
@export.each do |message|
begin
uri = URI.parse("https://discordapp.com/")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Delete.new("/api/channels/#{message["channel_id"]}/messages/#{message["id"]}")
request.initialize_http_header({"Authorization" => TOKEN})
response = http.request(request)
raise "Error deleting message: #{message["id"]} (#{response.code})" if response.code != "204"
number_deleted += 1
sleep 0.5 # Sleep to avoid Rate Limit
rescue Exception => e
puts e.message
end
end
puts "Deleted: #{number_deleted} messages"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment