はじめに
こんにちは、なりかくんです。
今回は、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) {
// ここに処理を追加
}
コード全体
これがコード全体になります。まあ、非常に簡単なプログラムですね。
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);
}
}
});
});
}
実際に動かしてみる
試しに「お腹すいたぺこぺこ」と送ってみるとこのように飯テロをされます。
以上です、素晴らしく需要のないプログラムですがぜひ何かの参考にしていただければと思います。
最後までお読みいただきありがとうございました。