Compare commits

...

2 Commits

Author SHA1 Message Date
Emily 823c1d4de8 oops forgot to turn on linter 2022-12-12 12:25:48 +11:00
Emily bd38870c44 oopsie forgot to turn on the linter 2022-12-12 12:25:34 +11:00
11 changed files with 108 additions and 112 deletions

View File

@ -2,19 +2,19 @@ module.exports = class Command {
constructor (name, category) { constructor (name, category) {
// Gateway stuff // Gateway stuff
this.name = name, this.name = name,
this.description = "No description provided.", this.description = 'No description provided.',
this.options = [], this.options = [],
this.permissions = { this.permissions = {
DEFAULT_MEMBER_PERMISSIONS: "SendMessages" DEFAULT_MEMBER_PERMISSIONS: 'SendMessages'
} };
this.dm_permission = false, this.dm_permission = false,
// Extra stuff Woomy uses internally // Extra stuff Woomy uses internally
this.category = category, this.category = category,
this.usage = "No usage information provided.", this.usage = 'No usage information provided.',
this.friendlyOptions = "No options provided." this.friendlyOptions = 'No options provided.',
this.enabled = true, this.enabled = true,
this.devOnly = false, this.devOnly = false,
this.cooldown = 2000 this.cooldown = 2000;
} }
run (client, interaction, data) { //eslint-disable-line no-unused-vars run (client, interaction, data) { //eslint-disable-line no-unused-vars

View File

@ -1,12 +1,12 @@
const Command = require("../../base/Command.js"); const Command = require('../../base/Command.js');
const replies = require('../../assets/replies.json'); const replies = require('../../assets/replies.json');
module.exports = class Ping extends Command { module.exports = class Ping extends Command {
constructor (name, category) { constructor (name, category) {
super (name, category) super (name, category);
this.name = name, this.name = name,
this.description = 'Check response time between Woomy and Discord', this.description = 'Check response time between Woomy and Discord',
this.category = category this.category = category;
} }
async run (client, interaction, data) { //eslint-disable-line no-unused-vars async run (client, interaction, data) { //eslint-disable-line no-unused-vars

View File

@ -1,32 +1,32 @@
const Command = require("../../base/Command.js"); const Command = require('../../base/Command.js');
module.exports = class Avatar extends Command { module.exports = class Avatar extends Command {
constructor (name, category) { constructor (name, category) {
super (name, category) super (name, category);
this.name = name, this.name = name,
this.description = 'View a full-sized version of someone\'s avatar.', this.description = 'View a full-sized version of someone\'s avatar.',
this.options = [ this.options = [
{ {
type: 6, type: 6,
name: "user", name: 'user',
description: "The user to get the avatar of." description: 'The user to get the avatar of.'
}, },
], ],
this.usage = "/avatar [user]" this.usage = '/avatar [user]',
this.friendlyOptions = "`user` - The user to get the avatar of (optional)", this.friendlyOptions = '`user` - The user to get the avatar of (optional)',
this.category = category this.category = category;
} }
async run (client, interaction, data) { //eslint-disable-line no-unused-vars async run (client, interaction, data) { //eslint-disable-line no-unused-vars
const target = await interaction.options.getUser('user') ?? interaction.user; const target = await interaction.options.getUser('user') ?? interaction.user;
const user = await client.users.fetch(target.id, {force: true}) const user = await client.users.fetch(target.id, {force: true});
const member = await interaction.guild.members.fetch(target.id, {force: true}) const member = await interaction.guild.members.fetch(target.id, {force: true});
const embed = new client.EmbedBuilder() const embed = new client.EmbedBuilder()
.setTitle(user.username + '#' + user.discriminator + "'s avatar") .setTitle(user.username + '#' + user.discriminator + '\'s avatar')
.setColor(user.hexAccentColor ?? member.displayHexColor) .setColor(user.hexAccentColor ?? member.displayHexColor)
.setDescription(`[Global avatar](${user.avatarURL({extension: "png", "size": 4096})})`) .setDescription(`[Global avatar](${user.avatarURL({extension: 'png', 'size': 4096})})`)
.setImage(member.displayAvatarURL({extension: "png", "size": 4096})); .setImage(member.displayAvatarURL({extension: 'png', 'size': 4096}));
await interaction.reply({embeds: [embed]}); await interaction.reply({embeds: [embed]});
} }

View File

@ -1,4 +1,4 @@
const Command = require("../../base/Command.js"); const Command = require('../../base/Command.js');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
const windrose = require('windrose'); const windrose = require('windrose');
const ISO2 = require('../../assets/ISO2.json'); const ISO2 = require('../../assets/ISO2.json');
@ -6,92 +6,92 @@ const ISO2 = require('../../assets/ISO2.json');
module.exports = class Weather extends Command { module.exports = class Weather extends Command {
constructor (name, category) { constructor (name, category) {
super (name, category) super (name, category);
this.name = name, this.name = name,
this.description = 'View the weather in a place ', this.description = 'View the weather in a place ',
this.options = [ this.options = [
{ {
type: 3, type: 3,
name: "city", name: 'city',
description: "The city to check the weather at", description: 'The city to check the weather at',
required: true required: true
}, },
{ {
type: 3, type: 3,
name: "country", name: 'country',
description: "The country the city is in", description: 'The country the city is in',
} }
], ],
this.category = category, this.category = category,
this.cooldown = 10000 this.cooldown = 10000;
}; }
async run (client, interaction, data) { //eslint-disable-line no-unused-vars async run (client, interaction, data) { //eslint-disable-line no-unused-vars
const city = await interaction.options.get('city').value; const city = await interaction.options.get('city').value;
let country = await interaction.options.get('country'); let country = await interaction.options.get('country');
let countryCode = ""; let countryCode = '';
if (country) { if (country) {
country = country.value; country = country.value;
countryCode += "," countryCode += ',';
if (ISO2.country[country.toProperCase().trim()]) { if (ISO2.country[country.toProperCase().trim()]) {
countryCode += ISO2.country[country.toProperCase().trim()]; countryCode += ISO2.country[country.toProperCase().trim()];
} else { } else {
countryCode += country.trim(); countryCode += country.trim();
} }
}; }
fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city + countryCode}&appid=${client.config.keys.weather}`, { headers: { 'User-Agent': client.config.userAgent }}) fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city + countryCode}&appid=${client.config.keys.weather}`, { headers: { 'User-Agent': client.config.userAgent }})
.then(res => res.json()) .then(res => res.json())
.then(json => { .then(json => {
if (json.cod >= 200 && json.cod <= 299) { if (json.cod >= 200 && json.cod <= 299) {
const tempCelsius = Math.round(json.main.temp - 273.15); const tempCelsius = Math.round(json.main.temp - 273.15);
let embedColor; let embedColor;
if (tempCelsius < 0) { if (tempCelsius < 0) {
embedColor = '#addeff'; embedColor = '#addeff';
} else if (tempCelsius < 20) { } else if (tempCelsius < 20) {
embedColor = '#4fb8ff'; embedColor = '#4fb8ff';
} else if (tempCelsius < 26) { } else if (tempCelsius < 26) {
embedColor = '#ffea4f'; embedColor = '#ffea4f';
} else if (tempCelsius < 31) { } else if (tempCelsius < 31) {
embedColor = '#ffa14f'; embedColor = '#ffa14f';
} else {
embedColor = '#ff614f';
}
const embed = new client.EmbedBuilder()
.setTitle('Current conditions in ' + city.toProperCase() + ', ' + ISO2.code[json.sys.country])
.setThumbnail(`https://openweathermap.org/img/wn/${json.weather[0].icon}@4x.png`)
.setColor(embedColor)
.addFields([
{ name: 'Condition:', value: json.weather[0].main, inline: true },
{ name: 'Temperature:', value: `${tempCelsius}°C ・ ${Math.round(json.main.temp * 9/5 - 459.67)}°F`, inline: true },
{ name: 'Min/Max:', value:`
${Math.round(json.main.temp_min - 273.15)}°C ${Math.round(json.main.temp_max - 273.15)}°C
${Math.round(json.main.temp_min * 9/5 - 459.67)}°F ${Math.round(json.main.temp_max * 9/5 - 459.67)}°F
`, inline: true},
{ name: 'Humidity:', value: `${json.main.humidity}%`, inline: true },
{ name: 'Wind Speed:', value: `${Math.round(json.wind.speed * 10) / 10}km/h ・ ${Math.round(json.wind.speed * 10 / 1.609344)}mi/h`, inline: true },
{ name: 'Wind Direction:', value: windrose.getPoint(json.wind.deg).name, inline: true}
])
.setFooter({ text: 'Powered by openweathermap.org'});
return interaction.reply({embeds: [embed]});
} else { } else {
embedColor = '#ff614f'; if (json.message && json.message === 'city not found') {
} return interaction.reply({
content: `${client.config.emojis.userError} ${city.toProperCase()} is not listed in my sources.`,
const embed = new client.EmbedBuilder() ephemeral: true
.setTitle('Current conditions in ' + city.toProperCase() + ', ' + ISO2.code[json.sys.country]) });
.setThumbnail(`https://openweathermap.org/img/wn/${json.weather[0].icon}@4x.png`) }
.setColor(embedColor) client.logger.error('WEATHER_COMMAND_ERROR', `API Error: ${json}`);
.addFields([
{ name: 'Condition:', value: json.weather[0].main, inline: true },
{ name: 'Temperature:', value: `${tempCelsius}°C ・ ${Math.round(json.main.temp * 9/5 - 459.67)}°F`, inline: true },
{ name: 'Min/Max:', value:`
${Math.round(json.main.temp_min - 273.15)}°C ${Math.round(json.main.temp_max - 273.15)}°C
${Math.round(json.main.temp_min * 9/5 - 459.67)}°F ${Math.round(json.main.temp_max * 9/5 - 459.67)}°F
`, inline: true},
{ name: 'Humidity:', value: `${json.main.humidity}%`, inline: true },
{ name: 'Wind Speed:', value: `${Math.round(json.wind.speed * 10) / 10}km/h ・ ${Math.round(json.wind.speed * 10 / 1.609344)}mi/h`, inline: true },
{ name: 'Wind Direction:', value: windrose.getPoint(json.wind.deg).name, inline: true}
])
.setFooter({ text: 'Powered by openweathermap.org'});
return interaction.reply({embeds: [embed]});
} else {
if (json.message && json.message === 'city not found') {
return interaction.reply({ return interaction.reply({
content: `${client.config.emojis.userError} ${city.toProperCase()} is not listed in my sources.`, content: `${client.config.emojis.botError} API error occurred: \`code ${json.cod}\``,
ephemeral: true ephemeral: true
}); });
}; }
client.logger.error('WEATHER_COMMAND_ERROR', `API Error: ${json}`) });
return interaction.reply({
content: `${client.config.emojis.botError} API error occurred: \`code ${json.cod}\``,
ephemeral: true
});
};
});
}; }
}; };

View File

@ -2,35 +2,35 @@
const { REST, Routes } = require('discord.js'); const { REST, Routes } = require('discord.js');
const { clientId, token } = require('../botconfig.json'); const { clientId, token } = require('../botconfig.json');
const guildId = "413591792185769984"; const guildId = '413591792185769984';
const read = require('fs-readdir-recursive'); const read = require('fs-readdir-recursive');
const commands = []; const commands = [];
const commandFiles = read('./commands').filter(file => file.endsWith('.js')); const commandFiles = read('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) { for (const file of commandFiles) {
const command = new (require(__dirname + '/commands/' + file))(file.substr(file.indexOf('/') + 1).slice(0, -3), file.substr(0, file.indexOf('/'))); const command = new (require(__dirname + '/commands/' + file))(file.substr(file.indexOf('/') + 1).slice(0, -3), file.substr(0, file.indexOf('/')));
commands.push({ commands.push({
name: command.name, name: command.name,
description: command.description, description: command.description,
options: command.options, options: command.options,
permissions: command.permissions, permissions: command.permissions,
dm_permission: command.dm_permission dm_permission: command.dm_permission
}); });
} }
const rest = new REST({ version: '10' }).setToken(token); const rest = new REST({ version: '10' }).setToken(token);
(async () => { (async () => {
try { try {
console.log(`Started refreshing ${commands.length} application (/) commands.`); console.log(`Started refreshing ${commands.length} application (/) commands.`);
const data = await rest.put( const data = await rest.put(
Routes.applicationGuildCommands(clientId, guildId), Routes.applicationGuildCommands(clientId, guildId),
{ body: commands }, { body: commands },
); );
console.log(`Successfully reloaded ${data.length} application (/) commands.`); console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
})(); })();

View File

@ -1,6 +1,6 @@
/* eslint-disable indent */ /* eslint-disable indent */
class EventHandler { class EventHandler {
constructor (client) { constructor (client) {
this.client = client; this.client = client;
} }

View File

@ -1,4 +1,4 @@
const Event = require("../../base/Event.js"); const Event = require('../../base/Event.js');
module.exports = class InteractionHandler extends Event { module.exports = class InteractionHandler extends Event {
constructor (wsEvent) { constructor (wsEvent) {
super (wsEvent); super (wsEvent);
@ -39,7 +39,7 @@ module.exports = class InteractionHandler extends Event {
return interaction.reply({ return interaction.reply({
content: `${client.config.emojis.wait} You need to wait ${cooldown - timePassed} seconds before using this command again.`, content: `${client.config.emojis.wait} You need to wait ${cooldown - timePassed} seconds before using this command again.`,
ephemeral: true ephemeral: true
}); });
} else { } else {
client.cooldowns.get(command.name).set(interaction.user.id, new Date()); client.cooldowns.get(command.name).set(interaction.user.id, new Date());
setTimeout(() => { setTimeout(() => {

View File

@ -1,4 +1,4 @@
const Event = require("../../base/Event.js"); const Event = require('../../base/Event.js');
const activities = require('../../assets/activities.json'); const activities = require('../../assets/activities.json');
module.exports = class Activity extends Event { module.exports = class Activity extends Event {
constructor (wsEvent) { constructor (wsEvent) {

View File

@ -1,4 +1,4 @@
const Event = require("../../base/Event.js"); const Event = require('../../base/Event.js');
module.exports = class Ready extends Event { module.exports = class Ready extends Event {
constructor (wsEvent) { constructor (wsEvent) {
super (wsEvent); super (wsEvent);

View File

@ -32,7 +32,7 @@ class Functions {
return Math.round((Math.random() * (max - min) + min)); return Math.round((Math.random() * (max - min) + min));
} }
randomColour () { randomColor () {
const n = (Math.random() * 0xfffff * 1000000).toString(16); const n = (Math.random() * 0xfffff * 1000000).toString(16);
return '#' + n.slice(0, 6); return '#' + n.slice(0, 6);
} }
@ -51,10 +51,6 @@ class Functions {
return role; return role;
} }
searchMembers (guild, input) {
}
embedColor (guild, member) { embedColor (guild, member) {
if (!member) { if (!member) {
return guild.members.cache.get(this.client.user.id).displayHexColor; return guild.members.cache.get(this.client.user.id).displayHexColor;

View File

@ -34,7 +34,7 @@ class Logger {
/** /**
* Log something related to being successful * Log something related to being successful
* @param {string} title The title of the log enty * @param {string} title The title of the log entry
* @param {string} body The body of the log entry * @param {string} body The body of the log entry
* @returns {void} * @returns {void}
*/ */
@ -44,7 +44,7 @@ class Logger {
/** /**
* Log something related to a warning * Log something related to a warning
* @param {string} title The title of the log enty * @param {string} title The title of the log entry
* @param {string} body The body of the log entry * @param {string} body The body of the log entry
* @returns {void} * @returns {void}
*/ */
@ -54,7 +54,7 @@ class Logger {
/** /**
* Log something related to an error * Log something related to an error
* @param {string} title The title of the log enty * @param {string} title The title of the log entry
* @param {string} body The body of the log entry * @param {string} body The body of the log entry
* @returns {void} * @returns {void}
*/ */
@ -64,7 +64,7 @@ class Logger {
/** /**
* Log something related to debugging * Log something related to debugging
* @param {string} title The title of the log enty * @param {string} title The title of the log entry
* @param {string} body The body of the log entry * @param {string} body The body of the log entry
* @returns {void} * @returns {void}
*/ */