Rails에서 스탬프를 마음대로 밀어주는 Slack의 bot를 만들어 보았다
11344 단어 slack-ruby-clientslackbotRails
출장으로 후쿠오카에 와 있습니다만, 이쪽의 아침은 조금 춥네요.
작업의 효율화를 실시하고 싶고, Ruby on Rails로 마음대로 스탬프를 눌러 주는 Slack의 bot를 만들어 보았습니다.
그 일부 시종을 말해볼까라고 생각합니다.
slack-ruby-client
익숙한 Rails에서 아빠와 해 버리고 싶다.
그런 생각으로부터, 찾아온 gem이 이쪽.
slack-ruby-client
메소드는, Slack의 API를 그대로 스네이크 케이스에 변환한 것 같은 메소드이므로, SlackAPI 의 레퍼런스도 보면서 저것 이것 시험해 구현을 진행시키고 있었습니다.
1. bot 등록
먼저 bot를 여기으로 등록합니다.
[Add Configlation]에서 Slack에서 표시하고 싶은 bot의 이름을 입력하고 [Add bot integration]을 클릭하면 상세한 설정을 할 수 있는 화면으로 날아갑니다.
아이콘의 설정이나, bot를 사용할 수 있는 IP의 제한등도 여기에서 설정할 수 있게 되어 있었습니다.
여기 상단에 표시되는 "API Token", 이것은 나중에 구현하는 데 필요하기 때문에 여기에 메모.
2. 채널에 bot 초대
Slack을 시작하고 bot를 실행하고 싶은 채널에서 방금 만든 bot를 초대합니다.
이렇게 하면 bot에 열람 권한과 발언권이 주어지는 것 같습니다.
3. 구현
우선 Gemfile에 gem을 추가하네요.
gem 'slack-ruby-client'
그런 다음 bot에 대한 설정을 위한 파일을
config/initializers/
에 저장합니다.slack_api.rb라는 이름으로 다음 코드를 작성했습니다.
slack_api.rb
require 'slack'
Slack.configure do |config|
config.token = ENV['BOT_TOKEN']
end
Slack::Web::Client.config do |config|
config.user_agent = 'Slack Ruby Client/1.0'
end
Slack::RealTime::Client.config do |config|
config.start_method = :rtm_start
end
config.token = ENV['BOT_TOKEN']
의 부분입니다만, 환경 변수에 bot 등록시에 취득한 API Token을 BOT_TOKEN이라고 하는 변수명으로 서버에 등록해, 그것을 읽어들일 수 있도록 한 기술입니다.Settings에 쓰는 것이 좋았을까라고 생각하거나…
그리고, 실제로 움직이는 파일을 어디에 둘까는, 용도나 사람에 따라서 다르다고 생각합니다만, 나는
app/batch
라고 하는 디렉토리에 파일을 만들어, 클라이언트를 호출하는 메소드를 기재.reaction_bot.rb
def web_client
@web_client ||= Slack::Web::Client.new
end
def real_time_client
@real_time_client ||= Slack::RealTime::Client.new
end
real_time_client를 사용하면 bot이 참여하는 채널의 메시지를 폴링 할 수 있기 때문에 특정 사용자가 중얼거린 순간에 스탬프를 누르는 괴롭힘을 실행할 수 있도록 해 보았습니다.
reaction_bot.rb
TARGET_USER_ID = {ターゲットにしたいユーザーのID}
def execute
real_time_client.on :message do |message|
if message.user == TARGET_USER_ID
web_client.reactions_add(name: 'yasei_1', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_2', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_3', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_4', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_5', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_6', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_7', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_8', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_9', channel: message.channel, timestamp: message.ts)
web_client.reactions_add(name: 'yasei_10', channel: message.channel, timestamp: message.ts
end
end
real_time_client.start!
end
이것을 Rake 태스크로 실행.
훌륭하게 걸렸습니다.
……… 그런 농담을 하면서 웃음
실제로는, message의 내용을 DB에 보존해 가, 그 이력과 새롭게 온 메시지를 비교해 그것에 맞는 스탬프 눌러 가는 것을 만들었습니다.
흥미있는 분은, 시험해라.
다음 번에는 업로드 된 이미지를 얼굴 인식시켜 스탬프를 만드는 bot를 만들어 보려고합니다.
Reference
이 문제에 관하여(Rails에서 스탬프를 마음대로 밀어주는 Slack의 bot를 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/_miki/items/d79ebae12227106a148c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)