この記事では、discord.jsでDISBOARD(https://disboard.org)のbump通知をしてくれる機能を作成します。
動作に必要なもの
- Node.js
- discord.js
- 24時間365日起動し続けることができるできる環境
→setTimeoutを使っているので再起動したら通知できないからです。
データベースとか使った方法もまた今度考えます。
反応対象をDISBOARDのみに
他のBotに反応すると困るので、IDで反応対象を絞ります。
client.on('message', async message => {
if (message.author.id === '302050872383242240') {
}
})
トリガーのメッセージを指定
message.embeds
でメッセージのEmbedが取得できます。
client.on('message', async message => {
if (message.author.id === '302050872383242240') {
if (message.embeds[0].description.match(/表示順をアップしたよ/) ||
message.embeds[0].description.match(/Bump done/) ||
message.embeds[0].description.match(/Bump effectué/) ||
message.embeds[0].description.match(/Bump fatto/) ||
message.embeds[0].description.match(/Podbito serwer/) ||
message.embeds[0].description.match(/Успешно поднято/) ||
message.embeds[0].description.match(/갱신했어/) ||
message.embeds[0].description.match(/Patlatma tamamlandı/) {
}
}
})
通知する
setTimeout
を使うことで、「○○ミリ秒後に実行する」が実現できます。
const { MessageEmbed } = require('discord.js')
client.on('message', async message => {
if (message.author.id === '302050872383242240') {
if (message.embeds[0].description.match(/表示順をアップしたよ/) ||
message.embeds[0].description.match(/Bump done/) ||
message.embeds[0].description.match(/Bump effectué/) ||
message.embeds[0].description.match(/Bump fatto/) ||
message.embeds[0].description.match(/Podbito serwer/) ||
message.embeds[0].description.match(/Успешно поднято/) ||
message.embeds[0].description.match(/갱신했어/) ||
message.embeds[0].description.match(/Patlatma tamamlandı/) {
message.channel.send(
new MessageEmbed()
.setTitle('Bumpが実行されました!')
.setDescription('2時間後にお知らせします。')
)
setTimeout(() => {
message.channel.send(
new MessageEmbed()
.setTitle('Bumpできます!')
.setDescription('`!d bump` でサーバーの掲載順を上にできます。')
)
}, 7200000)
}
}
})
Bumpに失敗した際に再度実行を促す
あと何分で再度実行できるか、ユーザーにお知らせします。
const { MessageEmbed } = require('discord.js')
client.on('message', async message => {
if (message.author.id === '302050872383242240') {
if (message.embeds[0].description.match(/表示順をアップしたよ/) ||
message.embeds[0].description.match(/Bump done/) ||
message.embeds[0].description.match(/Bump effectué/) ||
message.embeds[0].description.match(/Bump fatto/) ||
message.embeds[0].description.match(/Podbito serwer/) ||
message.embeds[0].description.match(/Успешно поднято/) ||
message.embeds[0].description.match(/갱신했어/) ||
message.embeds[0].description.match(/Patlatma tamamlandı/) {
message.channel.send(
new MessageEmbed()
.setTitle('Bumpが実行されました!')
.setDescription('2時間後にお知らせします。')
)
setTimeout(() => {
message.channel.send(
new MessageEmbed()
.setTitle('Bumpできます!')
.setDescription('`!d bump` でサーバーの掲載順を上にできます。')
)
}, 7200000)
}
} else if (message.embeds[0].description.match(/上げられるようになるまで/)) {
const splcontent_a = message.embeds[0].description.split('と')
const splcontent_b = splcontent_a[1].split('分')
const remaining_time = splcontent_b[0]
message.channel.send(
new MessageEmbed()
.setTitle('Bumpに失敗したようです...')
.setDescription(`${remaining_time}分後に再度実行できます。`)
)
}
})
コード全文
この記事で書いたコードの全文です。
const { MessageEmbed } = require('discord.js')
client.on('message', async message => {
if (message.author.id === '302050872383242240') {
if (message.embeds[0].description.match(/表示順をアップしたよ/) ||
message.embeds[0].description.match(/Bump done/) ||
message.embeds[0].description.match(/Bump effectué/) ||
message.embeds[0].description.match(/Bump fatto/) ||
message.embeds[0].description.match(/Podbito serwer/) ||
message.embeds[0].description.match(/Успешно поднято/) ||
message.embeds[0].description.match(/갱신했어/) ||
message.embeds[0].description.match(/Patlatma tamamlandı/) {
message.channel.send(
new MessageEmbed()
.setTitle('Bumpが実行されました!')
.setDescription('2時間後にお知らせします。')
)
setTimeout(() => {
message.channel.send(
new MessageEmbed()
.setTitle('Bumpできます!')
.setDescription('`!d bump` でサーバーの掲載順を上にできます。')
)
}, 7200000)
}
} else if (message.embeds[0].description.match(/上げられるようになるまで/)) {
const splcontent_a = message.embeds[0].description.split('と')
const splcontent_b = splcontent_a[1].split('分')
const remaining_time = splcontent_b[0]
message.channel.send(
new MessageEmbed()
.setTitle('Bumpに失敗したようです...')
.setDescription(`${remaining_time}分後に再度実行できます。`)
)
}
})
おわり
お読みいただきありがとうございました!
エラーやご指摘等ありましたら下のコメント欄までお願いします。
シェアもぜひ!
0 件のコメント:
コメントを投稿