SlashCommandHandler - Not answering

So I've created the deploy-commands & slashcommandhandler from Discord.Js guide docs, my commands do appear when I use /ping, but it doesnt respond
199 Replies
d.js toolkit
d.js toolkit•11mo ago
- What's your exact discord.js npm list discord.js and node node -v version? - Not a discord.js issue? Check out #other-js-ts. - Consider reading #how-to-get-help to improve your question! - Explain what exactly your issue is. - Post the full error stack trace, not just the top part! - Show your code! - Issue solved? Press the button!
treble/luna
treble/luna•11mo ago
show your code
Marcus
Marcus•11mo ago
deploy-commands
const { REST, Routes } = require('discord.js');
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Grab all the command files from the commands directory you created earlier
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const folder of commandFolders) {
// Grab all the command files from the commands directory you created earlier
const commandsPath = path.join(foldersPath, folder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}

// Construct and prepare an instance of the REST module
const rest = new REST().setToken(process.env.DISCORD_TOKEN);

// and deploy your commands!
(async () => {
try {
console.log(`Started refreshing ${commands.length} application (/) commands.`);

// The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands },
);

console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) {
// And of course, make sure you catch and log any errors!
console.error(error);
}
})();
const { REST, Routes } = require('discord.js');
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Grab all the command files from the commands directory you created earlier
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const folder of commandFolders) {
// Grab all the command files from the commands directory you created earlier
const commandsPath = path.join(foldersPath, folder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}

// Construct and prepare an instance of the REST module
const rest = new REST().setToken(process.env.DISCORD_TOKEN);

// and deploy your commands!
(async () => {
try {
console.log(`Started refreshing ${commands.length} application (/) commands.`);

// The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands },
);

console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) {
// And of course, make sure you catch and log any errors!
console.error(error);
}
})();
index.js
const { Client, Events, GatewayIntentBits, Collection } = require("discord.js");
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

// EKSEMPEL!
// const prefix = process.env.PREFIX;

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
// Set a new item in the Collection with the key as the command name and the value as the exported module
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property`);
}
}



client.once(Events.ClientReady, c => {
console.log(`Tilsluttet! Loggede ind som ${c.user.tag}`);
});


client.login(process.env.DISCORD_TOKEN)
const { Client, Events, GatewayIntentBits, Collection } = require("discord.js");
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

// EKSEMPEL!
// const prefix = process.env.PREFIX;

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
// Set a new item in the Collection with the key as the command name and the value as the exported module
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property`);
}
}



client.once(Events.ClientReady, c => {
console.log(`Tilsluttet! Loggede ind som ${c.user.tag}`);
});


client.login(process.env.DISCORD_TOKEN)
Marcus
Marcus•11mo ago
File structure :
No description
treble/luna
treble/luna•11mo ago
I dont see you listening for the interactionCreate event anywhere Nor calling the execute function
Marcus
Marcus•11mo ago
What do you mean exactly?
treble/luna
treble/luna•11mo ago
you never listen for the interactionCreate event And your command exports an execute or run function probably which you never call
Marcus
Marcus•11mo ago
Uhmm It's such a long time since I've been developing js and using the handler
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
thats my ping.js that isnt working I mean it should work
treble/luna
treble/luna•11mo ago
No
Marcus
Marcus•11mo ago
or am I completely wrong @wolvinny🌈 sry for tag
treble/luna
treble/luna•11mo ago
You never call the execute You never listen for an interactionCreate event You missed a few parts of the guide there
Marcus
Marcus•11mo ago
is that something new? o.o
treble/luna
treble/luna•11mo ago
Listening to events? No
d.js docs
d.js docs•11mo ago
guide Creating Your Bot: Receiving command interactions read more
Marcus
Marcus•11mo ago
isnt that for normal commands?
treble/luna
treble/luna•11mo ago
no
Marcus
Marcus•11mo ago
I'am so idiot I really cant find what I missed out on
treble/luna
treble/luna•11mo ago
do you see an interactionCreate event anywhere in your code?
Marcus
Marcus•11mo ago
No, I think I found it now
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
that was the part I was missing right? @wolvinny🌈
treble/luna
treble/luna•11mo ago
yes, try it and see
Marcus
Marcus•11mo ago
Do I have to nodemon . or nodemon deploy-commands ?
treble/luna
treble/luna•11mo ago
whatever file you construct your client in
Marcus
Marcus•11mo ago
I did exactly like the guide showed
treble/luna
treble/luna•11mo ago
unless you want to just register commands, you should run index
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
so it just ran that code yk it said "Ingen command som matchede ping blev fundet'"
treble/luna
treble/luna•11mo ago
then you didnt set your commands properly
Marcus
Marcus•11mo ago
Uhmm How can I fix that?
treble/luna
treble/luna•11mo ago
by setti'g them properly make sure your filepaths are correct
Marcus
Marcus•11mo ago
they're
treble/luna
treble/luna•11mo ago
No You're scanning /commands for files ending in .js but you only have subfolders in there
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
I get that error now when its out of the sub-folder
treble/luna
treble/luna•11mo ago
show your code
Marcus
Marcus•11mo ago
of the deploy? or
treble/luna
treble/luna•11mo ago
the code that throws thay error
Marcus
Marcus•11mo ago
deploy-commands
const { REST, Routes } = require('discord.js');
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Grab all the command files from the commands directory you created earlier
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const folder of commandFolders) {
// Grab all the command files from the commands directory you created earlier
const commandsPath = path.join(foldersPath, folder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}

// Construct and prepare an instance of the REST module
const rest = new REST().setToken(process.env.DISCORD_TOKEN);

// and deploy your commands!
(async () => {
try {
console.log(`Started refreshing ${commands.length} application (/) commands.`);

// The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands },
);

console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) {
// And of course, make sure you catch and log any errors!
console.error(error);
}
})();
const { REST, Routes } = require('discord.js');
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Grab all the command files from the commands directory you created earlier
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const folder of commandFolders) {
// Grab all the command files from the commands directory you created earlier
const commandsPath = path.join(foldersPath, folder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}

// Construct and prepare an instance of the REST module
const rest = new REST().setToken(process.env.DISCORD_TOKEN);

// and deploy your commands!
(async () => {
try {
console.log(`Started refreshing ${commands.length} application (/) commands.`);

// The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands },
);

console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) {
// And of course, make sure you catch and log any errors!
console.error(error);
}
})();
treble/luna
treble/luna•11mo ago
If thats the file you're running your commands wont ever work Nor will your bot login
Marcus
Marcus•11mo ago
Index.js
const { Client, Events, GatewayIntentBits, Collection } = require("discord.js");
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

// EKSEMPEL!
// const prefix = process.env.PREFIX;

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
// Set a new item in the Collection with the key as the command name and the value as the exported module
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property`);
}
}

client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isChatInputCommand()) return;

const command = interaction.client.commands.get(interaction.commandName);

if (!command) {
console.error(`Ingen command som matchede ${interaction.commandName} blev fundet.`);
return;
}

try {
await command.execute(interaction);
} catch (error) {
console.error(error)
if (interaction.replied || interaction.deferred) {
await interaction.followUp({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true });
} else {
await interaction.reply({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true })
}
}
})

client.once(Events.ClientReady, c => {
console.log(`Tilsluttet! Loggede ind som ${c.user.tag}`);
});


client.login(process.env.DISCORD_TOKEN)
const { Client, Events, GatewayIntentBits, Collection } = require("discord.js");
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

// EKSEMPEL!
// const prefix = process.env.PREFIX;

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
// Set a new item in the Collection with the key as the command name and the value as the exported module
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property`);
}
}

client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isChatInputCommand()) return;

const command = interaction.client.commands.get(interaction.commandName);

if (!command) {
console.error(`Ingen command som matchede ${interaction.commandName} blev fundet.`);
return;
}

try {
await command.execute(interaction);
} catch (error) {
console.error(error)
if (interaction.replied || interaction.deferred) {
await interaction.followUp({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true });
} else {
await interaction.reply({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true })
}
}
})

client.once(Events.ClientReady, c => {
console.log(`Tilsluttet! Loggede ind som ${c.user.tag}`);
});


client.login(process.env.DISCORD_TOKEN)
treble/luna
treble/luna•11mo ago
and which one is throwing the error because in your deploy you're scanning correctly, in your index you arent
Marcus
Marcus•11mo ago
So how do I fix it? it throws it in deploy
Marcus
Marcus•11mo ago
No description
treble/luna
treble/luna•11mo ago
well, first of all, read what i said
Marcus
Marcus•11mo ago
yeah
treble/luna
treble/luna•11mo ago
.
Marcus
Marcus•11mo ago
I did run index but whats the error in index?
treble/luna
treble/luna•11mo ago
Your error is from your deploy
Marcus
Marcus•11mo ago
yeah
treble/luna
treble/luna•11mo ago
Because you're not scanning the files inside your subfolders, which you are doing in your deploy None of this is js related either, its rather basic js
Marcus
Marcus•11mo ago
I just thought of it was about saying it just weird the guide shows to different kind of it
treble/luna
treble/luna•11mo ago
the guide is just a guide, you're expected to edit it based on your setup
Marcus
Marcus•11mo ago
I might have fixed it I have fixed it, thank you so much for your help @wolvinny🌈 I just got back to the new versions of Discord.JS it has been months were I've been long way from home.. sorry for the inconvience
treble/luna
treble/luna•11mo ago
no worries
Marcus
Marcus•11mo ago
status
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");

module.exports = {
data: new SlashCommandBuilder()
.setName('status')
.setDescription('Viser en live status over alle vores servere'),
async execute(interaction) {
const embed = new EmbedBuilder()
.setColor('#de6910')
.setTitle('Server Status')
.setURL('https://jet-host.dk/')
.addFields(
{ name: 'Gameserver1', value: 'Operationel, (Oppe)'}
)
.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

await interaction.reply({ embeds: [embed] })
},
};
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");

module.exports = {
data: new SlashCommandBuilder()
.setName('status')
.setDescription('Viser en live status over alle vores servere'),
async execute(interaction) {
const embed = new EmbedBuilder()
.setColor('#de6910')
.setTitle('Server Status')
.setURL('https://jet-host.dk/')
.addFields(
{ name: 'Gameserver1', value: 'Operationel, (Oppe)'}
)
.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

await interaction.reply({ embeds: [embed] })
},
};
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
May I know why tf it gives me an error?
treble/luna
treble/luna•11mo ago
you have 2 or more commands with the same name
Marcus
Marcus•11mo ago
ehh I definitly not have
Marcus
Marcus•11mo ago
No description
treble/luna
treble/luna•11mo ago
if you havent you wouldnt get that error
Marcus
Marcus•11mo ago
bro the file structure O.o
treble/luna
treble/luna•11mo ago
your commands probably are being scanned twice
Marcus
Marcus•11mo ago
How would I fix that
treble/luna
treble/luna•11mo ago
by fixing your scanning logic
Marcus
Marcus•11mo ago
It is the exact same like on the guide can you tell me where in the scanning it fucks up?
treble/luna
treble/luna•11mo ago
well, the guide expects you to have subfolders, which you do not have so no, its not the same
Marcus
Marcus•11mo ago
I removed it the function with subfolder s
treble/luna
treble/luna•11mo ago
then your handler isnt the exact same as the guide isnt it? show yours
Marcus
Marcus•11mo ago
const { REST, Routes } = require('discord.js');
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Grab all the command files from the commands directory you created earlier
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const file of commandFolders) {
// Grab all the command files from the commands directory you created earlier
const commandsPath = path.join(foldersPath);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}

// Construct and prepare an instance of the REST module
const rest = new REST().setToken(process.env.DISCORD_TOKEN);

// and deploy your commands!
(async () => {
try {
console.log(`Started refreshing ${commands.length} application (/) commands.`);

// The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands },
);

console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) {
// And of course, make sure you catch and log any errors!
console.error(error);
}
})();
const { REST, Routes } = require('discord.js');
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');

const commands = [];
// Grab all the command files from the commands directory you created earlier
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);

for (const file of commandFolders) {
// Grab all the command files from the commands directory you created earlier
const commandsPath = path.join(foldersPath);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
commands.push(command.data.toJSON());
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}

// Construct and prepare an instance of the REST module
const rest = new REST().setToken(process.env.DISCORD_TOKEN);

// and deploy your commands!
(async () => {
try {
console.log(`Started refreshing ${commands.length} application (/) commands.`);

// The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands },
);

console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) {
// And of course, make sure you catch and log any errors!
console.error(error);
}
})();
treble/luna
treble/luna•11mo ago
well your commandFolders variable will have 2 files. For each of those files you scan your commandFIle directory again, adding them twice
Marcus
Marcus•11mo ago
in the deploy? I fixed it its after I removed the function for subfolders I forgot to remove something else
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
require('dotenv').config();

module.exports = {
data: new SlashCommandBuilder()
.setName('ticketsetup')
.setDescription('Sætter vores ticket system op'),
async execute(interaction) {
if(interaction.member.roles.cache.has(process.env.ADMIN_ROLE_ID)){ interaction.reply({ content: 'Dette har du ikke adgang til!', ephemeral: true }) }
},
};
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
require('dotenv').config();

module.exports = {
data: new SlashCommandBuilder()
.setName('ticketsetup')
.setDescription('Sætter vores ticket system op'),
async execute(interaction) {
if(interaction.member.roles.cache.has(process.env.ADMIN_ROLE_ID)){ interaction.reply({ content: 'Dette har du ikke adgang til!', ephemeral: true }) }
},
};
No errors, it just doesnt reply.
treble/luna
treble/luna•11mo ago
well, is the execute being called at all
Marcus
Marcus•11mo ago
yes It is. It just says "The bot didnt respond"
treble/luna
treble/luna•11mo ago
then your if statement is returning false
Marcus
Marcus•11mo ago
Oh fuck im so stupid its meant to be if the guy doesnt have shit fuck me
const { Client, SlashCommandBuilder, EmbedBuilder, GatewayIntentBits} = require("discord.js");
require('dotenv').config();

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

module.exports = {
data: new SlashCommandBuilder()
.setName('ticketsetup')
.setDescription('Sætter vores ticket system op'),
async execute(interaction) {
if(!interaction.member.roles.cache.has(process.env.ADMIN_ROLE_ID)){ interaction.reply({ content: 'Dette har du ikke adgang til!', ephemeral: true }); return true; }

// Opret Ticket Embed
const ticketEmbed = new EmbedBuilder()
.setColor('#de6910')
.setTitle('Opret en ticket')
.setDescription('Er du stødt på et problem som kunde eller almindelig bruger? Eller har du blot et spørgsmål, uanset hvad står vi altid klare til at tage hånd om jeres tickets, blot opret en ticket ved at klikke på den passende kategori nedenfor.')
.setTimestamp()
.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

const channel = client.channels.cache.get(process.env.TICKET_CREATE_CHANNEL_ID);
channel.send({ embeds: [ticketEmbed] })

},
};
const { Client, SlashCommandBuilder, EmbedBuilder, GatewayIntentBits} = require("discord.js");
require('dotenv').config();

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

module.exports = {
data: new SlashCommandBuilder()
.setName('ticketsetup')
.setDescription('Sætter vores ticket system op'),
async execute(interaction) {
if(!interaction.member.roles.cache.has(process.env.ADMIN_ROLE_ID)){ interaction.reply({ content: 'Dette har du ikke adgang til!', ephemeral: true }); return true; }

// Opret Ticket Embed
const ticketEmbed = new EmbedBuilder()
.setColor('#de6910')
.setTitle('Opret en ticket')
.setDescription('Er du stødt på et problem som kunde eller almindelig bruger? Eller har du blot et spørgsmål, uanset hvad står vi altid klare til at tage hånd om jeres tickets, blot opret en ticket ved at klikke på den passende kategori nedenfor.')
.setTimestamp()
.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

const channel = client.channels.cache.get(process.env.TICKET_CREATE_CHANNEL_ID);
channel.send({ embeds: [ticketEmbed] })

},
};
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
I dont get that error .. O.o
treble/luna
treble/luna•11mo ago
your channel is undefined so its either not cached or the id is incorrect
Marcus
Marcus•11mo ago
I defined it just above O.o
treble/luna
treble/luna•11mo ago
well it has a value of undefined
Marcus
Marcus•11mo ago
Uhmm, how can it not be cached?
treble/luna
treble/luna•11mo ago
if you dont have the guilds intent
Marcus
Marcus•11mo ago
I guess I have it
treble/luna
treble/luna•11mo ago
then the id is incorrect wait why do you construct a new client there
Marcus
Marcus•11mo ago
the id is correct
treble/luna
treble/luna•11mo ago
that client wont be logged in thats not how it works
Marcus
Marcus•11mo ago
what should I do instead
treble/luna
treble/luna•11mo ago
you should access the client from <Interaction>.client creating a new instance wont ever work
Marcus
Marcus•11mo ago
so interaction.client would work
treble/luna
treble/luna•11mo ago
yes
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
:p
treble/luna
treble/luna•11mo ago
show your code
Marcus
Marcus•11mo ago
in which file?
treble/luna
treble/luna•11mo ago
the one that errors
Marcus
Marcus•11mo ago
const { Client, Events, GatewayIntentBits, Collection, ActivityType, EmbedBuilder } = require("discord.js");
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');


// EKSEMPEL!
// const prefix = process.env.PREFIX;

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
// Set a new item in the Collection with the key as the command name and the value as the exported module
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property`);
}
}

client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isChatInputCommand()) return;

const command = interaction.client.commands.get(interaction.commandName);

if (!command) {
console.error(`Ingen command som matchede ${interaction.commandName} blev fundet.`);
return;
}

try {
await command.execute(interaction);
} catch (error) {
console.error(error)
if (interaction.replied || interaction.deferred) {
await interaction.followUp({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true });
} else {
await interaction.reply({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true })
}
}
})

client.once(Events.ClientReady, c => {
console.log(`Tilsluttet! Loggede ind som ${c.user.tag}`);
client.user.setActivity('Jet-Host.dk | I samarbejde med projekt Jet-Nexus');

});


client.login(process.env.DISCORD_TOKEN);
const { Client, Events, GatewayIntentBits, Collection, ActivityType, EmbedBuilder } = require("discord.js");
require("dotenv").config();
const fs = require('node:fs');
const path = require('node:path');


// EKSEMPEL!
// const prefix = process.env.PREFIX;

const client = new Client({ intents: [GatewayIntentBits.Guilds] })

client.commands = new Collection();

const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
// Set a new item in the Collection with the key as the command name and the value as the exported module
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property`);
}
}

client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isChatInputCommand()) return;

const command = interaction.client.commands.get(interaction.commandName);

if (!command) {
console.error(`Ingen command som matchede ${interaction.commandName} blev fundet.`);
return;
}

try {
await command.execute(interaction);
} catch (error) {
console.error(error)
if (interaction.replied || interaction.deferred) {
await interaction.followUp({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true });
} else {
await interaction.reply({ content: 'Der opstod en fejl, kontakt venligst support!', ephemeral: true })
}
}
})

client.once(Events.ClientReady, c => {
console.log(`Tilsluttet! Loggede ind som ${c.user.tag}`);
client.user.setActivity('Jet-Host.dk | I samarbejde med projekt Jet-Nexus');

});


client.login(process.env.DISCORD_TOKEN);
treble/luna
treble/luna•11mo ago
thats not the file that errors isnt it
Marcus
Marcus•11mo ago
const { Client, SlashCommandBuilder, EmbedBuilder, GatewayIntentBits} = require("discord.js");
require('dotenv').config();


module.exports = {
data: new SlashCommandBuilder()
.setName('ticketsetup')
.setDescription('Sætter vores ticket system op'),
async execute(interaction) {
if(!interaction.member.roles.cache.has(process.env.ADMIN_ROLE_ID)){ interaction.reply({ content: 'Dette har du ikke adgang til!', ephemeral: true }); return true; }

// Opret Ticket Embed
const ticketEmbed = new EmbedBuilder()
.setColor('#de6910')
.setTitle('Opret en ticket')
.setDescription('Er du stødt på et problem som kunde eller almindelig bruger? Eller har du blot et spørgsmål, uanset hvad står vi altid klare til at tage hånd om jeres tickets, blot opret en ticket ved at klikke på den passende kategori nedenfor.')
.setTimestamp()
.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

const channel = interaction.channels.cache.get(process.env.TICKET_CREATE_CHANNEL_ID);
channel.send({ embeds: [ticketEmbed] })

},
};
const { Client, SlashCommandBuilder, EmbedBuilder, GatewayIntentBits} = require("discord.js");
require('dotenv').config();


module.exports = {
data: new SlashCommandBuilder()
.setName('ticketsetup')
.setDescription('Sætter vores ticket system op'),
async execute(interaction) {
if(!interaction.member.roles.cache.has(process.env.ADMIN_ROLE_ID)){ interaction.reply({ content: 'Dette har du ikke adgang til!', ephemeral: true }); return true; }

// Opret Ticket Embed
const ticketEmbed = new EmbedBuilder()
.setColor('#de6910')
.setTitle('Opret en ticket')
.setDescription('Er du stødt på et problem som kunde eller almindelig bruger? Eller har du blot et spørgsmål, uanset hvad står vi altid klare til at tage hånd om jeres tickets, blot opret en ticket ved at klikke på den passende kategori nedenfor.')
.setTimestamp()
.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

const channel = interaction.channels.cache.get(process.env.TICKET_CREATE_CHANNEL_ID);
channel.send({ embeds: [ticketEmbed] })

},
};
Sorry
treble/luna
treble/luna•11mo ago
you didnt do what i said .
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
now it says the application didnt answer
treble/luna
treble/luna•11mo ago
because you dont reply to the interaction
Marcus
Marcus•11mo ago
I dont need it to reply
treble/luna
treble/luna•11mo ago
well then you will get the 'application did not respond'
Marcus
Marcus•11mo ago
Im so stupid I got it now, haha Can I some how make the interactions in other files, so it doesnt have everything in the command files and index?
treble/luna
treble/luna•11mo ago
yes
d.js docs
d.js docs•11mo ago
guide Creating Your Bot: Event handling read moreguide Creating Your Bot: Command handling read more
Marcus
Marcus•11mo ago
I got it now nothing happens when I click in the select menu
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
No description
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
thats the event handler
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
so it wont work by just adding an s?
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
Would this work?
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
if not, how should it be done :p it doesnt ^^
treble/luna
treble/luna•11mo ago
do you know how arrays work / what an array is?
Marcus
Marcus•11mo ago
I know what it is
treble/luna
treble/luna•11mo ago
well
Marcus
Marcus•11mo ago
I forgot how they work tho
d.js docs
d.js docs•11mo ago
mdn Array The Array object, as with arrays in other programming languages, enables storing a collection of multiple items under a single variable name, and has members for performing common array operations.
treble/luna
treble/luna•11mo ago
might want to brush up your js knowledge
Marcus
Marcus•11mo ago
yeah, I just have to see the stuff again, and then I will know yk, its just like "Ohhh now I remember ..." hello?
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
yes the array
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
treble/luna
treble/luna•11mo ago
i told you fresh up on your js knowledge as the code you provided isnt valid js
Marcus
Marcus•11mo ago
I dont know how to use the values
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
Yeah.. I just dont get it, and I cant find anything on google so its hard
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
so both ticketSupport and ticketSpørgsmål will be in the values array?
Marcus
Marcus•11mo ago
No description
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
treble/luna
treble/luna•11mo ago
the ones the user selected will be in the array
Marcus
Marcus•11mo ago
wtf you both say 2 different things
treble/luna
treble/luna•11mo ago
your <Interaction>.values will be populated with the values the user selected
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
I already looked through it but cmon you cant say 2 different things.. thats confusing so to get it right, I would need to use [1] right ? and that would be ticketSupport
treble/luna
treble/luna•11mo ago
you'd need to get [0] for the first element that will only return 1 element though
Marcus
Marcus•11mo ago
Yeah and that would be ticketSupport right?
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
it just says undefined ? o.o it would be ticketSpørgsmål wouldn't it?
treble/luna
treble/luna•11mo ago
please read and take the time to fully learn about arrays
Marcus
Marcus•11mo ago
Nevermind im so stupid holy shit this is redicoulus imagine this happned shit fuck me
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
???
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
d.js docs
d.js docs•11mo ago
guide Other Interactions: Modals read more
Marcus
Marcus•11mo ago
No description
No description
Marcus
Marcus•11mo ago
I define the channeltype? O.o
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
what is the import? just ChannelType?
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
treble/luna
treble/luna•11mo ago
also, ManageChannels isnt a channel perm afaik, its a role perm
Marcus
Marcus•11mo ago
yes
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
Ok
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
??
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
oh fuck
treble/luna
treble/luna•11mo ago
also, there's not really a need to define every channel in your .env. If you need it across multiple files sure but if you need it just once
Marcus
Marcus•11mo ago
the channel I have here (c)
No description
Marcus
Marcus•11mo ago
can I somehow send an embed to the same channel but in another file?
d.js docs
d.js docs•11mo ago
const channel = client.channels.cache.get("222086648706498562");
const channel = guild.channels.cache.find(channel => channel.name === "general");
const channel = client.channels.cache.get("222086648706498562");
const channel = guild.channels.cache.find(channel => channel.name === "general");
- Caches in discord.js are Collections which extend the native Map structure. - learn more
Marcus
Marcus•11mo ago
But its for a ticket system how can it know which id the channel is when it creates the channel in another file?
treble/luna
treble/luna•11mo ago
resolve the promise and store the .id somewhere
Marcus
Marcus•11mo ago
do I need to store it? like with a database?
treble/luna
treble/luna•11mo ago
Well if you want to access it later on yes
Marcus
Marcus•11mo ago
how can I make a transcript over my ticket
treble/luna
treble/luna•11mo ago
store the messages in a db
Marcus
Marcus•11mo ago
const { Events, ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, ChannelType, EmbedBuilder,
StringSelectMenuBuilder, StringSelectMenuOptionBuilder, ButtonBuilder, ButtonStyle
} = require('discord.js');
const { createTranscript } = require('discord-html-transcripts')


const delay = ms => new Promise(res => setTimeout(res, ms));

module.exports = {
name: Events.InteractionCreate,
async execute(interaction) {
if(interaction.customId === 'ticketSelect') {
if(interaction.values[0] === 'ticketClose') {

const channel = interaction.channel;

interaction.reply({ content: 'Din ticket vil lukke om 5 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 4 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 3 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 2 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 1 sekundt!' })

await delay(1000)
channel.delete();

const file = await createTranscript(interaction.channel, {
limit: 10000000,
returnBuffer: false,
filename: `${channel.name.toLowerCase()}-transscript.html`
});

let cache = interaction.client.channels.cache.get(process.env.TRANSSCRIPTS_CHANNEL_ID);
let msg = await cache.send({ files: [file] })

const button = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setLabel('Ã…ben transscript')
.setURL(`https://mahto.id/chat-exporter?url=${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.LINK),

new ButtonBuilder()
.setLabel('Download')
.setURL(`${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.Link)
)

const embed = new EmbedBuilder()
.setColor('#de6910')
.setDescription(`Dit transscript for ${channel}`)

.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})


await interaction.editReply({ embeds: [embed], content: ``, components: [button] })
}
}
}
}
const { Events, ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, ChannelType, EmbedBuilder,
StringSelectMenuBuilder, StringSelectMenuOptionBuilder, ButtonBuilder, ButtonStyle
} = require('discord.js');
const { createTranscript } = require('discord-html-transcripts')


const delay = ms => new Promise(res => setTimeout(res, ms));

module.exports = {
name: Events.InteractionCreate,
async execute(interaction) {
if(interaction.customId === 'ticketSelect') {
if(interaction.values[0] === 'ticketClose') {

const channel = interaction.channel;

interaction.reply({ content: 'Din ticket vil lukke om 5 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 4 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 3 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 2 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 1 sekundt!' })

await delay(1000)
channel.delete();

const file = await createTranscript(interaction.channel, {
limit: 10000000,
returnBuffer: false,
filename: `${channel.name.toLowerCase()}-transscript.html`
});

let cache = interaction.client.channels.cache.get(process.env.TRANSSCRIPTS_CHANNEL_ID);
let msg = await cache.send({ files: [file] })

const button = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setLabel('Ã…ben transscript')
.setURL(`https://mahto.id/chat-exporter?url=${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.LINK),

new ButtonBuilder()
.setLabel('Download')
.setURL(`${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.Link)
)

const embed = new EmbedBuilder()
.setColor('#de6910')
.setDescription(`Dit transscript for ${channel}`)

.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})


await interaction.editReply({ embeds: [embed], content: ``, components: [button] })
}
}
}
}
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
how can it be an unknown channel?
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
ehmm no. ohh I think I got it now
Marcus
Marcus•11mo ago
No description
Marcus
Marcus•11mo ago
now it says this
const { Events, ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, ChannelType, EmbedBuilder,
StringSelectMenuBuilder, StringSelectMenuOptionBuilder, ButtonBuilder, ButtonStyle
} = require('discord.js');
const { createTranscript } = require('discord-html-transcripts')


const delay = ms => new Promise(res => setTimeout(res, ms));

module.exports = {
name: Events.InteractionCreate,
async execute(interaction) {
if(interaction.customId === 'ticketSelect') {
if(interaction.values[0] === 'ticketClose') {

const channel = interaction.channel;

interaction.reply({ content: 'Din ticket vil lukke om 5 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 4 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 3 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 2 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 1 sekundt!' })

await delay(1000)

const file = await createTranscript(interaction.channel, {
limit: 10000000,
returnBuffer: false,
filename: `${channel.name.toLowerCase()}-transscript.html`
});


const button = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setLabel('Ã…ben transscript')
.setURL(`https://mahto.id/chat-exporter?url=${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.LINK),

new ButtonBuilder()
.setLabel('Download')
.setURL(`${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.Link)
)

const embed = new EmbedBuilder()
.setColor('#de6910')
.setDescription(`Dit transscript for ${channel}`)

.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

let cache = interaction.client.channels.cache.get(process.env.TRANSSCRIPTS_CHANNEL_ID);
let msg = await cache.send({ files: [file], components: [button], embeds: [embed] })


channel.delete();
}
}
}
}
const { Events, ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, ChannelType, EmbedBuilder,
StringSelectMenuBuilder, StringSelectMenuOptionBuilder, ButtonBuilder, ButtonStyle
} = require('discord.js');
const { createTranscript } = require('discord-html-transcripts')


const delay = ms => new Promise(res => setTimeout(res, ms));

module.exports = {
name: Events.InteractionCreate,
async execute(interaction) {
if(interaction.customId === 'ticketSelect') {
if(interaction.values[0] === 'ticketClose') {

const channel = interaction.channel;

interaction.reply({ content: 'Din ticket vil lukke om 5 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 4 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 3 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 2 sekunder!' })

await delay(1000)
await interaction.editReply({ content: 'Din ticket vil lukke om 1 sekundt!' })

await delay(1000)

const file = await createTranscript(interaction.channel, {
limit: 10000000,
returnBuffer: false,
filename: `${channel.name.toLowerCase()}-transscript.html`
});


const button = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setLabel('Ã…ben transscript')
.setURL(`https://mahto.id/chat-exporter?url=${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.LINK),

new ButtonBuilder()
.setLabel('Download')
.setURL(`${msg.attachments.first()?.url}`)
.setStyle(ButtonStyle.Link)
)

const embed = new EmbedBuilder()
.setColor('#de6910')
.setDescription(`Dit transscript for ${channel}`)

.setFooter({ text: 'I samarbejde med projekt Jet-Nexus', iconURL: 'https://media.discordapp.net/attachments/1135258379737116712/1141078885119823882/marcus-01.png'})

let cache = interaction.client.channels.cache.get(process.env.TRANSSCRIPTS_CHANNEL_ID);
let msg = await cache.send({ files: [file], components: [button], embeds: [embed] })


channel.delete();
}
}
}
}
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
Marcus
Marcus•11mo ago
wait wdym
Unknown User
Unknown User•11mo ago
Message Not Public
Sign In & Join Server To View
treble/luna
treble/luna•11mo ago
also note that that limit is useless since you can fetch 100 messages max
Marcus
Marcus•11mo ago
btw
Marcus
Marcus•11mo ago
why doesnt the whole appear in my console when I do this?
No description
No description
Marcus
Marcus•11mo ago
I mean it should put the whole in the console like it does on the website or am I wrong and how can I use the response?
treble/luna
treble/luna•11mo ago
thats not djs related
Marcus
Marcus•11mo ago
well its on the docs
treble/luna
treble/luna•11mo ago
no? Thats just making an api request Thats not even slightly related
invictus
invictus•11mo ago
Yeah, the contents, not how your browser displays it.