Merge pull request #193 from VermiumSifell/177-typescript

Typescript fixes
This commit is contained in:
Axel Olausson Holtenäs 2022-04-10 03:18:29 +02:00 committed by GitHub
commit eb1aa6c5ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 212 additions and 219 deletions

View file

@ -40,6 +40,7 @@
"node-schedule": "^2.1.0",
"pino": "^7.0.0-rc.9",
"quick.db": "^7.1.3",
"typescript": "^4.6.3",
"uuid": "^8.3.2"
},
"devDependencies": {

View file

@ -1,69 +0,0 @@
import i18next from 'i18next';
import config from '../../../../config.json';
import logger from '../../../handlers/logger';
import users from '../../../helpers/database/models/userSchema';
import { CommandInteraction } from 'discord.js';
export default async (interaction: CommandInteraction) => {
try {
// Destructure member
const { member } = await interaction;
// Get options
const target = await interaction.options.getUser('target');
// Get discord user object
const discordUser = await interaction.client.users.fetch(
`${target ? target.id : interaction?.user?.id}`
);
// Get user object
const userDB = await users.findOne({
userId: await discordUser?.id,
guildId: interaction?.guild?.id,
});
// Create embed object
const embed = {
author: {
name: `${await discordUser.username}#${await discordUser.discriminator}`,
icon_url: await discordUser.displayAvatarURL(),
},
color: config.colors.success as any,
fields: [
{
name: `:dollar: Credits`,
value: `${userDB.credits || 'Not found'}`,
inline: true,
},
{
name: `:squeeze_bottle: Level`,
value: `${userDB.level || 'Not found'}`,
inline: true,
},
{
name: `:squeeze_bottle: Points`,
value: `${userDB.points || 'Not found'}`,
inline: true,
},
{
name: `:loudspeaker: Reputation`,
value: `${userDB.reputation || 'Not found'}`,
inline: true,
},
{
name: `:rainbow_flag: Language`,
value: `${userDB.language || 'Not found'}`,
inline: true,
},
],
timestamp: new Date(),
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
return await interaction.editReply({ embeds: [embed] });
} catch (e) {
// Send debug message
await logger.error(e);
}
};

View file

@ -1,10 +1,15 @@
// Dependencies
import { SlashCommandBuilder } from '@discordjs/builders';
import view from './addons/view';
import { CommandInteraction } from 'discord.js';
// Modules
import view from './modules/view';
// Function
export default {
data: new SlashCommandBuilder()
.setName('profile')
.setDescription('Your profile.')
.setDescription('Check a profile.')
.addSubcommand((subcommand) =>
subcommand
.setName('view')
@ -16,9 +21,9 @@ export default {
)
),
async execute(interaction: CommandInteraction) {
// If subcommand is view
// Module - View
if (interaction.options.getSubcommand() === 'view') {
// Execute view addon
// Execute Module - View
await view(interaction);
}
},

View file

@ -0,0 +1,64 @@
import i18next from 'i18next';
import config from '../../../../config.json';
import logger from '../../../handlers/logger';
import users from '../../../helpers/database/models/userSchema';
import { CommandInteraction } from 'discord.js';
export default async (interaction: CommandInteraction) => {
// Destructure
const { client, options, user, guild } = interaction;
// Target information
const target = options?.getUser('target');
// Discord User Information
const discordUser = await client.users.fetch(
`${target ? target?.id : user?.id}`
);
// User Information
const userObj = await users.findOne({
userId: discordUser?.id,
guildId: guild?.id,
});
// Embed object
const embed = {
author: {
name: `${discordUser.username}#${discordUser.discriminator}`,
icon_url: discordUser.displayAvatarURL(),
},
color: config.colors.success as any,
fields: [
{
name: `:dollar: Credits`,
value: `${userObj.credits || 'Not found'}`,
inline: true,
},
{
name: `:squeeze_bottle: Level`,
value: `${userObj.level || 'Not found'}`,
inline: true,
},
{
name: `:squeeze_bottle: Points`,
value: `${userObj.points || 'Not found'}`,
inline: true,
},
{
name: `:loudspeaker: Reputation`,
value: `${userObj.reputation || 'Not found'}`,
inline: true,
},
{
name: `:rainbow_flag: Language`,
value: `${userObj.language || 'Not found'}`,
inline: true,
},
],
timestamp: new Date(),
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
return await interaction.editReply({ embeds: [embed] });
};

View file

@ -1,16 +1,19 @@
// Dependencies
import { SlashCommandBuilder } from '@discordjs/builders';
import { Permissions, CommandInteraction } from 'discord.js';
import logger from '../../handlers/logger';
import give from './addons/give';
import { CommandInteraction } from 'discord.js';
// Modules
import give from './modules/give';
// Function
export default {
data: new SlashCommandBuilder()
.setName('reputation')
.setDescription('Manage reputation.')
.setDescription('Give reputation.')
.addSubcommand((subcommand) =>
subcommand
.setName('give')
.setDescription('Give reputation for a user')
.setDescription('Give reputation to a user')
.addUserOption((option) =>
option
.setName('target')
@ -27,22 +30,13 @@ export default {
)
),
async execute(interaction: CommandInteraction) {
// Destructure member
const { member } = interaction;
// Destructure
const { options } = interaction;
// If subcommand is give
if (interaction.options.getSubcommand() === 'give') {
// Execute give addon
// Module - Give
if (options.getSubcommand() === 'give') {
// Execute Module - Give
await give(interaction);
}
// Send debug message
await logger.debug(
`Guild: ${interaction?.guild?.id} User: ${
interaction?.user?.id
} executed /${
interaction.commandName
} ${interaction.options.getSubcommand()}`
);
},
};

View file

@ -1,124 +1,122 @@
import i18next from 'i18next';
import { CommandInteraction } from 'discord.js';
import config from '../../../../config.json';
import logger from '../../../handlers/logger';
import users from '../../../helpers/database/models/userSchema';
import timeouts from '../../../helpers/database/models/timeoutSchema';
export default async (interaction: CommandInteraction) => {
// Destructure member
const { member } = interaction;
// Get options
const target = await interaction.options.getUser('target');
const type = await interaction.options.getString('type');
// Get user object
const userDB = await users.findOne({
userId: interaction?.user?.id,
guildId: interaction?.guild?.id,
});
// Check if user has a timeout
const isTimeout = await timeouts.findOne({
guildId: interaction?.guild?.id,
userId: interaction?.user?.id,
timeoutId: 2,
});
// If user is not on timeout
if (!isTimeout) {
// Do not allow self reputation
if (target?.id === interaction?.user?.id) {
// Create embed object
const embed = {
title: ':loudspeaker: Reputation - Give',
description: 'You can not repute yourself.',
timestamp: new Date(),
color: config.colors.error as any,
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
return interaction.editReply({ embeds: [embed] });
}
// If type is positive
if (type === 'positive') {
userDB.reputation += 1;
}
// If type is negative
if (type === 'negative') {
userDB.reputation -= 1;
}
// Save user
await userDB.save().then(async () => {
// Create embed object
const embed = {
title: ':loudspeaker: Reputation - Give',
description: `You have given ${target} a ${type} reputation!`,
timestamp: new Date(),
color: config.colors.success as any,
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
await interaction.editReply({ embeds: [embed] });
// Send debug message
await logger.debug(
`Guild: ${interaction?.guild?.id} User: ${interaction?.user?.id} has given ${target?.id} a ${type} reputation.`
);
// Create a timeout for the user
await timeouts.create({
guildId: interaction?.guild?.id,
userId: interaction?.user?.id,
timeoutId: 2,
});
});
setTimeout(async () => {
// send debug message
await logger.debug(
`Guild: ${interaction?.guild?.id} User: ${
interaction?.user?.id
} has not repute within last ${
config.reputation.timeout / 1000
} seconds, reputation can be given`
);
// When timeout is out, remove it from the database
await timeouts.deleteOne({
guildId: interaction?.guild?.id,
userId: interaction?.user?.id,
timeoutId: 2,
});
}, config.reputation.timeout);
} else {
// Create embed object
const embed = {
title: ':loudspeaker: Reputation - Give',
description: `You have given reputation within the last ${
config.reputation.timeout / 1000
} seconds, you can not repute now!`,
timestamp: new Date(),
color: config.colors.error as any,
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
await interaction.editReply({ embeds: [embed] });
// Send debug message
await logger.debug(
`Guild: ${interaction?.guild?.id} User: ${
interaction?.user?.id
} has repute within last ${
config.reputation.timeout / 1000
} seconds, no reputation can be given`
);
}
};
import i18next from 'i18next';
import { CommandInteraction } from 'discord.js';
import config from '../../../../config.json';
import logger from '../../../handlers/logger';
import users from '../../../helpers/database/models/userSchema';
import timeouts from '../../../helpers/database/models/timeoutSchema';
export default async (interaction: CommandInteraction) => {
// Destructure
const { options, user, guild } = interaction;
// Target information
const target = options.getUser('target');
// Type information
const type = options.getString('type');
// User information
const userObj = await users.findOne({
userId: user?.id,
guildId: guild?.id,
});
// Check if user has a timeout
const isTimeout = await timeouts.findOne({
guildId: guild?.id,
userId: user?.id,
timeoutId: 2,
});
// If user is not on timeout
if (!isTimeout) {
// Do not allow self reputation
if (target?.id === user?.id) {
// Embed object
const embed = {
title: ':loudspeaker: Reputation - Give',
description: 'You can not repute yourself.',
timestamp: new Date(),
color: config.colors.error as any,
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Return interaction reply
return interaction.editReply({ embeds: [embed] });
}
// If type is positive
if (type === 'positive') {
userObj.reputation += 1;
}
// If type is negative
if (type === 'negative') {
userObj.reputation -= 1;
}
// Save user
await userObj.save().then(async () => {
// Embed object
const embed = {
title: ':loudspeaker: Reputation - Give',
description: `You have given ${target} a ${type} reputation!`,
timestamp: new Date(),
color: config.colors.success as any,
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
await interaction.editReply({ embeds: [embed] });
// Log debug message
logger.debug(
`Guild: ${guild?.id} User: ${user?.id} has given ${target?.id} a ${type} reputation.`
);
// Create a timeout for the user
await timeouts.create({
guildId: guild?.id,
userId: user?.id,
timeoutId: 2,
});
});
setTimeout(async () => {
// send debug message
logger.debug(
`Guild: ${guild?.id} User: ${user?.id} has not repute within last ${
config.reputation.timeout / 1000
} seconds, reputation can be given`
);
// When timeout is out, remove it from the database
await timeouts.deleteOne({
guildId: guild?.id,
userId: user?.id,
timeoutId: 2,
});
}, config.reputation.timeout);
} else {
// Create embed object
const embed = {
title: ':loudspeaker: Reputation - Give',
description: `You have given reputation within the last ${
config.reputation.timeout / 1000
} seconds, you can not repute now!`,
timestamp: new Date(),
color: config.colors.error as any,
footer: { iconURL: config.footer.icon, text: config.footer.text },
};
// Send interaction reply
await interaction.editReply({ embeds: [embed] });
// Log debug message
logger.debug(
`Guild: ${guild?.id} User: ${user?.id} has repute within last ${
config.reputation.timeout / 1000
} seconds, no reputation can be given`
);
}
};

View file

View file

@ -23,7 +23,7 @@ export default {
try {
// Defer reply
await interaction.deferReply();
await interaction.deferReply({ ephemeral: true });
// Execute command
await command.execute(interaction);

View file

@ -1,4 +1,4 @@
import database from "./database.ts';
import database from './database';
import deployCommands from './deployCommands';
import dbGuildFix from './dbGuildFix';
import dbMemberFix from './dbMemberFix';

View file

@ -1,7 +1,7 @@
// Dependencies
import { Client, Intents } from 'discord.js'; // discord.js
import database from './helpers/database/index';
import database from './helpers/database';
import events from './handlers/events';
import commands from './handlers/commands';
import locale from './handlers/locale';