say/index.js
2025-04-30 19:25:44 -04:00

107 lines
2.3 KiB
JavaScript

const {
Client,
ApplicationCommandOptionTypes,
ApplicationCommandTypes,
InteractionTypes,
MessageFlags
} = require("oceanic.js");
const client = new Client({
auth: `Bot ${process.env.BOT_TOKEN}`
});
async function evaluate(shitcode, intera) {
const console = {
_lines: [],
_log(...things) {
this._lines.push(
...things
.map((x) => inspect(x, { getters: true }))
.join(" ")
.split("\n")
);
}
};
console.log =
console.error =
console.warn =
console.info =
console._log.bind(console);
const int = intera;
const fs = require("fs");
const http = require("http");
const https = require("https");
const crypto = require("crypto");
const net = require("net");
const path = require("path");
const util = require("util");
const assert = require("assert");
const os = require("os");
const oceanic = require("oceanic.js");
let script = shitcode.replace(/(^`{3}(js|javascript)?|`{3}$)/g, "");
if (script.includes("await")) script = `(async () => { ${script} })()`;
try {
return await eval(script);
} catch (e) {
return e;
}
}
client.on("ready", () => {
console.log(`Logged in as ${client.user.username}`);
client.application.bulkEditGlobalCommands([
{
name: "say",
description: "Says whatever you provide",
options: [
{
name: "content",
description: "...",
type: ApplicationCommandOptionTypes.STRING,
required: true
},
{
name: "raw",
description: "...",
type: ApplicationCommandOptionTypes.BOOLEAN,
required: false
},
{
name: "eval",
description: "...",
type: ApplicationCommandOptionTypes.BOOLEAN,
required: false
}
]
}
]);
});
client.on("interactionCreate", async (interaction) => {
if (InteractionTypes.APPLICATION_COMMAND === interaction.type) {
await interaction.defer();
await interaction.deleteOriginal();
if (interaction.data.type === ApplicationCommandTypes.CHAT_INPUT) {
const content = interaction.data.options.getString("content", true);
const raw = interaction.data.options.getBoolean("raw");
const shouldEval = interaction.data.options.getBoolean("eval");
interaction.createFollowup(
shouldEval
? {
content: await evaluate(content, interaction)
}
: raw
? JSON.parse(content)
: {
content
}
);
}
}
});
client.connect();