Make log files rotate, clean up separated text input, add more uncanny images, use a more reliable method to get the instance owner username
5
app.js
|
@ -24,6 +24,7 @@ import PrometheusWorker from "./utils/services/prometheus.js";
|
||||||
// some utils
|
// some utils
|
||||||
import { promises, readFileSync } from "fs";
|
import { promises, readFileSync } from "fs";
|
||||||
import winston from "winston";
|
import winston from "winston";
|
||||||
|
import "winston-daily-rotate-file";
|
||||||
import { exec as baseExec } from "child_process";
|
import { exec as baseExec } from "child_process";
|
||||||
import { promisify } from "util";
|
import { promisify } from "util";
|
||||||
|
|
||||||
|
@ -113,8 +114,8 @@ if (isMaster) {
|
||||||
},
|
},
|
||||||
transports: [
|
transports: [
|
||||||
new winston.transports.Console({ format: winston.format.colorize({ all: true }), stderrLevels: ["error", "warn"] }),
|
new winston.transports.Console({ format: winston.format.colorize({ all: true }), stderrLevels: ["error", "warn"] }),
|
||||||
new winston.transports.File({ filename: "logs/error.log", level: "error" }),
|
new winston.transports.DailyRotateFile({ filename: "logs/error-%DATE%.log", level: "error", zippedArchive: true, maxSize: 4194304, maxFiles: 8 }),
|
||||||
new winston.transports.File({ filename: "logs/main.log" })
|
new winston.transports.DailyRotateFile({ filename: "logs/main-%DATE%.log", zippedArchive: true, maxSize: 4194304, maxFiles: 8 })
|
||||||
],
|
],
|
||||||
level: process.env.DEBUG_LOG ? "debug" : "main",
|
level: process.env.DEBUG_LOG ? "debug" : "main",
|
||||||
format: winston.format.combine(
|
format: winston.format.combine(
|
||||||
|
|
BIN
assets/images/uncanny/baby.png
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
assets/images/uncanny/canny.png
Normal file
After Width: | Height: | Size: 364 KiB |
BIN
assets/images/uncanny/canny2.png
Normal file
After Width: | Height: | Size: 396 KiB |
BIN
assets/images/uncanny/canny3.png
Normal file
After Width: | Height: | Size: 314 KiB |
BIN
assets/images/uncanny/canny4.png
Normal file
After Width: | Height: | Size: 278 KiB |
BIN
assets/images/uncanny/canny5.png
Normal file
After Width: | Height: | Size: 426 KiB |
BIN
assets/images/uncanny/canny6.png
Normal file
After Width: | Height: | Size: 292 KiB |
BIN
assets/images/uncanny/canny7.png
Normal file
After Width: | Height: | Size: 484 KiB |
BIN
assets/images/uncanny/canny8.png
Normal file
After Width: | Height: | Size: 126 KiB |
|
@ -81,20 +81,17 @@ class ImageCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.constructor.requiresText) {
|
if (this.constructor.requiresText) {
|
||||||
const text = this.options.text ?? this.args;
|
const text = this.options.text ?? this.args.join(" ").trim();
|
||||||
if (text.length === 0 || !await this.criteria(text)) {
|
if (text.length === 0 || !await this.criteria(text, magickParams.url)) {
|
||||||
runningCommands.delete(this.author.id);
|
runningCommands.delete(this.author.id);
|
||||||
return this.constructor.noText;
|
return this.constructor.noText;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (typeof this.params) {
|
if (typeof this.params === "function") {
|
||||||
case "function":
|
|
||||||
Object.assign(magickParams.params, this.params(magickParams.url, magickParams.name));
|
Object.assign(magickParams.params, this.params(magickParams.url, magickParams.name));
|
||||||
break;
|
} else if (typeof this.params === "object") {
|
||||||
case "object":
|
|
||||||
Object.assign(magickParams.params, this.params);
|
Object.assign(magickParams.params, this.params);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let status;
|
let status;
|
||||||
|
|
|
@ -9,7 +9,8 @@ const exec = promisify(baseExec);
|
||||||
|
|
||||||
class InfoCommand extends Command {
|
class InfoCommand extends Command {
|
||||||
async run() {
|
async run() {
|
||||||
const owner = await this.ipc.fetchUser(process.env.OWNER.split(",")[0]);
|
let owner = await this.ipc.fetchUser(process.env.OWNER.split(",")[0]);
|
||||||
|
if (!owner) owner = await this.client.getRESTUser(process.env.OWNER.split(",")[0]);
|
||||||
const stats = await this.ipc.getStats();
|
const stats = await this.ipc.getStats();
|
||||||
return {
|
return {
|
||||||
embeds: [{
|
embeds: [{
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import ImageCommand from "../../classes/imageCommand.js";
|
import ImageCommand from "../../classes/imageCommand.js";
|
||||||
|
|
||||||
class GrayscaleCommand extends ImageCommand {
|
class GrayscaleCommand extends ImageCommand {
|
||||||
params() {
|
params = {
|
||||||
return {
|
|
||||||
color: "grayscale"
|
color: "grayscale"
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
static description = "Adds a grayscale filter";
|
static description = "Adds a grayscale filter";
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,18 @@
|
||||||
import ImageCommand from "../../classes/imageCommand.js";
|
import ImageCommand from "../../classes/imageCommand.js";
|
||||||
|
|
||||||
class MemeCommand extends ImageCommand {
|
class MemeCommand extends ImageCommand {
|
||||||
|
async criteria(text, url) {
|
||||||
|
const [topText, bottomText] = text.replaceAll(url, "").split(/(?<!\\),/).map(elem => elem.trim());
|
||||||
|
if (topText === "" && bottomText === "") {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
params(url) {
|
params(url) {
|
||||||
const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" ");
|
const newArgs = this.options.text ?? this.args.join(" ");
|
||||||
const [topText, bottomText] = newArgs.split(/(?<!\\),/).map(elem => elem.trim());
|
const [topText, bottomText] = newArgs.replaceAll(url, "").split(/(?<!\\),/).map(elem => elem.trim());
|
||||||
return {
|
return {
|
||||||
top: (this.options.case ? topText : topText.toUpperCase()).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"),
|
top: (this.options.case ? topText : topText.toUpperCase()).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"),
|
||||||
bottom: bottomText ? (this.options.case ? bottomText : bottomText.toUpperCase()).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : "",
|
bottom: bottomText ? (this.options.case ? bottomText : bottomText.toUpperCase()).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : "",
|
||||||
|
|
|
@ -1,9 +1,18 @@
|
||||||
import ImageCommand from "../../classes/imageCommand.js";
|
import ImageCommand from "../../classes/imageCommand.js";
|
||||||
|
|
||||||
class MotivateCommand extends ImageCommand {
|
class MotivateCommand extends ImageCommand {
|
||||||
|
async criteria(text, url) {
|
||||||
|
const [topText, bottomText] = text.replaceAll(url, "").split(/(?<!\\),/).map(elem => elem.trim());
|
||||||
|
if (topText === "" && bottomText === "") {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
params(url) {
|
params(url) {
|
||||||
const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" ");
|
const newArgs = this.options.text ?? this.args.join(" ");
|
||||||
const [topText, bottomText] = newArgs.split(/(?<!\\),/).map(elem => elem.trim());
|
const [topText, bottomText] = newArgs.replaceAll(url, "").split(/(?<!\\),/).map(elem => elem.trim());
|
||||||
return {
|
return {
|
||||||
top: topText.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"),
|
top: topText.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"),
|
||||||
bottom: bottomText ? bottomText.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : "",
|
bottom: bottomText ? bottomText.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : "",
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import ImageCommand from "../../classes/imageCommand.js";
|
import ImageCommand from "../../classes/imageCommand.js";
|
||||||
|
|
||||||
class SepiaCommand extends ImageCommand {
|
class SepiaCommand extends ImageCommand {
|
||||||
params() {
|
params = {
|
||||||
return {
|
|
||||||
color: "sepia"
|
color: "sepia"
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
static description = "Adds a sepia filter";
|
static description = "Adds a sepia filter";
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import ImageCommand from "../../classes/imageCommand.js";
|
import ImageCommand from "../../classes/imageCommand.js";
|
||||||
|
|
||||||
class SooSCommand extends ImageCommand {
|
class SooSCommand extends ImageCommand {
|
||||||
params() {
|
params = {
|
||||||
return {
|
|
||||||
soos: true
|
soos: true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
static description = "\"Loops\" an image sequence by reversing it when it's finished";
|
static description = "\"Loops\" an image sequence by reversing it when it's finished";
|
||||||
static aliases = ["bounce", "boomerang"];
|
static aliases = ["bounce", "boomerang"];
|
||||||
|
|
|
@ -10,9 +10,9 @@ const names = readdirSync(resolve(dirname(fileURLToPath(import.meta.url)), "../.
|
||||||
|
|
||||||
class UncannyCommand extends ImageCommand {
|
class UncannyCommand extends ImageCommand {
|
||||||
params(url, name = "unknown") {
|
params(url, name = "unknown") {
|
||||||
const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" ");
|
const newArgs = this.options.text ?? this.args.join(" ");
|
||||||
// eslint-disable-next-line prefer-const
|
// eslint-disable-next-line prefer-const
|
||||||
let [text1, text2] = newArgs.split(/(?<!\\),/).map(elem => elem.trim());
|
let [text1, text2] = newArgs.replaceAll(url, "").split(/(?<!\\),/).map(elem => elem.trim());
|
||||||
if (!text2?.trim()) text2 = name;
|
if (!text2?.trim()) text2 = name;
|
||||||
return {
|
return {
|
||||||
caption: text1?.trim() ? text1.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : random(prompts),
|
caption: text1?.trim() ? text1.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : random(prompts),
|
||||||
|
|
|
@ -23,7 +23,8 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
VImage::new_from_buffer(data.Data(), data.Length(), "",
|
VImage::new_from_buffer(data.Data(), data.Length(), "",
|
||||||
type == "gif" ? options->set("n", -1) : options)
|
type == "gif" ? options->set("n", -1) : options)
|
||||||
.colourspace(VIPS_INTERPRETATION_sRGB);
|
.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha())
|
||||||
|
in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int size = width / 5;
|
int size = width / 5;
|
||||||
|
@ -33,16 +34,19 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
|
|
||||||
string font_string = font == "roboto" ? "Roboto Condensed" : font;
|
string font_string = font == "roboto" ? "Roboto Condensed" : font;
|
||||||
|
|
||||||
|
VImage topImage;
|
||||||
|
if (top_text != "") {
|
||||||
string topText = "<span foreground=\"white\" background=\"black\">" +
|
string topText = "<span foreground=\"white\" background=\"black\">" +
|
||||||
top_text + "</span>";
|
top_text + "</span>";
|
||||||
|
|
||||||
VImage topImage = VImage::text(
|
topImage = VImage::text(
|
||||||
topText.c_str(),
|
topText.c_str(),
|
||||||
VImage::option()
|
VImage::option()
|
||||||
->set("rgba", true)
|
->set("rgba", true)
|
||||||
->set("align", VIPS_ALIGN_CENTRE)
|
->set("align", VIPS_ALIGN_CENTRE)
|
||||||
->set("font", (font_string + " " + to_string(size)).c_str())
|
->set("font", (font_string + " " + to_string(size)).c_str())
|
||||||
->set("width", textWidth));
|
->set("width", textWidth));
|
||||||
|
}
|
||||||
|
|
||||||
VImage bottomImage;
|
VImage bottomImage;
|
||||||
if (bottom_text != "") {
|
if (bottom_text != "") {
|
||||||
|
@ -82,13 +86,17 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
sideAddition / 2, addition / 2, bordered2.width() + sideAddition,
|
sideAddition / 2, addition / 2, bordered2.width() + sideAddition,
|
||||||
bordered2.height() + addition,
|
bordered2.height() + addition,
|
||||||
VImage::option()->set("extend", "black"));
|
VImage::option()->set("extend", "black"));
|
||||||
VImage frame = bordered3.join(
|
VImage frame;
|
||||||
|
if (top_text != "") {
|
||||||
|
frame = bordered3.join(
|
||||||
topImage.gravity(VIPS_COMPASS_DIRECTION_NORTH, bordered3.width(),
|
topImage.gravity(VIPS_COMPASS_DIRECTION_NORTH, bordered3.width(),
|
||||||
topImage.height() + (size / 4),
|
topImage.height() + (size / 4),
|
||||||
VImage::option()->set("extend", "black")),
|
VImage::option()->set("extend", "black")),
|
||||||
VIPS_DIRECTION_VERTICAL,
|
VIPS_DIRECTION_VERTICAL,
|
||||||
VImage::option()->set("background", 0x000000)->set("expand", true));
|
VImage::option()->set("background", 0x000000)->set("expand", true));
|
||||||
|
}
|
||||||
if (bottom_text != "") {
|
if (bottom_text != "") {
|
||||||
|
if (top_text == "") frame = bordered3;
|
||||||
frame = frame.join(
|
frame = frame.join(
|
||||||
bottomImage.gravity(VIPS_COMPASS_DIRECTION_NORTH, bordered3.width(),
|
bottomImage.gravity(VIPS_COMPASS_DIRECTION_NORTH, bordered3.width(),
|
||||||
bottomImage.height() + (size / 4),
|
bottomImage.height() + (size / 4),
|
||||||
|
@ -105,9 +113,9 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
final.write_to_buffer(
|
final.write_to_buffer(("." + type).c_str(), &buf, &length,
|
||||||
("." + type).c_str(), &buf, &length,
|
type == "gif" ? VImage::option()->set("dither", 1)
|
||||||
type == "gif" ? VImage::option()->set("dither", 1) : 0);
|
: 0);
|
||||||
|
|
||||||
result.Set("data", Napi::Buffer<char>::Copy(env, (char *)buf, length));
|
result.Set("data", Napi::Buffer<char>::Copy(env, (char *)buf, length));
|
||||||
result.Set("type", type);
|
result.Set("type", type);
|
||||||
|
|
|
@ -37,8 +37,9 @@
|
||||||
"node-fetch": "^3.2.9",
|
"node-fetch": "^3.2.9",
|
||||||
"qrcode": "^1.5.1",
|
"qrcode": "^1.5.1",
|
||||||
"sharp": "^0.30.7",
|
"sharp": "^0.30.7",
|
||||||
"shoukaku": "^3.1.2",
|
"shoukaku": "github:TheEssem/shoukaku",
|
||||||
"winston": "^3.8.1"
|
"winston": "^3.8.1",
|
||||||
|
"winston-daily-rotate-file": "^4.7.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.18.9",
|
"@babel/core": "^7.18.9",
|
||||||
|
|
|
@ -25,9 +25,10 @@ specifiers:
|
||||||
pg: ^8.7.3
|
pg: ^8.7.3
|
||||||
qrcode: ^1.5.1
|
qrcode: ^1.5.1
|
||||||
sharp: ^0.30.7
|
sharp: ^0.30.7
|
||||||
shoukaku: ^3.1.2
|
shoukaku: github:TheEssem/shoukaku
|
||||||
uuid: ^8.3.2
|
uuid: ^8.3.2
|
||||||
winston: ^3.8.1
|
winston: ^3.8.1
|
||||||
|
winston-daily-rotate-file: ^4.7.1
|
||||||
ws: ^8.8.1
|
ws: ^8.8.1
|
||||||
zlib-sync: ^0.1.7
|
zlib-sync: ^0.1.7
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ dependencies:
|
||||||
cmake-js: 6.3.2
|
cmake-js: 6.3.2
|
||||||
dotenv: 16.0.1
|
dotenv: 16.0.1
|
||||||
emoji-regex: 10.1.0
|
emoji-regex: 10.1.0
|
||||||
eris: github.com/esmBot/eris/828a57e7e8f52ec1b0b50d4f7f302f25705e46cc_bufferutil@4.0.6
|
eris: github.com/esmBot/eris/128cd6c99086d33afda7eef4b2f9ef8d9b5bea8c_bufferutil@4.0.6
|
||||||
eris-fleet: 1.0.2_eris@0.17.2-dev
|
eris-fleet: 1.0.2_eris@0.17.2-dev
|
||||||
file-type: 17.1.2
|
file-type: 17.1.2
|
||||||
format-duration: 2.0.0
|
format-duration: 2.0.0
|
||||||
|
@ -46,8 +47,9 @@ dependencies:
|
||||||
node-fetch: 3.2.9
|
node-fetch: 3.2.9
|
||||||
qrcode: 1.5.1
|
qrcode: 1.5.1
|
||||||
sharp: 0.30.7
|
sharp: 0.30.7
|
||||||
shoukaku: 3.1.2_bufferutil@4.0.6
|
shoukaku: github.com/TheEssem/shoukaku/7f1aa66df448354898a78da1ff5ed88d20c8d562_bufferutil@4.0.6
|
||||||
winston: 3.8.1
|
winston: 3.8.1
|
||||||
|
winston-daily-rotate-file: 4.7.1_winston@3.8.1
|
||||||
|
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
better-sqlite3: 7.6.2
|
better-sqlite3: 7.6.2
|
||||||
|
@ -885,7 +887,7 @@ packages:
|
||||||
/duplexer2/0.1.4:
|
/duplexer2/0.1.4:
|
||||||
resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
|
resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
readable-stream: 2.1.5
|
readable-stream: 2.3.7
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/electron-to-chromium/1.4.195:
|
/electron-to-chromium/1.4.195:
|
||||||
|
@ -919,7 +921,7 @@ packages:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eris: ~0.16.0
|
eris: ~0.16.0
|
||||||
dependencies:
|
dependencies:
|
||||||
eris: github.com/esmBot/eris/828a57e7e8f52ec1b0b50d4f7f302f25705e46cc_bufferutil@4.0.6
|
eris: github.com/esmBot/eris/128cd6c99086d33afda7eef4b2f9ef8d9b5bea8c_bufferutil@4.0.6
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/error-ex/1.3.2:
|
/error-ex/1.3.2:
|
||||||
|
@ -1125,6 +1127,12 @@ packages:
|
||||||
flat-cache: 3.0.4
|
flat-cache: 3.0.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/file-stream-rotator/0.6.1:
|
||||||
|
resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==}
|
||||||
|
dependencies:
|
||||||
|
moment: 2.29.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
/file-type/17.1.2:
|
/file-type/17.1.2:
|
||||||
resolution: {integrity: sha512-3thBUSfa9YEUEGO/NAAiQGvjujZxZiJTF6xNwyDn6kB0NcEtwMn5ttkGG9jGwm/Nt/t8U1bpBNqyBNZCz4F4ig==}
|
resolution: {integrity: sha512-3thBUSfa9YEUEGO/NAAiQGvjujZxZiJTF6xNwyDn6kB0NcEtwMn5ttkGG9jGwm/Nt/t8U1bpBNqyBNZCz4F4ig==}
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
@ -1596,6 +1604,10 @@ packages:
|
||||||
minimist: 1.2.6
|
minimist: 1.2.6
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/moment/2.29.4:
|
||||||
|
resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/ms/2.1.2:
|
/ms/2.1.2:
|
||||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||||
|
|
||||||
|
@ -1690,6 +1702,11 @@ packages:
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/object-hash/2.2.0:
|
||||||
|
resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
|
||||||
|
engines: {node: '>= 6'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/once/1.4.0:
|
/once/1.4.0:
|
||||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -1786,11 +1803,6 @@ packages:
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/petitio/1.4.0:
|
|
||||||
resolution: {integrity: sha512-9LaVd/5BLmbNU8Q4Ax8NezihiPt2ISNqi2vKilEchSSf+YSOXxfsLUb0SUmDskm1WkBOVTsqdyuyYI0RYKqr0Q==}
|
|
||||||
engines: {node: '>=12.3.0'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/pg-connection-string/2.5.0:
|
/pg-connection-string/2.5.0:
|
||||||
resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
|
resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -2162,17 +2174,6 @@ packages:
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/shoukaku/3.1.2_bufferutil@4.0.6:
|
|
||||||
resolution: {integrity: sha512-p3dqnKx0cv2BlVi2tvi++JilVRu5wBGG6Q0GHlrpNhiEe7kxZotSJom/smodUTGr+QaEYCY3e1j3JL+TO1NRkg==}
|
|
||||||
engines: {node: '>=16.0.0', npm: '>=7.0.0'}
|
|
||||||
dependencies:
|
|
||||||
petitio: 1.4.0
|
|
||||||
ws: 8.8.1_bufferutil@4.0.6
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- bufferutil
|
|
||||||
- utf-8-validate
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/simple-concat/1.0.1:
|
/simple-concat/1.0.1:
|
||||||
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
|
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -2536,6 +2537,19 @@ packages:
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/winston-daily-rotate-file/4.7.1_winston@3.8.1:
|
||||||
|
resolution: {integrity: sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
peerDependencies:
|
||||||
|
winston: ^3
|
||||||
|
dependencies:
|
||||||
|
file-stream-rotator: 0.6.1
|
||||||
|
object-hash: 2.2.0
|
||||||
|
triple-beam: 1.3.0
|
||||||
|
winston: 3.8.1
|
||||||
|
winston-transport: 4.5.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/winston-transport/4.5.0:
|
/winston-transport/4.5.0:
|
||||||
resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==}
|
resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==}
|
||||||
engines: {node: '>= 6.4.0'}
|
engines: {node: '>= 6.4.0'}
|
||||||
|
@ -2667,6 +2681,21 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
github.com/TheEssem/shoukaku/7f1aa66df448354898a78da1ff5ed88d20c8d562_bufferutil@4.0.6:
|
||||||
|
resolution: {tarball: https://codeload.github.com/TheEssem/shoukaku/tar.gz/7f1aa66df448354898a78da1ff5ed88d20c8d562}
|
||||||
|
id: github.com/TheEssem/shoukaku/7f1aa66df448354898a78da1ff5ed88d20c8d562
|
||||||
|
name: shoukaku
|
||||||
|
version: 3.1.3
|
||||||
|
engines: {node: '>=16.0.0', npm: '>=7.0.0'}
|
||||||
|
prepare: true
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
ws: 8.8.1_bufferutil@4.0.6
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- utf-8-validate
|
||||||
|
dev: false
|
||||||
|
|
||||||
github.com/abalabahaha/erlpack/f7d730debe32c416d1b55b4217f8aef2ade05874:
|
github.com/abalabahaha/erlpack/f7d730debe32c416d1b55b4217f8aef2ade05874:
|
||||||
resolution: {tarball: https://codeload.github.com/abalabahaha/erlpack/tar.gz/f7d730debe32c416d1b55b4217f8aef2ade05874}
|
resolution: {tarball: https://codeload.github.com/abalabahaha/erlpack/tar.gz/f7d730debe32c416d1b55b4217f8aef2ade05874}
|
||||||
name: erlpack
|
name: erlpack
|
||||||
|
@ -2678,9 +2707,9 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
github.com/esmBot/eris/828a57e7e8f52ec1b0b50d4f7f302f25705e46cc_bufferutil@4.0.6:
|
github.com/esmBot/eris/128cd6c99086d33afda7eef4b2f9ef8d9b5bea8c_bufferutil@4.0.6:
|
||||||
resolution: {tarball: https://codeload.github.com/esmBot/eris/tar.gz/828a57e7e8f52ec1b0b50d4f7f302f25705e46cc}
|
resolution: {tarball: https://codeload.github.com/esmBot/eris/tar.gz/128cd6c99086d33afda7eef4b2f9ef8d9b5bea8c}
|
||||||
id: github.com/esmBot/eris/828a57e7e8f52ec1b0b50d4f7f302f25705e46cc
|
id: github.com/esmBot/eris/128cd6c99086d33afda7eef4b2f9ef8d9b5bea8c
|
||||||
name: eris
|
name: eris
|
||||||
version: 0.17.2-dev
|
version: 0.17.2-dev
|
||||||
engines: {node: '>=10.4.0'}
|
engines: {node: '>=10.4.0'}
|
||||||
|
|
|
@ -66,7 +66,7 @@ export async function play(client, sound, options, music = false) {
|
||||||
const voiceChannel = options.channel.guild.channels.get(options.member.voiceState.channelID);
|
const voiceChannel = options.channel.guild.channels.get(options.member.voiceState.channelID);
|
||||||
if (!voiceChannel.permissionsOf(client.user.id).has("voiceConnect")) return "I don't have permission to join this voice channel!";
|
if (!voiceChannel.permissionsOf(client.user.id).has("voiceConnect")) return "I don't have permission to join this voice channel!";
|
||||||
const playerMeta = players.get(options.channel.guild.id);
|
const playerMeta = players.get(options.channel.guild.id);
|
||||||
if (!music && manager.players.has(options.channel.guild.id) && (playerMeta?.type === "music")) return "I can't play a sound effect while playing music!";
|
if (!music && manager.players.has(options.channel.guild.id)) return "I can't play a sound effect while other audio is playing!";
|
||||||
let node = manager.getNode();
|
let node = manager.getNode();
|
||||||
if (!node) {
|
if (!node) {
|
||||||
const status = await checkStatus();
|
const status = await checkStatus();
|
||||||
|
@ -122,15 +122,6 @@ export async function nextSong(client, options, connection, track, info, music,
|
||||||
skipVotes.delete(voiceChannel.guild.id);
|
skipVotes.delete(voiceChannel.guild.id);
|
||||||
const parts = Math.floor((0 / info.length) * 10);
|
const parts = Math.floor((0 / info.length) * 10);
|
||||||
let playingMessage;
|
let playingMessage;
|
||||||
if (!music && players.has(voiceChannel.guild.id)) {
|
|
||||||
const playMessage = players.get(voiceChannel.guild.id).playMessage;
|
|
||||||
try {
|
|
||||||
players.delete(voiceChannel.guild.id);
|
|
||||||
await playMessage.delete();
|
|
||||||
} catch {
|
|
||||||
// no-op
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (music && lastTrack === track && players.has(voiceChannel.guild.id)) {
|
if (music && lastTrack === track && players.has(voiceChannel.guild.id)) {
|
||||||
playingMessage = players.get(voiceChannel.guild.id).playMessage;
|
playingMessage = players.get(voiceChannel.guild.id).playMessage;
|
||||||
} else {
|
} else {
|
||||||
|
|