Compare commits

..

No commits in common. "4be5e867ccc408b32ed72ce24c1fa2673c20a729" and "e263e9732cb0fc575b6032467607719699aa06de" have entirely different histories.

4 changed files with 10 additions and 146 deletions

View File

@ -1,6 +1,6 @@
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const { getCoverURL, getGameJson } = require('../../igdbHelperFunctions.js');
const { checkGameStorage, getUserRegistration, createBeatenGameEntry, getBeatenGameCount } = require('../../databaseHelperFunctions.js');
const { checkUserRegistration, checkGameStorage, getUserRegistration, createBeatenGameEntry, getBeatenGameCount } = require('../../databaseHelperFunctions.js');
module.exports = {
data: new SlashCommandBuilder()
@ -8,14 +8,17 @@ module.exports = {
.setDescription('Log a game that you have beat towards the 100 game challenge!')
.addStringOption(option => option.setName('gamename').setDescription('The name of the game.'))
.addNumberOption(option => option.setName('gameid').setDescription('The IGDB game id.').setMinValue(0))
.addStringOption(option => option.setName('datebeaten').setDescription('The date you beat the game (today if empty).')),
.addStringOption(option => option.setName('datestarted').setDescription('The date you started playing the game (today if empty).'))
.addStringOption(option => option.setName('datebeaten').setDescription('The date you beat the game (today if empty).'))
.addStringOption(option => option.setName('platform').setDescription('The platform the game was released on.')),
async execute(interaction) {
if (!checkUserRegistration(interaction.user)) return interaction.reply(`Issue checking registration with "${interaction.user.username}".`);
const userDatabaseEntry = await getUserRegistration(interaction.user);
if (!userDatabaseEntry) return interaction.reply(`Issue checking registration with "${interaction.user.username}".`);
const gamename = interaction.options.getString('gamename');
const gameid = interaction.options.getNumber('gameid');
const platform = interaction.options.getString('platform');
if (!gamename && !gameid) return interaction.reply('No gamename or gameid supplied, please supply an option to register a game!');
@ -25,7 +28,6 @@ module.exports = {
body = body.concat('where id = ', gameid, '; ');
} else if (gamename) {
body = body.concat('search "', gamename, '"; ');
body = body.concat('limit 25; where (category = 0 | category = 4) & version_parent = null;');
}
body = body.concat('fields *;');
@ -34,21 +36,16 @@ module.exports = {
if (!res[0]) return interaction.reply('No game found for the options supplied.');
const game = res[0];
const release_date = game.first_release_date;
if (!release_date || (release_date * 1000) > Date.now()) return interaction.reply(`${game.name} is not yet released.`);
const gameDatabaseEntry = await checkGameStorage(game);
if (!(await createBeatenGameEntry(userDatabaseEntry, gameDatabaseEntry))) return interaction.reply(`${game.name} already beaten.`);
const gameDatabaseEntry = await checkGameStorage(res[0]);
await createBeatenGameEntry(userDatabaseEntry, gameDatabaseEntry);
const num = await getBeatenGameCount(userDatabaseEntry);
const coverUrl = await getCoverURL(game.cover);
const coverUrl = await getCoverURL(res[0].cover);
const embed = new EmbedBuilder()
.setColor(0xFFD700)
.setAuthor({ name: `${interaction.user.displayName} beat a new game!`, iconURL: interaction.user.avatarURL() })
.setTitle(`${game.name} beaten!`)
.setTitle(`${res[0].name} beaten!`)
.setThumbnail(`${coverUrl}`)
.setDescription(`${interaction.user.displayName} has beaten ${num} games, they have ${100 - num} games remaining.`)
.setFooter({ text: 'The Ochulus • 100 Games Challenge', iconURL: interaction.client.user.avatarURL() })

View File

@ -1,31 +0,0 @@
const { SlashCommandBuilder } = require('discord.js');
const { deleteBeatenGameId, getUserRegistration, deleteBeatenGameNum, checkGameStorageId } = require('../../databaseHelperFunctions.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('deletegameentry')
.setDescription('Delete a game that you have beaten from the 100 game challenge!')
.addNumberOption(option => option.setName('databaseentryid').setDescription('The beat game id.').setMinValue(1))
.addNumberOption(option => option.setName('beatgamenumber').setDescription('Index of the game to delete in the list of beaten games.').setMinValue(1).setMaxValue(100)),
async execute(interaction) {
const databaseEntryId = interaction.options.getNumber('databaseentryid');
const beatGameNumber = interaction.options.getNumber('beatgamenumber');
if (!databaseEntryId && !beatGameNumber) return interaction.reply('No parameters supplied');
const userDatabaseEntry = await getUserRegistration(interaction.user);
let result;
if (databaseEntryId) {
result = await deleteBeatenGameId(databaseEntryId, userDatabaseEntry);
} else if (beatGameNumber) {
result = await deleteBeatenGameNum(beatGameNumber, userDatabaseEntry);
}
if (result) {
const game = await checkGameStorageId(result.gameId);
return interaction.reply(`${game.name} successfully deleted`);
}
return interaction.reply('Unable to delete entry / No entry found.');
},
};

View File

@ -1,33 +0,0 @@
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
const { getLeaderboardEntries } = require('../../databaseHelperFunctions.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('leaderboard')
.setDescription('Show the leaderboard!'),
async execute(interaction) {
const leaderboard = await getLeaderboardEntries();
if (!leaderboard) return interaction.reply('There was a problem!');
await leaderboard.sort((a, b) => parseInt(b.count) - parseInt(a.count));
let desc = '';
for (let i = 0; i < leaderboard.length; i++) {
let newLine = '';
newLine = newLine.concat((i + 1), '. \t', leaderboard[i].username, ' - ', leaderboard[i].count, ' games\n');
desc = desc.concat(newLine);
}
const embed = new EmbedBuilder()
.setColor(0x6441a5)
.setTitle('The 100 Games Challenge Leaderboard!')
.setDescription(desc)
.setFooter({ text: 'The Ochulus • 100 Games Challenge', iconURL: interaction.client.user.avatarURL() })
.setTimestamp();
return interaction.reply({ embeds: [embed] });
},
};

View File

@ -65,17 +65,6 @@ async function checkGameStorage(game) {
return null;
}
async function checkGameStorageId(id) {
const g = await Games.findOne({ where: { id: id } })
.catch((err) => {
console.log(err);
});
if (g) return g;
return null;
}
async function createBeatenGameEntry(user, game) {
let bg = await BeatenGames.findOne({ where: { userId: user.id, gameId: game.id } })
.catch((err) => {
@ -110,68 +99,10 @@ async function getBeatenGameCount(user) {
return count;
}
async function deleteBeatenGameId(id, user) {
const bg = await BeatenGames.findOne({ where: { id: id, userId: user.id } })
.catch((err) => {
console.log(err);
});
if (!bg) return false;
const entry = bg;
await bg.destroy();
return entry;
}
async function deleteBeatenGameNum(num, user) {
const bg = await BeatenGames.findAll({ where: { userId: user.id } })
.catch((err) => {
console.log(err);
});
if (!bg) return false;
if (bg.length < num) return false;
const entry = bg[num - 1];
await bg[num - 1].destroy();
return entry;
}
async function getLeaderboardEntries() {
const users = await Users.findAll()
.catch((err) => {
console.log(err);
});
const results = [];
for (let i = 0; i < users.length; i++) {
const count = await BeatenGames.count({ where: { userId: users[i].id } });
const res = await Users.findOne({ where: { id: users[i].id } })
.catch((err) => {
console.log(err);
});
const username = res.username;
const fun = { username, count };
results.push(fun);
}
return results;
}
module.exports = {
checkUserRegistration,
getUserRegistration,
checkGameStorage,
createBeatenGameEntry,
getBeatenGameCount,
deleteBeatenGameId,
deleteBeatenGameNum,
checkGameStorageId,
getLeaderboardEntries,
};