はじめに
ゲーマーには必須アプリとも呼ばれるdiscordにて、究極の暇つぶし 勉強のために対話botをつくってみました。
今回はA3RTというサービスのAPIを使用しています。
Rubyでのbot作成記事が少なかったため、何かしらの参考になれば幸いです。
事前準備
下記の準備は完了しておいてください。
・Discord bot作成
こちらの記事で丁寧に説明されておりましたので、割愛いたします。
・A3RT APIライセンス発行
ここからA3RTのTalkAPIライセンスを発行できますので、案内に沿って発行を行います。
必要なものはメールアドレスのみなので、簡単に発行できます。
・開発環境にdiscordのgemをインストール
gem install discordrb
https://github.com/discordrb/discordrb
#開発
###Discordメッセージ取得部作成
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ボットなので、ここから命を吹き込んであげたいと思います。
###API通信部作成(POST)
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: "おはようございます"
}],
}
###動作確認
(天気と趣味は会話の鉄板ネタです。)
まぁまぁドライな対応ですが、なんとなく会話はできていそうです!
#最後に
一昔前にLINEでお喋りbotがでたときは半日もお喋りしていたことを思い出します。。。
最近ではお喋りbotが当たり前になってきて、簡単に自作できるようになり時代の流れの速さを実感しますね。。。
ちゃんと会話になっている点も多いので、是非作ってみてはいかがでしょうか!