💬
discord.js を使ったX(旧Twitter)の展開BOT
環境構築と使用言語
環境構築
npm init -y
npm i discord.js
使用言語
discord.js v14
なにをやるの?
ツイート共有URLをDiscordに送信すると、このようなツイート内容がなんなのかがURLを踏まないと分からないようになっています。
そこで、その共有URLが送信されたら投稿内容を分かりやすく表示させるBOTを作ろう!と、この記事を書いています。
どうやってやるの?
今回は、https://api.vxtwitter.com
というAPIを使用して作成していきます。
こちらが、作成した時の画像です。
コード
下記では部分的なコードを書きます。実際に動くコードが見たい場合は GitHub に投稿しているのでそちらをご覧ください。
まず、メッセージイベントを作成します
client.on(Events.MessageCreate, async (message) => {
//.....
});
送信されたメッセージが共有URLかを確認する
const matches = messageContent.match(/https:\/\/(twitter\.com|x\.com)\/[^/]+\/status\/\d+/);
もし共有URLであれば、パラメータを取得する
if (matches) {
const new_url = new URL(matches[0]);
const path = new_url.pathname;
}
APIを使用してデータを取得し、そのデータをEmbed形式で送信
fetch(`https://api.vxtwitter.com${path}`)
.then(response => {
if (!response.ok) {
throw new Error(response.statusText);
}
return response.json();
})
.then(async data => {
if (data.error) {
return;
}
const embed = new EmbedBuilder()
.setAuthor({
name: data.user_name,
iconURL: data.user_profile_image_url,
url: data.tweetURL
})
.setDescription(data.text)
.setFields(
{
name: '💘',
value: `${data.likes}`,
inline: true
},
{
name: '🔄 + 🗣️',
value: `${data.replies + data.retweets}`,
inline: true
},
)
.setColor('Green');
if (data.mediaURLs.length > 0) {
embed.setImage(data.mediaURLs[0]);
}
await message.channel.send({ embeds: [embed] });
})
.catch(error => console.error('Error:', error));
最後に
https://api.vxtwitter.com
のAPIを使用しているため、APIの提供が終了するとこの機能は使用できなくなります。
このプログラムは、 MITライセンスで、ライセンス所有者はFulxcore Technologiesです。
なお、MITライセンスの全文表記は省略します。
Discussion
とありますが,
の部分の正規表現を
/https:\/\/(?:twitter\.com|x\.com)(\/[^/]+\/status\/\d+)/
としたらで済むのではないでしょうか?
もう少し圧縮したもの↓
そのコードでも問題ないと思います!