1
1

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 1 year has passed since last update.

【目指せ完走賞】なりかくんのDiscordAdvent Calendar 2022

Day 13

【13日目】discord.jsで「お腹空いた」と言ったら美味しそうな食べ物の画像を出す

Posted at

はじめに

こんにちは、なりかくんです。
今回は、discord.jsを使ってテキストチャンネルで「お腹空いた」という文字列が含まれたメッセージが送られたら美味しそうな食べ物の画像を出すプログラムを作ってみようと思います。

美味しそうな食べ物の画像を出す仕組み

今回は、TenorのAPIを使って「foods」というワードでランダムに検索してヒットした画像を出すという超簡単な仕組みにしようと思います。
TenorのAPIを使ったプログラムは、11日目に投稿していますので是非そちらをお読みください。

お腹空いたと関連付けたワードを用意する

今回は、関連ワードが何個メッセージに含まれているかでお腹が空いているかを判断します。
以下のように私はワードを配列化して用意しました。

const words = ["", "おなか", "空いた", "すいた", "減った", "へった", "ぺこぺこ", "すっかかん", "背中がくっついちゃう", "死ぬ", "やばい", "ぴえん"];

そして、以下のようなコードで何個含まれるかを確認します。なお、このコードが一番いい書き方では私は思っていません。
2個以上含まれた場合に、画像を送る処理をするプログラムになっています。

let wordCount = 0;
for (const word of words) {
    if (message.content.includes(word)) wordCount++;
}
if (wordCount > 1) {
    // ここに処理を追加
}

コード全体

これがコード全体になります。まあ、非常に簡単なプログラムですね。

index.js
const request = require("request");
const { Client, GatewayIntentBits, IntentsBitField } = require('discord.js');
const { token } = require('./config.json');

const client = new Client({ intents: [GatewayIntentBits.Guilds, IntentsBitField.Flags.GuildMessages, IntentsBitField.Flags.MessageContent] });

client.on('ready', () => {
	console.log(`${client.user.tag}でログインしました。`);
});

client.login(token);

const words = ["", "おなか", "空いた", "すいた", "減った", "へった", "ぺこぺこ", "すっかかん", "背中がくっついちゃう", "死ぬ", "やばい", "ぴえん"];

client.on('messageCreate', async message => {
	try {
        if (message.author.bot) return;
        let wordCount = 0;
        for (const word of words) {
            if (message.content.includes(word)) wordCount++;
        }
        if (wordCount > 1) {
            let gifUrl = await getGif("foods");
            if (!gifUrl) return;
            message.reply({
                embeds: [{
                    image: {
                        url: gifUrl
                    }
                }]
            });
        }
	} catch (error) {
		console.error(error);
	}
});

function getGif(query) {
    return new Promise((resolve, reject) => {
        request({
            url: `https://tenor.googleapis.com/v2/search?q=${query}&key=<API Key>&random=true`,
            json: true
        }, function (error, response, body) {
            if (error) {
                reject(error);
            } else {
                if (body.results.length != 0) {
                    resolve(body.results[0].media_formats.gif.url);
                } else {
                    resolve(null);
                }
            }
        });
    });
}

実際に動かしてみる

試しに「お腹すいたぺこぺこ」と送ってみるとこのように飯テロをされます。
image.png

以上です、素晴らしく需要のないプログラムですがぜひ何かの参考にしていただければと思います。
最後までお読みいただきありがとうございました。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?