5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google FormsとDiscordでApex中毒の弟の勉強を監視する

Last updated at Posted at 2020-07-29

はじめに

中2の弟の塾の模擬テストの英語がヤバく、このままだと他のみんなに置いていかれてしまうというくらいになっていました。
僕はあまり勉強をしたり教えたりするのは得意ではないのですが、とりあえず教科書の本文を覚えてればある程度いけるんじゃないかと思い、弟の大好きなApex Legendsをするときは英語の教科書の勉強をしようみたいな軽いルールを決めました。(他にいいやり方があるかもしれないけどとりあえずこれにしようと思いました。)

とはいえApex Legendsの魔力は凄まじく、弟は学校から帰ると吸い取られるように僕の部屋のデスクトップPCに向かって座り、ついApexをスタートしてしまいます。

なので、狭い机に勉強用具を開かなくても弟が英語の勉強をできる & 弟がやったのかを監視できるので、Google Formsを使ってDiscordに通知が来るようにしました。

Formを作成

最初は、formを作成するところからスタートします。
image.png
こういう感じでformを作成しました。教科書本文のまんまです。

image.png 回答するとこのようにスコアが表示されます。

とりあえずformはこんな感じでいいと思います。
次はdiscordで色々と設定します。

Discord側での設定

Discordの方の操作に移ります。
まずは、
image.png
チャンネルの欄にある歯車を選択し、image.png
Integrationsを選択します。すると、Create Webhookというボタンが表示されるので、ここでWebhookを作っちゃいます。
image.png
適当にこんな感じで作ります。

これでDiscord側のWebhookの設定はできたので、次はformsのスクリプトエディタをいじります。

スクリプトエディタ

image.png **縦に3つ並んだ点**のボタンから、`スクリプトエディタ`を選択することができます。

エディタが開いたら、次のプログラムを貼り付けます。


var POST_URL = "WebHookのURL";

function onSubmit(e) {
    var form = FormApp.getActiveForm();
    var allResponses = form.getResponses();
    var latestResponse = allResponses[allResponses.length - 1];
    var response = latestResponse.getItemResponses();
    var items = [];

    for (var i = 0; i < response.length; i++) {
        var question = response[i].getItem().getTitle();
        var answer = response[i].getResponse();
        try {
            var parts = answer.match(/[\s\S]{1,1024}/g) || [];
        } catch (e) {
            var parts = answer;
        }

        if (answer == "") {
            continue;
        }
        for (var j = 0; j < parts.length; j++) {
            if (j == 0) {
                items.push({
                    "name": question,
                    "value": parts[j],
                    "inline": false
                });
            } else {
                items.push({
                    "name": question.concat(" (cont.)"),
                    "value": parts[j],
                    "inline": false
                });
            }
        }
    }

    var options = {
        "method": "post",
        "headers": {
            "Content-Type": "application/json",
        },
        "payload": JSON.stringify({
            "content": null, // This is not an empty string
            "embeds": [{
                "title": "TOP TEXT CHANGE THIS IN SCRIPT",
                "fields": items,
                "footer": {
                    "text": "BOTTOM TEXT CHANGE THIS IN SCRIPT"
                }
            }]
        })
    };

    UrlFetchApp.fetch(POST_URL, options);
};

そして、コードを保存します。
その次は、トリガーを設定します。

トリガー

image.png この時計マークのようなボタンをクリックして、トリガーの設定画面に遷移します。 image.png このような画面です。 image.png ここにこのようにトリガーを設定しました。

そして、最後に送信ボタンを押して、リンクを取得します。
image.png

動作確認

回答するとこういう感じで届きました。
image.png
最初は多少タイムラグが発生したりしていましたが、いじってくうちに勝手に消えました。

弟に使ってみた結果

ダメでした

PCを起動するとすぐにApexをしてしまいそこからはもう夢中になってしまっています。僕のFormsはあっけなくお蔵入りになってしまいました。恐るべしApex... 僕は下手なので長時間やれないんですが、相当惹きつけられるもののようです。
しかし、今回のformsテストはそこまで悪いアイデアではなかったと思うので、改良していつか弟を英語漬けにしてやろうと目論んでいます。

参考リンク

https://qrunch.net/@RabbitFromHat/entries/DLoihiUeHrq8efTb?ref=qrunch

5
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?