forked from markrmessmore/ElihuBot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
111 lines (101 loc) · 4.38 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
const { Client, EmbedBuilder, GatewayIntentBits } = require('discord.js'),
discordClient = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent ]}),
moment = require('moment'),
RssFeedEmitter = require('rss-feed-emitter'),
settings = {
botId : "", //LISTED IN DISCORD AS APPLICATION ID
botName : "Elihu's RSS Bot",
discordToken : "",
guildID : "",
guildChannel : "",
refreshInterval : 30000, //IN MS - FOR MORE INFO SEE https://github.com/filipedeschamps/rss-feed-emitter
//WARNING - POLLING TOO OFTEN MAY LEAD TO YOU BEING BLOCKED FROM SOME SITES/SERVICES.
}
// START'ER UP
discordClient.login(settings.discordToken)
discordClient.on('ready', () => {
console.log(`Logged into Discord as ${settings.botName}`);
rssListener1(
{
img: "https://i.picsum.photos/id/237/200/300.jpg?hmac=TmmQSbShHz9CdQm0NkEjx1Dyh_Y984R9LpNrpvH2D_U",
url: 'https://lorem-rss.herokuapp.com/feed'
}
)
// rssListener2(
// {
// img: "https://i.picsum.photos/id/1012/3973/2639.jpg?hmac=s2eybz51lnKy2ZHkE2wsgc6S81fVD1W2NKYOSh8bzDc",
// url: 'https://lorem-rss.herokuapp.com/feed'
// }
// )
});
// DISCORD MESSAGE FUNCTION
const discordMessage = (msg) => {
let titles = new Set()
let limitDate = moment().subtract(7, 'days')
let dChannel = discordClient.channels.cache.get(settings.guildChannel)
//IF THE DATE OF THE POST IS LESS THAN 7 DAYS OLD...REVIEW
if (limitDate < moment(msg.date, "ddd MMM DD YYYY")){
//GATHER THE LAST 100 POSTS FROM THE CHANNEL POSTED BY THE BOT
dChannel.messages.fetch({limit: 100})
.then(res => {
// SELECT ONLY MESSAGES POSTED BY THE BOT (IN CASE ANY OTHER MESSAGES ARE POSTED IN THIS CHANNEL), THEN ADD THEM TO THE SET
return res.forEach(m => {
if (m.author.id === settings.botId && m.embeds.length > 0){
titles.add(m.embeds[0].title)
}
})
})
.then(() => {
//NOW THAT WE HAVE ALL THE TITLES IN THE SET, WE CHECK IF THIS TITLE IS PRESENT. IF IT IS NOT, WE SEND IT TO THE CHANNEL. THIS HELPS PREVENT DUPLCIATE POSTS
if (!titles.has(msg.title)) {
console.log(msg.title, msg.date)
let rssEmbed = new EmbedBuilder()
.setColor('#bb0000')
.setTitle(msg.title)
.setThumbnail(msg.img)
.addFields(
{name: "Link:", value: msg.link},
{name: "Published:", value: msg.date, inline: true}
)
dChannel.send({embeds: [rssEmbed]})
}
})
.catch(err => console.log(err))
}
}
// RSS FEED
const rssListener1 = (rssData) => {
let getRSS = new RssFeedEmitter({ skipFirstLoad: true })
console.log("Listening for RSS Updates!")
getRSS.add({
url: rssData.url,
refresh: settings.refreshInterval
});
getRSS.on('new-item', item => {
let mappedItem = {
date : item.date.toDateString(),
img : rssData.img,
link : item.link,
title : item.title
}
discordMessage(mappedItem)
})
};
// DUPLICATE RSS FEED, READY FOR YOUR USE
// const rssListener2 = (rssData) => {
// let getRSS = new RssFeedEmitter({ skipFirstLoad: true })
// console.log("Listening for RSS Updates on feed two!")
// getRSS.add({
// url: rssData.url,
// refresh: settings.refreshInterval
// });
// getRSS.on('new-item', item => {
// let mappedItem = {
// date : item.date.toDateString(),
// img : rssData.img,
// link : item.link,
// title : item.title
// }
// discordMessage(mappedItem)
// })
// };