質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

234閲覧

rubybotの部分一致について

satsukichan

総合スコア52

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2018/06/07 08:55

普段インフラエンジニアのruby初心者です。教えてください。
SlackAPI+rubyで「Hello」と打つと「Hello」と返すようなbotを作っています。
しかし完全一致でないとうごかず「HELLO!!」「Hello---」「こんにちはHello」等に対応できません。
ここを部分一致でも動かせるようにしたいです。宜しくお願いします。

ruby

1response = HTTP.post("https://slack.com/api/rtm.start", params: { 2 token: ENV['SLACK_API_TOKEN'] 3 }) 4 5rc = JSON.parse(response.body) 6 7url = rc['url'] 8 9EM.run do 10 # Web Socketインスタンスの立ち上げ 11 ws = Faye::WebSocket::Client.new(url) 12 13 # 接続が確立した時の処理 14 ws.on :open do 15 p [:open] 16 end 17 18 ws.on :message do |event| 19 data = JSON.parse(event.data) 20 p [:message, data] 21 22#ここがわかりません 23 if data['text'] == 'Hello' 24 ws.send({ 25 type: 'message', 26 text: "Hello", 27 channel: data['channel'] 28 }.to_json) 29 end 30 31 end 32 # 接続が切断した時の処理 33 ws.on :close do 34 p [:close, event.code] 35 ws = nil 36 EM.stop 37 end 38 39end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

別解として。

Ruby

1if data['text'].to_s.match?(/hello/i)

とiオプションをつければ、大文字小文字関係なくマッチするようになります。
また、間に to_s はさむとnilが来ても平気です。

投稿2018/06/08 02:04

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

正規表現で一致するか判定しましょう

ruby

1 # とりあえず、HelloもしくはHELLOと一致する場合 2 if data['text'].match?(/Hello|HELLO/)

投稿2018/06/07 10:04

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satsukichan

2018/06/08 01:57 編集

実行すると undefined method `match?' for nil:NilClass (NoMethodError) エラーが表示されてしまいます。
asm

2018/06/08 02:03

data['text']がnilのケースがあるのでしょうか? もしそうならば if data['text']&.match?(/Hello|HELLO/) ですかね
satsukichan

2018/06/08 02:10

解決しました。ありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問