6
6

More than 3 years have passed since last update.

【Ruby】discordの対話botを作成する

Posted at

はじめに

ゲーマーには必須アプリとも呼ばれるdiscordにて、究極の暇つぶし 勉強のために対話botをつくってみました。
今回はA3RTというサービスのAPIを使用しています。
Rubyでのbot作成記事が少なかったため、何かしらの参考になれば幸いです。

事前準備

下記の準備は完了しておいてください。
・Discord bot作成
こちらの記事で丁寧に説明されておりましたので、割愛いたします。

・A3RT APIライセンス発行
ここからA3RTのTalkAPIライセンスを発行できますので、案内に沿って発行を行います。
必要なものはメールアドレスのみなので、簡単に発行できます。

・開発環境にdiscordのgemをインストール
gem install discordrb
https://github.com/discordrb/discordrb

開発

Discordメッセージ取得部作成

bot.rb
require 'discordrb'
bot = Discordrb::Commands::CommandBot.new token: 'botのトークンを記載',
  client_id: 'botのIDを記載'

# 何かメッセージが送信されたら実行
bot.message do |event|
  event.respond 'hogehuga!'
end

bot.run

①必要事項の記入
上記テンプレートに下記の環境変数を記載してください。
・token
・id

②イベント発火
テキストチャンネルで適当な文字を入力すると「hogehuga!」と返してくれるようになります。
現状では単なるhogehugaボットなので、ここから命を吹き込んであげたいと思います。
Animation2.gif

API通信部作成(POST)

bot.rb
require 'discordrb'
require 'uri' #HTTP通信をするため追加

bot = Discordrb::Commands::CommandBot.new token: 'botのトークンを記載',
  client_id: 'botのIDを記載'

#A3RTのAPI URLとライセンスキーを記載
api_url = "https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk"
api_key = "ライセンスキー"

bot.message do |event|

  #Discordチャットのメッセージを取得
  get_message = event.message.to_s

 #API通信
  uri = URI.parse(api_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  req = Net::HTTP::Post.new(uri.path)
  req.set_form_data({'apikey' => api_key, 'query' => get_message})
  res = http.request(req)
  result = JSON.parse(res.body)

 #レスポンスの取得
  message = result["status"] == 0 ? result["results"][0]["reply"] : "error";

  event.respond message
end

bot.run

①必要事項の記入
下記要点を記入してください。
・api_url(共通です)
・api_key(事前に発行したTalkAPIライセンスキー)

この状態でメッセージを入力すると、正常に稼働すれば下記形式でレスポンスが返ってきます。

{
    status: 0,
    message: "ok",
    results: [{
        perplexity: 2.3688167429546714,
        reply: "おはようございます"
    }],
}

動作確認

Animation1.gif
(天気と趣味は会話の鉄板ネタです。)
まぁまぁドライな対応ですが、なんとなく会話はできていそうです!

最後に

一昔前にLINEでお喋りbotがでたときは半日もお喋りしていたことを思い出します。。。
最近ではお喋りbotが当たり前になってきて、簡単に自作できるようになり時代の流れの速さを実感しますね。。。
ちゃんと会話になっている点も多いので、是非作ってみてはいかがでしょうか!

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6