Skip to content

Instantly share code, notes, and snippets.

@knowtheory
Last active March 14, 2021 02:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save knowtheory/1cb28a0cdf205cdf296138110f8387be to your computer and use it in GitHub Desktop.
Save knowtheory/1cb28a0cdf205cdf296138110f8387be to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'net/http'
require 'json'
require 'addressable/uri'
@debug_messages = false
token = '[TOKEN GOES HERE]'
user = '[USER NAME GOES HERE}'
def delete_user_messages(user, token)
message_count, messages = get_messages(user, token)
while message_count > 0 do
delete_messages(messages, token)
message_count, messages = get_messages(user, token)
end
end
def get_messages(user, token)
index_url = Addressable::URI.parse('https://slack.com/api/search.messages')
search_query = "from:#{user}"
index_url.query_values = {token:token, query:search_query, count: 500}
index = JSON.parse(Net::HTTP.get(index_url))
puts "#{user} has #{index["messages"]["total"]} messages"
return index["messages"]["total"], index["messages"]["matches"]
end
def delete_messages(messages, token)
messages.each{|message| delete_message(message, token)}
end
def delete_message(message, token)
delete_url = Addressable::URI.parse('https://slack.com/api/chat.delete')
timestamp = message["ts"]
channel_id = message["channel"]["id"]
channel_name = message["channel"]["name"]
delete_url.query_values = { token: token, ts: timestamp, channel: channel_id }
print "Deleting message at #{timestamp} from #{channel_name}... " if @debug_messages
begin
resp = JSON.parse(Net::HTTP.get(delete_url))
#print "#{delete_url}..." if @debug_messages
rescue StandardError => e
sleep(0.5)
puts "Something went wrong: #{e.message}"
end
puts "okay, done" if @debug_messages
end
delete_user_messages(user, token)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment