Compare commits

...

2 commits

12 changed files with 159 additions and 18 deletions

1
.gitignore vendored
View file

@ -1,5 +1,4 @@
.env .env
src/logs
node_modules/ node_modules/
src/commands/cbrowser.js src/commands/cbrowser.js
src/commands/cbrowser.disabled src/commands/cbrowser.disabled

View file

@ -17,6 +17,11 @@ clean up p/vileimagery, its horrendous
**_Note:_** _versions before this were not uploaded to the repo, this is not the first version._ **_Note:_** _versions before this were not uploaded to the repo, this is not the first version._
1.15 - added p/recent and p/rejoin, p/recent sends the most recently deleted message, p/rejoin calls rejoin function on voice connections. also added some broken code for a voiceStateUpdate event but im too lazy to fix it so ill do that basically never. also deleted some useless line from .gitignore
1.15.1 - fixed exploit with recurring p/recents
---
1.14 - added announcement system, bug fixes 1.14 - added announcement system, bug fixes
--- ---

67
package-lock.json generated
View file

@ -14,6 +14,7 @@
"discord.js-collector": "^1.8.9", "discord.js-collector": "^1.8.9",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"emoji-regex": "^10.2.1", "emoji-regex": "^10.2.1",
"fs-extra": "^11.2.0",
"libsodium-wrappers": "^0.7.13", "libsodium-wrappers": "^0.7.13",
"openai": "^4.17.0", "openai": "^4.17.0",
"regex": "^0.1.1", "regex": "^0.1.1",
@ -685,6 +686,19 @@
"node": ">= 14" "node": ">= 14"
} }
}, },
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=14.14"
}
},
"node_modules/getpass": { "node_modules/getpass": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
@ -693,6 +707,11 @@
"assert-plus": "^1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/har-schema": { "node_modules/har-schema": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@ -816,6 +835,17 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
}, },
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/JSONSelect": { "node_modules/JSONSelect": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz",
@ -1485,6 +1515,14 @@
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
}, },
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/uri-js": { "node_modules/uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@ -2080,6 +2118,16 @@
} }
} }
}, },
"fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"getpass": { "getpass": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
@ -2088,6 +2136,11 @@
"assert-plus": "^1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"har-schema": { "har-schema": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@ -2188,6 +2241,15 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
}, },
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"JSONSelect": { "JSONSelect": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz",
@ -2699,6 +2761,11 @@
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
}, },
"universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
},
"uri-js": { "uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",

View file

@ -16,6 +16,7 @@
"discord.js-collector": "^1.8.9", "discord.js-collector": "^1.8.9",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"emoji-regex": "^10.2.1", "emoji-regex": "^10.2.1",
"fs-extra": "^11.2.0",
"libsodium-wrappers": "^0.7.13", "libsodium-wrappers": "^0.7.13",
"openai": "^4.17.0", "openai": "^4.17.0",
"regex": "^0.1.1", "regex": "^0.1.1",

View file

@ -30,7 +30,8 @@ export default {
filename.endsWith(".ogg") || filename.endsWith(".ogg") ||
filename.endsWith(".webm") || filename.endsWith(".webm") ||
filename.endsWith(".m4a") || filename.endsWith(".m4a") ||
filename.endsWith(".mp4") filename.endsWith(".mp4") ||
filename.endsWith(".midi")
) { ) {
const filenameNoExtension = filename.split(".")[0]; const filenameNoExtension = filename.split(".")[0];
const files = fs.readdirSync("resources/soundboard"); const files = fs.readdirSync("resources/soundboard");

27
src/commands/recent.js Normal file
View file

@ -0,0 +1,27 @@
import fs from "fs";
import * as action from "../util/discordAction.js";
export default {
name: "recent",
description: "sends most recent deleted message",
execute(message, args) {
if (message.author.bot) return;
try {
const recent = fs.readFileSync(
`./logs/deletedmessages/${message.guild.id}.log`
);
} catch (err) {
action.reply(
message,
"pepperbot has yet to log a deleted message in this server"
);
console.log(err);
return;
}
const recent = fs.readFileSync(
`../pepperbot/logs/deletedmessages/${message.guild.id}.log`,
"utf8"
);
action.sendMessage(message.channelId, recent);
},
};

20
src/commands/rejoin.js Normal file
View file

@ -0,0 +1,20 @@
import { getVoiceConnection } from "@discordjs/voice";
import * as action from "../util/discordAction.js";
export default {
name: "rejoin",
description: "rejoin the voice channel",
execute(message, args) {
const connection = getVoiceConnection(message.guild.id);
if (connection) {
try {
connection.rejoin();
action.reply(message, "remade voice connection");
} catch (err) {
action.sendError(err);
}
} else {
action.reply(message, "no active voice connection in this guild");
}
},
};

View file

@ -36,6 +36,8 @@ export default {
webm: proposedfilename + ".webm", webm: proposedfilename + ".webm",
spacedm4a: proposedfilename.replaceAll(" ", "_") + ".m4a", spacedm4a: proposedfilename.replaceAll(" ", "_") + ".m4a",
m4a: proposedfilename + ".m4a", m4a: proposedfilename + ".m4a",
spacedmp4: proposedfilename.replaceAll(" ", "_") + ".mp4",
mp4: proposedfilename + ".mp4",
}; };
for (const value of Object.values(possibleFilenames)) { for (const value of Object.values(possibleFilenames)) {
if (files.includes(value)) { if (files.includes(value)) {

View file

@ -3,6 +3,7 @@ import { default as messageCreate } from "./messageCreate.js";
import { default as messageDelete } from "./messageDelete.js"; import { default as messageDelete } from "./messageDelete.js";
import { default as ready } from "./ready.js"; import { default as ready } from "./ready.js";
import { default as interactionCreate } from "./interactionCreate.js"; import { default as interactionCreate } from "./interactionCreate.js";
import { default as voiceStateUpdate } from "./voiceStateUpdate.js";
const events = { const events = {
guildMemberAdd, guildMemberAdd,
@ -10,6 +11,7 @@ const events = {
messageDelete, messageDelete,
ready, ready,
interactionCreate, interactionCreate,
voiceStateUpdate,
}; };
export default events; export default events;

View file

@ -1,4 +1,6 @@
import { default as log } from "../util/log.js"; import { default as log } from "../util/log.js";
import fs from "fs";
import fsextra from "fs-extra";
export default function (message) { export default function (message) {
try { try {
@ -6,22 +8,17 @@ export default function (message) {
"deletedmessages.log", "deletedmessages.log",
message, message,
import.meta.url, import.meta.url,
`deleted message from ${message.author.username} (${message.author}) with: "${message.content}"`, `deleted message from: ${message.author.username} (${message.author}) with: "${message.content}"`,
true true
); );
} catch { fsextra.ensureFileSync(
function sendError(message) { `../pepperbot/logs/deletedmessages/${message.guild.id}.log`
const channel = client.channels.cache.get("1148814162273763418"); );
let msg; fs.writeFileSync(
try { `../pepperbot/logs/deletedmessages/${message.guild.id}.log`,
msg = channel.send(`**error:** ${message}`); message.content
);
} catch (err) { } catch (err) {
sendError(err.rawError.message);
console.log(err); console.log(err);
return undefined;
}
return msg;
}
sendError("undefined error");
} }
} }

View file

@ -0,0 +1,17 @@
import { getVoiceConnection } from "@discordjs/voice";
export default async function (oldState, newState) {
if ((oldState.channelId = getVoiceConnection(oldState.guild.id))) {
if ((newState.channelId = undefined)) {
let channel = await client.channels.cache.get(oldState.channelId);
if (!channel) {
console.log("unable to find voice channel ");
return;
}
memberCount = channel.members.size;
if (MemberCount <= 1) {
channel.leave();
}
}
}
}

View file

@ -34,6 +34,9 @@ client.on("interactionCreate", (interaction) => {
events.interactionCreate(interaction); events.interactionCreate(interaction);
}); });
register(); client.on("voiceStateUpdate", (oldState, newState) => {
events.voiceStateUpdate(oldState, newState);
});
register();
client.login(process.env.TOKEN); client.login(process.env.TOKEN);