class SlackBigEmoji::Uploader
Constants
- BASE_DIR
Attributes
agent[RW]
page[RW]
team_name[RW]
token[RW]
Public Class Methods
new(dir)
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 10 def initialize(dir) @dir = dir @page = nil @agent = Mechanize.new end
Public Instance Methods
upload_emojis()
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 17 def upload_emojis move_to_emoji_page push_emojis end
Private Instance Methods
enter_two_factor_authentication_code()
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 38 def enter_two_factor_authentication_code page.form['2fa_code'] = ask('Your two factor authentication code: ') @page = page.form.submit @token = @page.body[/(?<=api_token":")[^"]+/] end
list_emojis()
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 78 def list_emojis emojis = [] loop.with_index(1) do |_, n| params = { query: '', page: n, count: 100, token: token } res = JSON.parse(agent.post("https://#{team_name}.slack.com/api/emoji.adminList", params).body) raise res['error'] if res['error'] emojis.push(*res['emoji'].map { |e| e['name'] }) break if res['paging']['pages'] == n || res['paging']['pages'] == 0 end emojis end
login()
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 24 def login @team_name = ask('Your slack team name(subdomain): ') email = ask('Login email: ') password = ask('Login password(hidden): ') { |q| q.echo = false } emoji_page_url = "https://#{team_name}.slack.com/customize/emoji" page = agent.get(emoji_page_url) page.form.email = email page.form.password = password @page = page.form.submit @token = @page.body[/(?<=api_token":")[^"]+/] end
move_to_emoji_page()
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 44 def move_to_emoji_page loop do if page && page.form['signin_2fa'] enter_two_factor_authentication_code else login end break if page.title.include?('Emoji') puts 'Login failure. Please try again.' puts end end
push_emojis()
click to toggle source
# File lib/slack_big_emoji/uploader.rb, line 58 def push_emojis emojis = list_emojis Dir.glob("#{@dir}/*.png").sort.each do |path| basename = File.basename(path, '.*') # skip if already exists next if emojis.include?(basename) puts "importing #{basename}..." params = { name: basename, image: File.new(path), mode: 'data', token: token } agent.post("https://#{@team_name}.slack.com/api/emoji.add", params) end end