「宝具」とメッセージするとモルガンの宝具セリフの3パターンからランダムに一つ返すLine BOTの作成について。
公式アカウント
ツール等
Azure App Service
node.js
VSCode (ソース作成とAzure AppServiceへのデプロイができます。)
Reference
Developer Consoleでいろいろ設定します。
botアプリを作ります。Azure AppServiceへデプロイします。
デプロイ方法だけ参照してください。(ExpressアプリでBotを作ったら応答メッセージが受信できませんでしたt)
コード
const https = require("https");
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
const TOKEN = process.env.LINE_ACCESS_TOKEN;
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
app.get("/", (req, res) => {
res.sendStatus(200);
});
/*
app.post("/webhook", function (req, res) {
res.send("HTTP POST request sent to the webhook URL!");
});
*/
app.post("/webhook", function (req, res) {
res.send("HTTP POST request sent to the webhook URL!");
// ユーザーがボットにメッセージを送った場合、応答メッセージを送る
if (req.body.events[0].type === "message") {
//乱数を求める
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
//乱数から宝具メッセージを作成する
const msgText = ((rand) => {
if(req.body.events[0].message.text === "宝具") {
if(rand > 0 && rand <= 1) {
return "「慈悲だ。頭を垂れよ。恐怖はない、希望もない、ただ罪人のように死ね。何人も──通るに能わず!」"
} else if (rand > 1 && rand <= 2){
return "「そう、いいでしょう。私の足元で許しを請いなさい。聖剣なぞ、この程度!落ちよ──『はや辿り着けぬ理想郷(ロードレス・キャメロット)』!」"
} else {
return "「それは絶えず見た滅びの夢──報いはなく、救いはない。最果てにありながら、鳥は明日を歌うでしょう。どうか標に──『はや辿り着けぬ理想郷(ロードレス・キャメロット)』」"
}
}
});
// APIサーバーに送信する応答トークンとメッセージデータを文字列化する
const dataString = JSON.stringify({
// 応答トークンを定義
replyToken: req.body.events[0].replyToken,
// 返信するメッセージを定義
messages: [
/*
{
type: "text",
text: "Hello, user",
},
{
type: "text",
text: "May I help you?",
},
*/
{
type: "text",
text: msgText(getRandomInt(1, 3)),
},
],
});
// リクエストヘッダー。仕様についてはMessaging APIリファレンスを参照してください。
const headers = {
"Content-Type": "application/json",
Authorization: "Bearer " + TOKEN,
};
// Node.jsドキュメントのhttps.requestメソッドで定義されている仕様に従ったオプションを指定します。
const webhookOptions = {
hostname: "api.line.me",
path: "/v2/bot/message/reply",
method: "POST",
headers: headers,
body: dataString,
};
// messageタイプのHTTP POSTリクエストが/webhookエンドポイントに送信された場合、
// 変数webhookOptionsで定義したhttps://api.line.me/v2/bot/message/replyに対して
// HTTP POSTリクエストを送信します。
// リクエストの定義
const request = https.request(webhookOptions, (res) => {
res.on("data", (d) => {
process.stdout.write(d);
});
});
// エラーをハンドリング
// request.onは、APIサーバーへのリクエスト送信時に
// エラーが発生した場合にコールバックされる関数です。
request.on("error", (err) => {
console.error(err);
});
// 最後に、定義したリクエストを送信
request.write(dataString);
request.end();
} else {
console.log("not message")
}
});
app.listen(PORT, () => {
console.log(`Example app listening at http://localhost:${PORT}`);
});