Skip to content
9 changes: 5 additions & 4 deletions scripts/help_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
def main():
client = gspread.authorize(CREDENTIALS)
sheet = client.open_by_key(SHEET_ID).sheet1
grupo = ' '.join(sys.argv[1])
cierre = sys.argv[2]
brindador = ' '.join(sys.argv[3:])
sheet.append_row([grupo, cierre, brindador])
fechaDeCreacion = sys.argv[1]
grupo = sys.argv[2]
cierre = sys.argv[3]
brindador = ' '.join(sys.argv[4:])
sheet.append_row([fechaDeCreacion, grupo, cierre, brindador])

if __name__ == "__main__":
main()
85 changes: 45 additions & 40 deletions src/client/Client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ import path from 'path';
import fs from 'fs';
import cron from 'node-cron';
import child_process from 'child_process';
import * as commands from '../commands/index.ts';
import * as events from '../events/index.ts';
import * as buttons from '../components/buttons/index.ts';
import * as embeds from '../components/embed_pages/index.ts';

class Bot extends Client {
public logger: Consola = consola;
Expand Down Expand Up @@ -44,64 +48,44 @@ class Bot extends Client {
private async loadCommands() {
this.logger.info(`Loading commands...`);

const commandFiles: string[] = fs
.readdirSync(path.resolve(__dirname, '../commands'))
.filter((file) => file.endsWith('.js'));

for (const file of commandFiles) {
const command: Command = require(`../commands/${file}`);
Object.values(commands).forEach(command => {
this.commands.set(command.data.name, command);
this.logger.success(`Command ${command.data.name} loaded.`);
}
});

this.logger.success(`Commands loaded.`);
}

private async loadEvents() {
this.logger.info(`Loading events...`);

const eventFiles = fs
.readdirSync(path.resolve(__dirname, '../events'))
.filter((file) => file.endsWith('.js'));

for (const file of eventFiles) {
const event = require(`../events/${file}`);
if (event.once) {
this.once(event.name, (...args) => event.execute(...args));
} else {
this.on(event.name, (...args) => event.execute(...args));
}
this.logger.success(`Listening to ${event.name} event.`);
}
Object.values(events).forEach(event => {
if (event.once) {
this.once(event.name, (...args) => event.execute(...args));
} else {
this.on(event.name, (...args) => event.execute(...args));
}
this.logger.success(`Listening to ${event.name} event.`);
});

this.logger.success(`Events loaded.`);
}

private async loadButtons() {
this.logger.info(`Loading buttons...`);

const buttonFiles: string[] = fs
.readdirSync(path.resolve(__dirname, '../components/buttons'))
.filter((file) => file.endsWith('.js'));

for (const file of buttonFiles) {
const button: Button = require(`../components/buttons/${file}`);

Object.values(buttons).forEach(button => {
this.buttons.set(button.data.customId!, button);
this.logger.success(`Button ${button.data.customId} loaded.`);
}
});

this.logger.success(`Buttons loaded.`);
}

public async loadEmbeds() {
this.logger.info(`Loading embeds...`);

const embedFiles: string[] = fs
.readdirSync(path.resolve(__dirname, '../components/embed_pages'))
.filter((file) => file.endsWith('.js'));

for (const file of embedFiles) {
const embed: EmbedPageInterface = require(`../components/embed_pages/${file}`);
Object.values(embeds).forEach(embed => {
this.embeds.set(embed.data.name, embed.data);
if (
embed.data.name === 'students' ||
Expand All @@ -113,7 +97,8 @@ class Bot extends Client {
await embed.data.send();
this.logger.success(`Embed ${embed.data.name} sent.`);
}
}
});


this.logger.success(`Sent ${this.embeds.size} embeds.`);
}
Expand Down Expand Up @@ -191,21 +176,41 @@ class Bot extends Client {
]);
}

public logHelp(creator: string, helper: string, end: string) {
public logHelp(
creationDate: Date,
creator: string,
helper: string,
end: string
) {
this.logger.info(
`Logging help asked by ${creator} helped by Grupo ${helper} (${end})`
`Logging help asked by ${helper} helped by Grupo ${creator} (${end})`
);
if (creator.split(' ').length > 1) {
creator = creator.split(' ')[1];
}
child_process.spawn('python3', [
`./scripts/help_logger.py`,
Bot.dateFromISO(
creationDate.toISOString(),
'America/Argentina/Buenos_Aires'
),
creator,
end,
helper,
]);
this.logger.success('Help logged.');
}

static dateFromISO(isoDate: string, timeZone: string) {
const date = new Date(isoDate);
return date.toLocaleTimeString('es-ES', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
hour12: false,
timeZone: timeZone,
});
}
}

export { Bot as AlgoBot };
4 changes: 4 additions & 0 deletions src/commands/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from "EmbedMessageCommand.ts"
export * from "GradesCommand.ts"
export * from "PapersCommand.ts"
export * from "RequestGroupRoleCommand.ts"
1 change: 1 addition & 0 deletions src/components/buttons/AnswerQueryButton.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const execute = async (interaction: ButtonInteraction) => {
);

client.logHelp(
interaction.createdAt,
group ? group.name.split(' ')[1] : consultee.displayName,
consultor.displayName,
'Brindada'
Expand Down
1 change: 1 addition & 0 deletions src/components/buttons/CancelQueryButton.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export const execute = async (interaction: ButtonInteraction) => {
});

client.logHelp(
interaction.createdAt,
group ? group.name.split(' ')[1] : member.displayName,
'-',
'Desestimada'
Expand Down
4 changes: 4 additions & 0 deletions src/components/buttons/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from 'AnswerQueryButton.ts'
export * from 'QueueQueryButton.ts'
export * from 'CancelQueryButton.ts'
export * from 'ReadmeButton.ts'
19 changes: 3 additions & 16 deletions src/components/embed_pages/ClassInfoEmbedPage.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { EmbedPage } from '../models/EmbedPage';
import { client } from '../../index';
import * as event from '../../../assets/event.json';
import { AlgoBot } from '../../client/Client';

export const data = new EmbedPage(
client,
Expand All @@ -22,10 +23,10 @@ export const data = new EmbedPage(
},
{
name: 'Detalles de la clase',
value: `Empieza el ${dateFromISO(
value: `Empieza el ${AlgoBot.dateFromISO(
event.start.dateTime,
event.start.timeZone
)} y termina el ${dateFromISO(
)} y termina el ${AlgoBot.dateFromISO(
event.end.dateTime,
event.end.timeZone
)}`,
Expand Down Expand Up @@ -56,20 +57,6 @@ export const data = new EmbedPage(
.roles.cache.get(client.config.studentRoleID)}`
);

function dateFromISO(isoDate: string, timeZone: string) {
const date = new Date(isoDate);
return date.toLocaleTimeString('es-ES', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
hour12: false,
timeZone: timeZone,
});
}

function extractTopicsFromEventDescription(eventDescription: string): string {
let classTopics = eventDescription.split('Temas a tratar: ')[1];
classTopics = classTopics.split('Paper a tener leído: ')[0];
Expand Down
5 changes: 5 additions & 0 deletions src/components/embed_pages/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export * from 'PapersEmbedPage.ts'
export * from 'ClassInfoEmbedPage.ts'
export * from 'ReadmeEmbedPage.ts'
export * from 'StudentsEmbedPage.ts'
export * from 'TeachersQueryQueueEmbedPage.ts'
9 changes: 3 additions & 6 deletions src/deploy-commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { Command } from './interfaces/Command';
import fs from 'fs';
import path from 'path';
import consola from 'consola';
import * as commandFiles from './commands/index.ts';

import dotenv from 'dotenv';
dotenv.config();
Expand All @@ -15,14 +16,10 @@ const commands: {
default_permission: boolean | undefined;
}[] = [];

const commandFiles: string[] = fs
.readdirSync(path.resolve(__dirname, 'commands'))
.filter((file) => file.endsWith('.js'));

for (const file of commandFiles) {
const command: Command = require(`./commands/${file}`);
Object.values(commandFiles).forEach(command => {
commands.push(command.data.toJSON());
}
});

const rest = new REST({ version: '9' }).setToken(process.env.TOKEN as string);

Expand Down
9 changes: 9 additions & 0 deletions src/events/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export * from 'DebugEvent.ts'
export * from 'ErrorEvent.ts'
export * from 'GuildMemberAddEvent.ts'
export * from 'GuildMemberRemoteEvent.ts'
export * from 'InteractionCreateEvent.ts'
export * from 'MessageCreateEvent.ts'
export * from 'ReadyEvent.ts'
export * from 'VoiceStateUpdate.ts'
export * from 'WarnEvent.ts'