Update discord.js dependency to version 14 (#116)

* Update discord.js in package.json to v14.16.3 & update package-lock.json

* Update all embeds to work with v14

* Do not show discriminator if it is 0
This commit is contained in:
SileNce5k 2024-10-22 07:36:10 +02:00
parent c751a5aec2
commit 062e6d43dc
Signed by: SileNce
GPG key ID: B0A142BB4291B204
14 changed files with 1306 additions and 2437 deletions

View file

@ -19,13 +19,22 @@ module.exports = {
switch (presenceType) {
case "PLAY":
presenceType = "PLAYING";
presenceType = 0;
break;
case "LISTEN":
presenceType = "LISTENING";
presenceType = 2;
break;
case "WATCH":
presenceType = "WATCHING";
presenceType = 3;
break;
case "CUSTOM":
presenceType = 4;
break;
case "COMPETING":
presenceType = 5;
break;
case "STREAM":
presenceType = 1;
break;
default:
presenceType = "INVALID";

View file

@ -1,24 +1,24 @@
const Discord = require('discord.js');
const getCreationDate = require('../../util/getCreationDate');
const getGuildCount = require('../../util/getGuildCount');
module.exports = {
name: 'botinfo',
description: 'Shows information about the bot',
execute({message, client, prefix}) {
let guildCount = getGuildCount(client)
const embed = new Discord.MessageEmbed()
.setColor(15780145)
.setTitle("Information about bot")
.setTimestamp()
.setAuthor(client.user.username, client.user.avatarURL({ dynamic: true, size: 4096 }))
.addFields({
name: "General info", value: `Name: ${client.user.username}\nPrefix: ${prefix}\nTotal Servers: ${guildCount}\nTotal Commands: ${client.commands.size}\nCreation Date: ${getCreationDate(client)}\nSource: [Click Here](https://github.com/SileNce5k/discord_bot)`,
},)
message.channel.send({embeds :[embed]})
}
const {EmbedBuilder} = require('discord.js');
const getCreationDate = require('../../util/getCreationDate');
const getGuildCount = require('../../util/getGuildCount');
module.exports = {
name: 'botinfo',
description: 'Shows information about the bot',
execute({message, client, prefix}) {
let guildCount = getGuildCount(client)
const embed = new EmbedBuilder()
.setColor(15780145)
.setTitle("Information about bot")
.setTimestamp()
.setAuthor({name: client.user.username, iconURL: client.user.avatarURL({ format: 'png', dynamic: true, size: 2048 })})
.addFields({
name: "General info", value: `Name: ${client.user.username}\nPrefix: ${prefix}\nTotal Servers: ${guildCount}\nTotal Commands: ${client.commands.size}\nCreation Date: ${getCreationDate(client)}\nSource: [Click Here](https://github.com/SileNce5k/discord_bot)`,
},)
message.channel.send({embeds :[embed]})
}
};

View file

@ -1,97 +1,97 @@
const fs = require('fs');
const Discord = require('discord.js');
const getSubdirFiles = require('../../util/getSubdirFiles');
module.exports = {
name: 'help',
description: 'List all available commands.',
moreHelp: ["Examples:","`<prefix>help [optional_page]` will return help with a small description for each command",
"`<prefix>help <another_command>` will return help with a more descriptive description",
"The descriptive description isn't available on all commands",
"`<prefix>help netmodules` to display help for netmodules"
],
execute({ message, args, prefix, client }) {
let commands = ""
let commandFiles = getSubdirFiles('commands/')
let x = false;
let fieldName = `Page [[page]]/${Math.round(client.commands.size / 10)}`;
let iteration = 0;
let num_in_args = false;
let added_commands = 0;
let page = -1;
if (args[0] == "netmodules") {
commandFiles = fs.readdirSync('../../netload').filter(file => file.endsWith('.js'));
if (commandFiles.length == 0) {
message.channel.send("There are no netmodules currently loaded.")
x = true;
}
}else if(!isNaN(parseInt(args[0])) && parseInt(args[0])){
num_in_args = true;
iteration = ( parseInt(args[0]) - 1) * 10;
page = Math.round(parseInt(args[0]))
}
if(page === -1){
page = 1;
}
fieldName = fieldName.replace("[[page]]", page);
const max_commands = iteration + 10;
if (x) return;
const embed = new Discord.MessageEmbed()
.setColor(15780145)
.setTitle("Commands")
.setTimestamp()
.setAuthor(client.user.username, client.user.avatarURL({ dynamic: true, size: 4096 }))
let start = 0;
for (const file of commandFiles) {
if(iteration >= max_commands) break;
const command = require(`../../${file}`);
if(command.disabled) continue;
if (args[0] == "admin") {
if (command.admin)
commands = commands + `${prefix}${command.name} | ${command.description}\n`
}else if(!args[0] || num_in_args){
if (!command.admin){
if(start < iteration){
}else{
added_commands++
commands = commands + `${prefix}${command.name} | ${command.description}\n`;
iteration++
}
start++;
}
}else if(args[0] === command.name){
commands = commands + `${prefix}${command.name}\n`
embed.setTitle(command.name.charAt(0).toUpperCase() + command.name.slice(1))
if(command.moreHelp){
command.moreHelp.forEach(element => {
commands = commands + `${element}\n`
});
} else {
fieldName = "Description";
commands = commands + `${command.description}`;
}
break;
}
}
if(commands === ""){
fieldName = "Command not found";
commands = "No command with that name found."
}
let regex = /<prefix>/g;
commands = commands.replace(regex, prefix)
embed.addFields(
{ name: fieldName, value: commands },
)
if(embed.fields[0].value.length > 1023){
message.channel.send(`There are more than 1023 characters`)
}else {
message.channel.send({embeds :[embed]});
}
},
const fs = require('fs');
const {EmbedBuilder} = require('discord.js');
const getSubdirFiles = require('../../util/getSubdirFiles');
module.exports = {
name: 'help',
description: 'List all available commands.',
moreHelp: ["Examples:","`<prefix>help [optional_page]` will return help with a small description for each command",
"`<prefix>help <another_command>` will return help with a more descriptive description",
"The descriptive description isn't available on all commands",
"`<prefix>help netmodules` to display help for netmodules"
],
execute({ message, args, prefix, client }) {
let commands = ""
let commandFiles = getSubdirFiles('commands/')
let x = false;
let fieldName = `Page [[page]]/${Math.round(client.commands.size / 10)}`;
let iteration = 0;
let num_in_args = false;
let added_commands = 0;
let page = -1;
if (args[0] == "netmodules") {
commandFiles = fs.readdirSync('../../netload').filter(file => file.endsWith('.js'));
if (commandFiles.length == 0) {
message.channel.send("There are no netmodules currently loaded.")
x = true;
}
}else if(!isNaN(parseInt(args[0])) && parseInt(args[0])){
num_in_args = true;
iteration = ( parseInt(args[0]) - 1) * 10;
page = Math.round(parseInt(args[0]))
}
if(page === -1){
page = 1;
}
fieldName = fieldName.replace("[[page]]", page);
const max_commands = iteration + 10;
if (x) return;
const embed = new EmbedBuilder()
.setColor(15780145)
.setTitle("Commands")
.setTimestamp()
.setAuthor({name: client.user.username, iconURL: client.user.avatarURL({ format: 'png', dynamic: true, size: 2048 })})
let start = 0;
for (const file of commandFiles) {
if(iteration >= max_commands) break;
const command = require(`../../${file}`);
if(command.disabled) continue;
if (args[0] == "admin") {
if (command.admin)
commands = commands + `${prefix}${command.name} | ${command.description}\n`
}else if(!args[0] || num_in_args){
if (!command.admin){
if(start < iteration){
}else{
added_commands++
commands = commands + `${prefix}${command.name} | ${command.description}\n`;
iteration++
}
start++;
}
}else if(args[0] === command.name){
commands = commands + `${prefix}${command.name}\n`
embed.setTitle(command.name.charAt(0).toUpperCase() + command.name.slice(1))
if(command.moreHelp){
command.moreHelp.forEach(element => {
commands = commands + `${element}\n`
});
} else {
fieldName = "Description";
commands = commands + `${command.description}`;
}
break;
}
}
if(commands === ""){
fieldName = "Command not found";
commands = "No command with that name found."
}
let regex = /<prefix>/g;
commands = commands.replace(regex, prefix)
embed.addFields(
{ name: fieldName, value: commands },
)
if(embed.data.fields[0].value.length > 1023){
message.channel.send(`There are more than 1023 characters`)
}else {
message.channel.send({embeds :[embed]});
}
},
};

View file

@ -1,23 +1,27 @@
const Discord = require('discord.js');
const convertDateToISOString = require('../../util/convertDateToISOString');
module.exports = {
name: 'serverinfo',
description: 'Displays information about the server',
execute({message}) {
const embed = new Discord.MessageEmbed()
.setThumbnail(message.guild.iconURL({ format: 'png', dynamic: true, size: 4096 }))
.setColor("#ee7939")
.setTimestamp()
.addField("Server Owner: ", `<@${message.guild.ownerId}>`)
.addField("Server Name: ", message.guild.name)
.addField("Created", convertDateToISOString(message.guild.createdAt))
.addField("Members: ", message.guild.memberCount.toString())
//.addField("Emojis: ", message.guild.emojis.cache.array().length)
message.channel.send({embeds :[embed]});
}
const {EmbedBuilder} = require('discord.js');
const convertDateToISOString = require('../../util/convertDateToISOString');
module.exports = {
name: 'serverinfo',
description: 'Displays information about the server',
execute({message}) {
const embed = new EmbedBuilder()
.setThumbnail(message.guild.iconURL({ format: 'png', dynamic: true, size: 4096 }))
.setColor("#ee7939")
.setTimestamp()
.addFields([
{name: "Server Owner", value: `<@${message.guild.ownerId}>`, inline: false},
{name: "Server Name", value: message.guild.name, inline: false},
{name: "Created", value: convertDateToISOString(message.guild.createdAt), inline: false},
{name: "Members", value: message.guild.memberCount.toString(), inline: false},
])
//.addField("Emojis: ", message.guild.emojis.cache.array().length)
message.channel.send({embeds :[embed]});
}
};

View file

@ -1,4 +1,4 @@
const Discord = require('discord.js');
const {EmbedBuilder} = require('discord.js');
const getCreationDate = require('../../util/getCreationDate.js');
const getJoinDate = require('../../util/getJoinDate.js');
const getNickname = require('../../util/getNickname.js');
@ -39,7 +39,8 @@ module.exports = {
}
status = user.presence.status.charAt(0).toUpperCase()+user.presence.status.slice(1)
}
}
if(status === "Dnd") status = "Do Not Disturb";
let roles = "";
user.roles.cache.each(role => {
if (role.name != "@everyone")
@ -48,23 +49,32 @@ module.exports = {
let discriminator = user.user.discriminator;
if(discriminator === "0")
discriminator = "";
let username = `**${user.user.username}#${user.user.discriminator}**${nickname}`
const embed = new Discord.MessageEmbed()
else
discriminator = `#${discriminator}`;
let username = `**${user.user.username}${discriminator}**${nickname}`;
const embed = new EmbedBuilder()
.setThumbnail(user.user.avatarURL({ format: 'png', dynamic: true, size: 2048 }))
.setColor(roleColor)
.setTimestamp()
.setAuthor(user.user.username, user.user.avatarURL({ format: 'png', dynamic: true, size: 2048 }))
.addField("Username", username)
.addField("Status", status, false)
if(isPresence)
embed.addField("Presence", user.presence.activities[0].name, false)
if(presenceDetails != 0)
embed.addField("Details", presenceDetails.toString(), false)
embed.addField("Creation date", getCreationDate(user), true)
embed.addField("Join date", getJoinDate(user, message.guild), true)
if(roles != ""){
embed.addField("Roles", roles)
}
.setAuthor({name: user.user.username, iconURL: user.user.avatarURL({ format: 'png', dynamic: true, size: 2048 })})
.addFields([
{ name: "Username", value: username, inline: false },
]);
if (isPresence)
embed.addFields([{name: "Presence", value: user.presence.activities[0].name, inline: false}])
if (presenceDetails != 0){
embed.addFields([{name: "Details", value: presenceDetails.toString(), inline: false}])
embed.addFields([{name: "Status", value: status, inline: true }])
}
else
embed.addFields([{ name: "Status", value: status, inline: false }])
embed.addFields([
{ name: "Creation date", value: getCreationDate(user), inline: true },
{ name: "Join date", value: getJoinDate(user, message.guild), inline: true }
])
if (roles != "") {
embed.addFields({name: "Roles", value: roles, inline: false})
}
message.channel.send({embeds :[embed]});
}

View file

@ -1,97 +1,97 @@
const addCustomCommand = require("../../util/custom_commands/addCustomCommand");
const deleteCustomCommand = require("../../util/custom_commands/deleteCustomCommand");
const getAllCustomCommands = require("../../util/custom_commands/getAllCustomCommands");
const getOwnerOfCustomCommand = require("../../util/custom_commands/getOwnerOfCustomCommand");
const renameCustomCommand = require("../../util/custom_commands/renameCustomCommand");
const Discord = require('discord.js');
const fs = require('fs');
const editCustomCommand = require("../../util/custom_commands/editCustomCommand");
module.exports = {
name: 'custom',
description: "Manage custom commands, see <prefix>help custom for more",
moreHelp: ["<prefix>custom add - Add new custom commands",
"<prefix>custom edit - Edit an existing command that you own",
"<prefix>custom rename - Rename an existing command that you own",
"<prefix>custom show - Show custom message unformatted.",
"<prefix>custom remove - Delete your custom commands.",
"<prefix>custom owner - check owner of custom command",
"<prefix>custom list - list all custom commands",
"<prefix>custom variables - list all variables you can use"
],
execute({message, args, client, prefix, owners}) {
const customPath = 'data/customCommands.json';
if(!fs.existsSync(customPath)){
fs.writeFileSync(customPath,"[]")
}
let sendText;
let isEmbed = false;
if (args){
let customName = args[1];
let customMessage = args.slice(2, args.length).join(" ");
switch (args[0].toLowerCase()) {
case "add":
if(!customMessage) {
message.channel.send("Message can't be empty");
return;
}
sendText = addCustomCommand(customName, customMessage, message.author.id);
break;
case "remove":
case "delete":
sendText = deleteCustomCommand(customName, message.author.id, owners);
break;
case "owner":
let author = getOwnerOfCustomCommand(customName);
let user;
if(!author)
sendText = `${customName} does not exist`
else{
client.guilds.cache.each(guild => {
user = guild.members.cache.get(author);
});
sendText = `The owner of ${customName} is ${user.user.username} (id: ${user.user.id}).`
}
break;
case "list":
const embed = new Discord.MessageEmbed();
sendText = getAllCustomCommands();
if(sendText != ""){
embed.setColor(15780145)
embed.addFields(
{ name: "Custom commands", value: sendText },
)
sendText = embed
isEmbed = true;
}else sendText = "NO CUSTOM COMMANDS"
break;
case "variables":
sendText = "The variables you can use are:\n<prefix>\n<globalPrefix>\n<username>\n<nickname>\n<user_id>\n<guild_name>\n<guild_id>"
break;
case "edit":
sendText = editCustomCommand(customName, message.author.id, customMessage)
break;
case "show":
let json = fs.readFileSync(customPath, 'utf8');
let customCommands = JSON.parse(json)
sendText = "Command not found."
customCommands.forEach(function (customCommand) {
if (customCommand.customName === customName) {
sendText = `\`\`\`\n${customCommand.customMessage}\n\`\`\``
}
});
break;
case "rename":
sendText = renameCustomCommand(customName, args[2], message.author.id);
break;
default:
sendText = `Argument not recognized.\n"${prefix}help custom" to see all arguments you can use.`
break;
}
}
if(isEmbed) message.channel.send({embeds :[sendText]})
else message.channel.send(sendText);
}
const addCustomCommand = require("../../util/custom_commands/addCustomCommand");
const deleteCustomCommand = require("../../util/custom_commands/deleteCustomCommand");
const getAllCustomCommands = require("../../util/custom_commands/getAllCustomCommands");
const getOwnerOfCustomCommand = require("../../util/custom_commands/getOwnerOfCustomCommand");
const renameCustomCommand = require("../../util/custom_commands/renameCustomCommand");
const {EmbedBuilder} = require('discord.js');
const fs = require('fs');
const editCustomCommand = require("../../util/custom_commands/editCustomCommand");
module.exports = {
name: 'custom',
description: "Manage custom commands, see <prefix>help custom for more",
moreHelp: ["<prefix>custom add - Add new custom commands",
"<prefix>custom edit - Edit an existing command that you own",
"<prefix>custom rename - Rename an existing command that you own",
"<prefix>custom show - Show custom message unformatted.",
"<prefix>custom remove - Delete your custom commands.",
"<prefix>custom owner - check owner of custom command",
"<prefix>custom list - list all custom commands",
"<prefix>custom variables - list all variables you can use"
],
execute({message, args, client, prefix, owners}) {
const customPath = 'data/customCommands.json';
if(!fs.existsSync(customPath)){
fs.writeFileSync(customPath,"[]")
}
let sendText;
let isEmbed = false;
if (args){
let customName = args[1];
let customMessage = args.slice(2, args.length).join(" ");
switch (args[0].toLowerCase()) {
case "add":
if(!customMessage) {
message.channel.send("Message can't be empty");
return;
}
sendText = addCustomCommand(customName, customMessage, message.author.id);
break;
case "remove":
case "delete":
sendText = deleteCustomCommand(customName, message.author.id, owners);
break;
case "owner":
let author = getOwnerOfCustomCommand(customName);
let user;
if(!author)
sendText = `${customName} does not exist`
else{
client.guilds.cache.each(guild => {
user = guild.members.cache.get(author);
});
sendText = `The owner of ${customName} is ${user.user.username} (id: ${user.user.id}).`
}
break;
case "list":
const embed = new EmbedBuilder();
sendText = getAllCustomCommands();
if(sendText != ""){
embed.setColor(15780145)
embed.addFields(
{ name: "Custom commands", value: sendText },
)
sendText = embed
isEmbed = true;
}else sendText = "NO CUSTOM COMMANDS"
break;
case "variables":
sendText = "The variables you can use are:\n<prefix>\n<globalPrefix>\n<username>\n<nickname>\n<user_id>\n<guild_name>\n<guild_id>"
break;
case "edit":
sendText = editCustomCommand(customName, message.author.id, customMessage)
break;
case "show":
let json = fs.readFileSync(customPath, 'utf8');
let customCommands = JSON.parse(json)
sendText = "Command not found."
customCommands.forEach(function (customCommand) {
if (customCommand.customName === customName) {
sendText = `\`\`\`\n${customCommand.customMessage}\n\`\`\``
}
});
break;
case "rename":
sendText = renameCustomCommand(customName, args[2], message.author.id);
break;
default:
sendText = `Argument not recognized.\n"${prefix}help custom" to see all arguments you can use.`
break;
}
}
if(isEmbed) message.channel.send({embeds :[sendText]})
else message.channel.send(sendText);
}
};

3166
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
"main": "server.js",
"dependencies": {
"@zuzak/owo": "^1.14.1",
"discord.js": "^13.6.0",
"discord.js": "^14.16.3",
"dotenv": "^16.4.5",
"express": "^4.21.1",
"mysql": "^2.18.1",

View file

@ -20,8 +20,13 @@ const createDatabaseTables = require('./server/createDatabaseTables');
const createLastfmTable = require('./server/createLastfmTable');
createLastfmTable();
checkAndConvertJSONToSQL();
const Discord = require('discord.js');
const client = new Discord.Client({ intents: [Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES, Discord.Intents.FLAGS.GUILD_PRESENCES] });
const { Collection, Client, GatewayIntentBits, Partials } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildPresences
], partials: [Partials.Channel] });
const {
globalPrefix,
token,
@ -33,10 +38,10 @@ const {
presenceText
} = require('./data/config.json');
client.settings = new Discord.Collection();
client.commands = new Discord.Collection();
client.serverPrefixes = new Discord.Collection();
client.netmodules = new Discord.Collection();
client.settings = new Collection();
client.commands = new Collection();
client.serverPrefixes = new Collection();
client.netmodules = new Collection();
client.settings.set("presenceType", presenceType);

View file

@ -1,7 +1,7 @@
const getNickname = require("../getNickname");
const parseMention = require("../parseMention");
const getFmUsername = require("./getFmUsername");
const Discord = require('discord.js');
const {EmbedBuilder} = require('discord.js');
require("dotenv").config();
module.exports = async function(userID, guild) {
@ -50,7 +50,7 @@ module.exports = async function(userID, guild) {
sendText.text = scrobble.errorMsg;
return sendText;
}
const embed = new Discord.MessageEmbed()
const embed = new EmbedBuilder()
.setTitle(`${scrobble.artist} - **${scrobble.album}**`)
.setImage(scrobble.cover)
sendText.embed = embed;

View file

@ -1,7 +1,7 @@
const getNickname = require("../getNickname");
const parseMention = require("../parseMention");
const getFmUsername = require("./getFmUsername");
const Discord = require('discord.js');
const {EmbedBuilder} = require('discord.js');
require("dotenv").config();
module.exports = async function (userID, guild) {
@ -57,8 +57,8 @@ module.exports = async function (userID, guild) {
sendText.text = tracks.errorMsg;
return sendText;
}
const embed = new Discord.MessageEmbed()
.setAuthor(`Now playing - ${nickname}`, user.user.avatarURL({ dynamic: true, size: 4096 }))
const embed = new EmbedBuilder()
.setAuthor({name: `Now playing - ${nickname}`, iconURL: user.user.avatarURL({ dynamic: true, size: 4096 })})
.setThumbnail(tracks[0].cover)
.setColor(15780145)
.addFields({

View file

@ -1,7 +1,7 @@
// http://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=username&api_key=YOUR_API_KEY&format=json
const getFmUsername = require("./getFmUsername");
const Discord = require('discord.js');
const {EmbedBuilder} = require('discord.js');
const getNickname = require('../getNickname')
const parseMention = require('../parseMention')
@ -94,8 +94,8 @@ module.exports = async function (userID, option, guild, compatibility=false) {
});
});
}
const embed = new Discord.MessageEmbed()
.setAuthor(`Top ${duration} tracks for ${nickname}`, user.user.avatarURL({ dynamic: true, size: 4096 }))
const embed = new EmbedBuilder()
.setAuthor({name: `Top ${duration} tracks for ${nickname}`, iconURL: user.user.avatarURL({ dynamic: true, size: 4096 })})
.setThumbnail(tracks[0].cover)
.setColor(15780145)
let tracksInfo = "";

View file

@ -14,7 +14,10 @@ module.exports = function (user) {
details = `Artist: ${user.presence.activities[0].state}\nAlbum: ${user.presence.activities[0].details}\nSong: ${user.presence.activities[0].assets.largeText}\n`
break;
case "Custom Status":
details = `"${user.presence.activities[0].state}"\n`
if(user.presence.activities[0].state !== null)
details = `"${user.presence.activities[0].state}"\n`
else
details = "";
break;
case "Code":
if(user.presence.activities[0].details != null)

View file

@ -25,7 +25,7 @@ module.exports = function ({presenceText, presenceType, client}) {
}
try {
client.user.setActivity(presenceText, { type: presenceType });
client.user.setPresence({ activities: [{ name: presenceText, type: presenceType }]});
}catch(e){
console.error(`${convertDateToISOString(new Date)}\n${e}`);
}