2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モルガンの宝具セリフをランダムに返すbot

Last updated at Posted at 2024-08-16

「宝具」とメッセージするとモルガンの宝具セリフの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}`);
});

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?