UntisBot/src/index.ts

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
}
};