forked from Lea/UntisBot
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import * as dotenv from 'dotenv';
|
|
dotenv.config();
|
|
|
|
import Discord from 'discord.js';
|
|
import Enmap from 'enmap';
|
|
import fs from 'fs';
|
|
import * as WebUntis from 'webuntis';
|
|
|
|
const untis = new WebUntis.default(
|
|
process.env.SCHOOLNAME,
|
|
process.env.USERNAME,
|
|
process.env.PASSWORD,
|
|
process.env.BASEURL
|
|
);
|
|
|
|
console.log('Discord Bot: Logging in');
|
|
const client = new Discord.Client();
|
|
client.login(process.env.BOT_TOKEN);
|
|
client.on('ready', () => console.log(`Discord Bot: Logged in as ${client.user.tag}`));
|
|
|
|
const seenMessages = new Enmap({ name: "seenMessages" });
|
|
const knownLessons = new Enmap({ name: "knownLessons" });
|
|
|
|
const defaultEmbedColor = 0xFF9A00;
|
|
|
|
|
|
// Periodically attempt to connect to untis and fetch timetable updates
|
|
let fetchUpdates = () => {
|
|
console.log('Untis: Logging in');
|
|
try {
|
|
untis.login()
|
|
.then(() => {
|
|
console.log(`Untis: Logged in`)
|
|
|
|
fs.readdirSync(`${__dirname}/modules`).filter(file => file.endsWith('.js')).forEach(file => {
|
|
require(`${__dirname}/modules/${file}`).run();
|
|
});
|
|
|
|
setTimeout(() => untis.logout().then(() => console.log('Untis: Logged out')), 10000);
|
|
});
|
|
} catch(e) {
|
|
console.error(e);
|
|
}
|
|
}
|
|
|
|
fetchUpdates();
|
|
setInterval(fetchUpdates, 120000);
|
|
|
|
|
|
async function sendEmbed(embed: Discord.MessageEmbed) {
|
|
const channel = await client.channels.fetch(process.env.CHANNEL) as Discord.DMChannel;
|
|
if (!channel) throw `ERROR: Could not find channel`;
|
|
|
|
if (!embed.timestamp) embed.setTimestamp();
|
|
channel.send(embed).catch(console.error);
|
|
}
|
|
|
|
export default {
|
|
untis: untis,
|
|
bot: client,
|
|
defaultEmbedColor: defaultEmbedColor,
|
|
sendEmbed: sendEmbed,
|
|
db: {
|
|
seenMessages: seenMessages,
|
|
knownLessons: knownLessons
|
|
}
|
|
}; |