-
Notifications
You must be signed in to change notification settings - Fork 0
/
bot.js
116 lines (92 loc) · 3.16 KB
/
bot.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
112
113
114
115
116
import { config } from "dotenv"
import { readFileSync, writeFileSync } from 'fs'
import { createTransport } from "nodemailer";
import { REST } from '@discordjs/rest';
import { API } from '@discordjs/core';
import { EmbedBuilder } from "discord.js";
config()
let data = JSON.parse(readFileSync('./data_template.json'))
let users = data['users']
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
const api = new API(rest);
let transporter = createTransport({
service: 'gmail',
auth: {
user: process.env.GMAIL_USER,
pass: process.env.GMAIL_PASS
}
})
/**
* send dm given username
* @param {string} globalName
* @param {EmbedBuilder} embed
*/
export async function sendDM(globalName, embed) {
const allMembers = await api.guilds.getMembers(process.env.GUILD_ID, { limit: 100 });
const member = allMembers.filter(member => member.user.username === globalName)[0];
const DMChannel = await api.users.createDM(member.user.id);
await api.channels.createMessage(DMChannel.id, { embeds: [embed] });
}
/**
* send email given email addr
* @param {string} email email addr
* @param {string} message message in addr
*/
export async function sendEmail(email, message) {
let transporter = createTransport({
service: 'Hotmail',
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS
}
})
let mailOptions = {
from: process.env.EMAIL_USER,
to: email,
subject: 'close ur window !',
text: message
}
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
console.log(error)
}
else {
console.log(info.response)
}
})
}
export async function emailUsers() {
users.forEach(user => {
if (!user['emailNotifs']) { return }
if (user.epoch < Date.now()) {
let message = `Your ${user.college} ${user.roomType} room has reached its desired temperature`
sendEmail(user.email, message)
}
})
}
/**
* runs through user list and dms users if window state needs to be updated
*/
export async function dmUsers() {
let data = JSON.parse(readFileSync('./data.json'))
let users = data['users']
console.log('Found users:', users)
users.forEach(user => {
if (!user?.username) return // No discord username submitted
const embed = new EmbedBuilder()
if (user.epoch < Date.now()) {
console.log('Telling', user.username, 'to close their windows')
embed.setAuthor({ name: 'WindowWise' })
.setTitle(`It's time to close your windows!`)
.setThumbnail(`https://i.imgur.com/UXbPmV2.png`)
.setColor('#5ddeec')
.setDescription(`Your ${user.college} ${user.roomType} room has reached its desired temperature.`)
sendDM(user.username, embed)
users = users.filter(u => u.username != user.username)
} else console.log('Not telling', user.username, 'to close their windows')
});
data.users = users
//update json
writeFileSync('./data.json', JSON.stringify(data))
}
dmUsers()