init
This commit is contained in:
		
							
								
								
									
										100
									
								
								slack-converter.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								slack-converter.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
require 'json'
 | 
			
		||||
 | 
			
		||||
# this class converts the direct messages from a slack export to 
 | 
			
		||||
# a format wich can then be imported by mattermost
 | 
			
		||||
# author Daniel Schubert <mail@schubertdaniel.de>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ImportDMS 
 | 
			
		||||
	def initialize()
 | 
			
		||||
		@dms = {}
 | 
			
		||||
		@users = {}
 | 
			
		||||
 | 
			
		||||
		self.xtract_users
 | 
			
		||||
		self.xtract_dms
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	def xtract_users()
 | 
			
		||||
		data = self.read_json('users.json')
 | 
			
		||||
		data.each do |d|
 | 
			
		||||
			@users.store( d["id"], d["name"])
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	def xtract_dms()
 | 
			
		||||
		data = self.read_json('dms.json')
 | 
			
		||||
		data.each do |d|
 | 
			
		||||
			@dms.store( d["id"],d["members"])
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	def read_json( file )
 | 
			
		||||
		f = File.open file
 | 
			
		||||
		d = JSON.load f
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	def get_usr_name( id )
 | 
			
		||||
		unless (id == nil) 
 | 
			
		||||
			@users.fetch(id)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	def cnvrt_ts( ts )
 | 
			
		||||
    # converts the slack timestamp to a mattermost timestamp
 | 
			
		||||
		t = ts.sub!(".", "")
 | 
			
		||||
		t[0,13]
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	def get_messages(chat_id)
 | 
			
		||||
		files = Dir.glob("#{chat_id}/*.json")
 | 
			
		||||
		chats = Array.new 
 | 
			
		||||
 | 
			
		||||
		files.each { |file|
 | 
			
		||||
			f = read_json( file )
 | 
			
		||||
 | 
			
		||||
			f.each { |m|
 | 
			
		||||
				n = self.get_usr_name( m["user"] )
 | 
			
		||||
				ts = self.cnvrt_ts( m["ts"] )
 | 
			
		||||
				#user,ts, test
 | 
			
		||||
				chats.push( [ts, n, m["text"]] )
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return chats
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	def create_json
 | 
			
		||||
		# version; required 		
 | 
			
		||||
		puts '{"type":"version","version":1}'
 | 
			
		||||
		
 | 
			
		||||
    @dms.each_key do |key| 
 | 
			
		||||
      #get user names
 | 
			
		||||
			user_names = []
 | 
			
		||||
			@dms.fetch(key).each do |u_id| 
 | 
			
		||||
				user_names.push( @users.fetch(u_id) )
 | 
			
		||||
			end	  
 | 
			
		||||
      self.create_channel_list
 | 
			
		||||
      self.create_direct_messages
 | 
			
		||||
    end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
  def create_direct_messages
 | 
			
		||||
    #TODO : replies are output as normal messages; should be grouped as replies
 | 
			
		||||
    # create direct messages list
 | 
			
		||||
    m = get_messages(key)
 | 
			
		||||
    m.each do |msg|
 | 
			
		||||
      ml = {"type"=>"direct_post","direct_post"=>{"channel_members" => user_names, "user" => msg[1], "message" => msg[2], "create_at" => msg[0].to_i, "flagged_by" => nil, "reactions" => nil, "replies"=> nil, "attachments"=> nil } }.to_json
 | 
			
		||||
      puts ml
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def create_channel_list
 | 
			
		||||
    cl = {"type" => "direct_channel", "direct_channel" => {"members" => user_names, "favorited_by" => nil,"header" => "" }}.to_json
 | 
			
		||||
    puts cl
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# usage
 | 
			
		||||
i = ImportDMS.new
 | 
			
		||||
i.create_json
 | 
			
		||||
		Reference in New Issue
	
	Block a user