Compare commits
No commits in common. "a4eab091c78cab9c91e93c728aed25c4c5a39c7d" and "1f8c5585dc0b9d6356ae5c3eef0085b3be1ba1fc" have entirely different histories.
a4eab091c7
...
1f8c5585dc
12 changed files with 22 additions and 77 deletions
|
@ -5,9 +5,9 @@
|
||||||
"es6": true
|
"es6": true
|
||||||
},
|
},
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 2022,
|
"ecmaVersion": 2021
|
||||||
"sourceType": "module"
|
|
||||||
},
|
},
|
||||||
|
"sourceType": "module",
|
||||||
"rules": {
|
"rules": {
|
||||||
"arrow-spacing": ["warn", { "before": true, "after": true }],
|
"arrow-spacing": ["warn", { "before": true, "after": true }],
|
||||||
"brace-style": ["error", "stroustrup", { "allowSingleLine": true }],
|
"brace-style": ["error", "stroustrup", { "allowSingleLine": true }],
|
||||||
|
|
17
.vscode/launch.json
vendored
17
.vscode/launch.json
vendored
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
// Use IntelliSense to learn about possible attributes.
|
|
||||||
// Hover to view descriptions of existing attributes.
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"type": "pwa-node",
|
|
||||||
"request": "launch",
|
|
||||||
"name": "Launch Program",
|
|
||||||
"skipFiles": [
|
|
||||||
"<node_internals>/**"
|
|
||||||
],
|
|
||||||
"program": "${workspaceFolder}/index.js"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { SlashCommandBuilder } from '@discordjs/builders';
|
import { SlashCommandBuilder } from '@discordjs/builders';
|
||||||
import { MessageEmbed } from 'discord.js';
|
import { MessageEmbed } from 'discord.js';
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
|
@ -34,7 +34,7 @@ export default {
|
||||||
.setURL('https://reddit.com' + response.data.children[i].data.permalink)
|
.setURL('https://reddit.com' + response.data.children[i].data.permalink)
|
||||||
.setFooter(`/r/${response.data.children[i].data.subreddit} | ⬆ ${response.data.children[i].data.ups} 🗨 ${response.data.children[i].data.num_comments}`);
|
.setFooter(`/r/${response.data.children[i].data.subreddit} | ⬆ ${response.data.children[i].data.ups} 🗨 ${response.data.children[i].data.num_comments}`);
|
||||||
|
|
||||||
interaction.editReply({ embeds: [redditEmbed] });
|
interaction.editReply({ embeds: [redditEmbed]});
|
||||||
interaction.followUp(response.data.children[i].data.url);
|
interaction.followUp(response.data.children[i].data.url);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -25,12 +25,9 @@ export default {
|
||||||
const gifskiOutput = output.replace(path.extname(output), '.gif');
|
const gifskiOutput = output.replace(path.extname(output), '.gif');
|
||||||
const gifsicleOutput = output.replace(path.extname(output), 'gifsicle.gif');
|
const gifsicleOutput = output.replace(path.extname(output), 'gifsicle.gif');
|
||||||
|
|
||||||
// Extract every frame for gifski
|
await utils.ffmpeg(`-i ${output} ${os.tmpdir()}/frame${interaction.id}%04d.png`); // Extract every frame for gifski
|
||||||
await utils.ffmpeg(`-i ${output} ${os.tmpdir()}/frame${interaction.id}%04d.png`);
|
await gifski(gifskiOutput, `${os.tmpdir()}/frame${interaction.id}*`); // Make it look better
|
||||||
// Make it look better
|
await gifsicle(gifskiOutput, gifsicleOutput); // Optimize it
|
||||||
await gifski(gifskiOutput, `${os.tmpdir()}/frame${interaction.id}*`);
|
|
||||||
// Optimize it
|
|
||||||
await gifsicle(gifskiOutput, gifsicleOutput);
|
|
||||||
|
|
||||||
const fileStat = fs.statSync(gifsicleOutput);
|
const fileStat = fs.statSync(gifsicleOutput);
|
||||||
const fileSize = fileStat.size / 1000000.0;
|
const fileSize = fileStat.size / 1000000.0;
|
||||||
|
|
|
@ -42,12 +42,6 @@ const commands = [
|
||||||
|
|
||||||
const rest = new REST({ version: '9' }).setToken(token);
|
const rest = new REST({ version: '9' }).setToken(token);
|
||||||
|
|
||||||
if (process.argv[2] === 'global') {
|
|
||||||
rest.put(Routes.applicationCommands(clientId), { body: commands })
|
|
||||||
.then(() => console.log('Successfully registered application commands globally.'))
|
|
||||||
.catch(console.error);
|
|
||||||
}
|
|
||||||
|
|
||||||
rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands })
|
rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands })
|
||||||
.then(() => console.log(`Successfully registered application commands for the guild ${guildId}.`))
|
.then(() => console.log('Successfully registered application commands.'))
|
||||||
.catch(console.error);
|
.catch(console.error);
|
|
@ -1,7 +0,0 @@
|
||||||
export default {
|
|
||||||
name: 'unhandledRejection',
|
|
||||||
once: true,
|
|
||||||
async execute(error) {
|
|
||||||
console.error('Unhandled promise rejection:', error);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { exec } from 'node:child_process';
|
import { exec } from 'node:child_process';
|
||||||
import https from 'node:https';
|
import https from 'node:https';
|
||||||
import dotenv from 'dotenv';
|
import dotenv from 'dotenv'
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
const { uptimeURL, uptimeInterval } = process.env;
|
const { uptimeURL, uptimeInterval } = process.env;
|
||||||
|
|
30
index.js
30
index.js
|
@ -2,8 +2,8 @@ import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { Client, Collection, Intents } from 'discord.js';
|
import { Client, Collection, Intents } from 'discord.js';
|
||||||
import dotenv from 'dotenv';
|
import dotenv from 'dotenv'
|
||||||
dotenv.config();
|
dotenv.config()
|
||||||
const { token } = process.env;
|
const { token } = process.env;
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
@ -24,12 +24,12 @@ for (const file of commandFiles) {
|
||||||
client.commands.set(command.data.name, command);
|
client.commands.set(command.data.name, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load client events from the events folder
|
// Load events from the events folder
|
||||||
const clientEventsPath = path.join(__dirname, 'events/client');
|
const eventsPath = path.join(__dirname, 'events');
|
||||||
const clientEventFiles = fs.readdirSync(clientEventsPath).filter(file => file.endsWith('.js'));
|
const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js'));
|
||||||
|
|
||||||
for (const file of clientEventFiles) {
|
for (const file of eventFiles) {
|
||||||
const filePath = path.join(clientEventsPath, file);
|
const filePath = path.join(eventsPath, file);
|
||||||
let event = await import(filePath);
|
let event = await import(filePath);
|
||||||
event = event.default;
|
event = event.default;
|
||||||
if (event.once) {
|
if (event.once) {
|
||||||
|
@ -40,20 +40,4 @@ for (const file of clientEventFiles) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load process events from the events folder
|
|
||||||
const processEventsPath = path.join(__dirname, 'events/process');
|
|
||||||
const processEventFiles = fs.readdirSync(processEventsPath).filter(file => file.endsWith('.js'));
|
|
||||||
|
|
||||||
for (const file of processEventFiles) {
|
|
||||||
const filePath = path.join(processEventsPath, file);
|
|
||||||
let event = await import(filePath);
|
|
||||||
event = event.default;
|
|
||||||
if (event.once) {
|
|
||||||
process.once(event.name, (...args) => event.execute(...args));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
process.on(event.name, (...args) => event.execute(...args));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
client.login(token);
|
client.login(token);
|
||||||
|
|
12
package.json
12
package.json
|
@ -1,19 +1,15 @@
|
||||||
{
|
{
|
||||||
"name": "haha-yes",
|
"name": "haha-yes-new",
|
||||||
"version": "4.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node .",
|
|
||||||
"lint": "eslint .",
|
|
||||||
"lintfix": "eslint . --fix",
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "Supositware",
|
"author": "",
|
||||||
"homepage": "https://libtar.de",
|
"license": "ISC",
|
||||||
"license": "AGPL",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discordjs/builders": "^0.13.0",
|
"@discordjs/builders": "^0.13.0",
|
||||||
"@discordjs/rest": "^0.4.1",
|
"@discordjs/rest": "^0.4.1",
|
||||||
|
|
|
@ -13,8 +13,6 @@ You need to install the following
|
||||||
|
|
||||||
* ffmpeg (Optional but very recommanded: for yt-dlp to merge video/audio formats)
|
* ffmpeg (Optional but very recommanded: for yt-dlp to merge video/audio formats)
|
||||||
* yt-dlp ([a file can download it for you](prereq.js))
|
* yt-dlp ([a file can download it for you](prereq.js))
|
||||||
* gifsicle (For [vid2gif](commands/vid2gif.js))
|
|
||||||
* giski (For [vid2gif](commands/vid2gif.js))
|
|
||||||
* Somewhere to upload files larger than 8 mb (I use a self hosted (XBackBone)[https://github.com/SergiX44/XBackBone/] with the upload.sh script made from it, you can use anything else just need to be located in bin/upload.sh)
|
* Somewhere to upload files larger than 8 mb (I use a self hosted (XBackBone)[https://github.com/SergiX44/XBackBone/] with the upload.sh script made from it, you can use anything else just need to be located in bin/upload.sh)
|
||||||
|
|
||||||
### Installing
|
### Installing
|
||||||
|
@ -26,7 +24,7 @@ npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
To run the bot for the first time you need to execute [deploy-guild-commands.js](deploy-guild-commands.js) so the commands can be registered, don't forget to set your .env accordingly.
|
To run the bot for the first time you need to execute [deploy-guild-commands.js](deploy-guild-commands.js) so the commands can be registered, don't forget to set your .env accordingly.
|
||||||
``node deploy-commands.cjs``
|
``node deploy-commands.js``
|
||||||
|
|
||||||
then you can just run it normally.
|
then you can just run it normally.
|
||||||
``node index.js``
|
``node index.js``
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { exec } from 'node:child_process';
|
||||||
export default {
|
export default {
|
||||||
downloadVideo,
|
downloadVideo,
|
||||||
upload,
|
upload,
|
||||||
ffmpeg,
|
ffmpeg
|
||||||
};
|
};
|
||||||
async function downloadVideo(url, output, format = 'bestvideo*+bestaudio/best') {
|
async function downloadVideo(url, output, format = 'bestvideo*+bestaudio/best') {
|
||||||
await new Promise((resolve, reject) => {
|
await new Promise((resolve, reject) => {
|
||||||
|
|
Loading…
Reference in a new issue