This commit is contained in:
Neko Life 2021-07-10 02:09:06 +09:00
parent 5bfd4eee2e
commit 304e21f377
14 changed files with 237 additions and 236 deletions

View file

@ -1,7 +1,7 @@
'use strict';
const commando = require("@iceprod/discord.js-commando");
const { trySend, findMemberRegEx, cleanMentionID, findChannelRegEx, findRoleRegEx, defaultImageEmbed, parseDoubleDash, parseComa } = require("../../resources/functions");
const { trySend, findMemberRegEx, cleanMentionID, findChannelRegEx, findRoleRegEx, defaultImageEmbed, parseDoubleDash, parseComa, getRole } = require("../../resources/functions");
const { database } = require("../../database/mongo");
const col = database.collection("Guild");
const schedule = database.collection("Schedule");
@ -47,7 +47,7 @@ module.exports = class mute extends commando.Command {
group: "moderation",
description: "Mute.",
guildOnly: true,
userPermissions:['MANAGE_ROLES']
userPermissions: ['MANAGE_ROLES']
});
}
/**
@ -56,42 +56,37 @@ module.exports = class mute extends commando.Command {
* @returns
*/
async run(msg, arg) {
const doc = await col.findOne({document: msg.guild.id}),
modDoc = doc?.["moderation"],
muteSettingsDoc = modDoc?.["settings"]?.mute,
defaultDurationDoc = muteSettingsDoc?.defaultDuration,
infractionsDoc = modDoc?.infractions,
args = parseDoubleDash(arg),
mentions = parseComa(args.shift()),
durationRegExp = /\d+(?![^ymwdhs])[ymwdhs]?o?/gi,
invokedAt = msg.createdAt,
duration = {
year: invokedAt.getFullYear(),
month: invokedAt.getMonth(),
date: invokedAt.getDate(),
hour: invokedAt.getHours(),
minute: invokedAt.getMinutes(),
second: invokedAt.getSeconds()
};
if (!msg.guild.dbLoaded) msg.guild.dbLoad();
const muteSettingsDoc = msg.guild.moderation.mute,
defaultDurationDoc = muteSettingsDoc.defaultDuration,
args = parseDoubleDash(arg),
mentions = parseComa(args.shift()),
durationRegExp = /\d+(?![^ymwdhs])[ymwdhs]?o?/gi,
invokedAt = msg.createdAt,
duration = {
year: invokedAt.getFullYear(),
month: invokedAt.getMonth(),
date: invokedAt.getDate(),
hour: invokedAt.getHours(),
minute: invokedAt.getMinutes(),
second: invokedAt.getSeconds()
};
let theSettingUp = {
role: undefined,
defaultDuration: {
date: undefined,
string: undefined
},
logChannel: undefined
}
},
durationHasSet = false,
settingUp = false,
settingRole = false,
settingRoleHasSet = false,
settingDuration = false,
settingDurationHasSet = false,
settingLogChannel = false,
settingLogChannelHasSet = false,
[timeForMessage, targetUser] = [["Indefinite"], []],
reason = "No reason provided.",
resultMsg = "";
durationHasSet = false,
settingUp = false,
settingRole = false,
settingRoleHasSet = false,
settingDuration = false,
settingDurationHasSet = false,
[timeForMessage, targetUser] = [["Indefinite"], []],
reason = "No reason provided.",
resultMsg = "";
for (const argument of args) {
const setArg = argument.toLowerCase().trim();
if (/^settings?$/i.test(setArg)) {
@ -100,9 +95,6 @@ module.exports = class mute extends commando.Command {
if (settingUp && /^durations?$/i.test(setArg)) {
settingDuration = true;
}
if (settingUp && /^log$/i.test(setArg)) {
settingLogChannel = true;
}
if (settingUp && /^role$/i.test(setArg)) {
settingRole = true;
}
@ -141,41 +133,13 @@ module.exports = class mute extends commando.Command {
}
durationHasSet = true;
} else {
if (!settingRole && !settingLogChannel && argument.length > 0 && argument !== "--") {
if (!settingRole && argument.length > 0 && argument !== "--") {
reason = argument.trim();
} else {
if (settingLogChannel && !settingLogChannelHasSet && argument.length > 0 && argument !== "--" && setArg !== "log") {
settingLogChannelHasSet = true;
const key = cleanMentionID(argument);
let logChannel;
if (/^\d{17,19}$/.test(key)) {
logChannel = msg.guild.channels.cache.get(argument);
} else {
const found = findChannelRegEx(msg, key);
logChannel = found[0];
}
if (/^none$/i.test(key)) {
logChannel = undefined;
}
if (logChannel || /^none$/i.test(key)) {
theSettingUp.logChannel = logChannel?.id;
} else {
resultMsg += `No channel found for: **${argument}**\n`;
}
}
if (settingRole && !settingRoleHasSet && argument.length > 0 && argument !== "--" && setArg !== "role") {
settingRoleHasSet = true;
const key = cleanMentionID(argument);
let role;
if (/^\d{17,19}$/.test(key)) {
role = msg.guild.roles.cache.get(argument);
} else {
const found = findRoleRegEx(msg, key);
role = found[0]?.id;
}
if (/^none$/i.test(key)) {
role = undefined;
}
let role = getRole(msg.guild, key)?.id;
if (role || /^none$/i.test(key)) {
theSettingUp.role = role;
} else {
@ -187,7 +151,7 @@ module.exports = class mute extends commando.Command {
}
const roleConfCheck = msg.guild.roles.cache.get(muteSettingsDoc?.role);
if (!roleConfCheck && !settingUp) {
return trySend(this.clientPermissions, msg, `No mute role configured! Run \`${msg.guild.commandPrefix}${this.name} --settings <--role --<role_[name | ID]>> [--duration --<duration> | --log --<channel_[name | ID]>]\` to set it up.`);
resultMsg += `No mute role configured! Run \`${msg.guild.commandPrefix}${this.name} --settings <--role --<role_[name | ID]>> [--duration --<duration>\` to set it up.`;
}
let untilDate = new Date(String(duration.year), String(duration.month), String(duration.date), String(duration.hour), String(duration.minute), String(duration.second));
if (untilDate.toString() === "Invalid Date") untilDate = "Indefinite";
@ -201,31 +165,31 @@ module.exports = class mute extends commando.Command {
if (untilDate instanceof Date) {
timeForMessage = [];
const elapsedTime = new Date(untilDate.valueOf() - invokedAt.valueOf() + 1000),
elapsed = [
elapsedTime.getFullYear() - 1970,
elapsedTime.getMonth(),
elapsedTime.getDate() - 1,
elapsedTime.getHours(),
elapsedTime.getMinutes(),
elapsedTime.getSeconds()
],
elapsedName = [
"year",
"month",
"day",
"hour",
"minute",
"second"
];
elapsed = [
elapsedTime.getFullYear() - 1970,
elapsedTime.getMonth(),
elapsedTime.getDate() - 1,
elapsedTime.getHours(),
elapsedTime.getMinutes(),
elapsedTime.getSeconds()
],
elapsedName = [
"year",
"month",
"day",
"hour",
"minute",
"second"
];
for (let index = 0; index < elapsed.length; index++) {
if (elapsed[index] > 0) {
let mes = `${elapsed[index]} ${elapsedName[index]}`;
if (elapsed[index] > 1) {
mes += "s";
} else {}
} else { }
timeForMessage.push(mes);
} else {}
} else { }
}
if (timeForMessage.length > 1) {
timeForMessage[timeForMessage.length - 2] += " and";
@ -233,43 +197,35 @@ module.exports = class mute extends commando.Command {
if (settingDuration && !settingDurationHasSet && timeForMessage.length > 0) {
settingDurationHasSet = true;
theSettingUp.defaultDuration.date = elapsedTime,
theSettingUp.defaultDuration.string = timeForMessage.join(" ");
theSettingUp.defaultDuration.string = timeForMessage.join(" ");
}
}
if (settingUp) {
if(settingRoleHasSet) {
await col.updateOne({document:msg.guild.id}, {$set:{"moderation.settings.mute.role":theSettingUp.role}}, {upsert:true}).catch(e => {return trySend(this.client, msg, "```js\n"+e.stack+"```")});
if (settingUp || !roleConfCheck && !settingUp) {
if (settingRoleHasSet) {
await col.updateOne({ document: msg.guild.id }, { $set: { "moderation.settings.mute.role": theSettingUp.role } }, { upsert: true }).catch(e => { return trySend(this.client, msg, "```js\n" + e.stack + "```") });
}
if (durationHasSet) {
await col.updateOne({document:msg.guild.id}, {$set:{"moderation.settings.mute.defaultDuration":theSettingUp.defaultDuration}}, {upsert:true}).catch(e => {return trySend(this.client, msg, "```js\n"+e.stack+"```")});
await col.updateOne({ document: msg.guild.id }, { $set: { "moderation.settings.mute.defaultDuration": theSettingUp.defaultDuration } }, { upsert: true }).catch(e => { return trySend(this.client, msg, "```js\n" + e.stack + "```") });
}
if (settingLogChannelHasSet) {
await col.updateOne({document:msg.guild.id}, {$set:{"moderation.settings.mute.logChannel":theSettingUp.logChannel}}, {upsert:true}).catch(e => {return trySend(this.client, msg, "```js\n"+e.stack+"```")});
}
const doc = await col.findOne({document: msg.guild.id}),
modDoc = doc?.["moderation"],
muteSettingsDoc = modDoc?.["settings"]?.mute,
defaultDurationDoc = muteSettingsDoc?.defaultDuration,
logChannelDoc = muteSettingsDoc?.logChannel,
roleDoc = muteSettingsDoc?.role;
const defaultDurationDoc = muteSettingsDoc?.defaultDuration,
roleDoc = muteSettingsDoc?.role;
let settings = defaultImageEmbed(msg);
settings
.setTitle("Mute Configuration")
.addField("Role", roleDoc ? "<@&"+roleDoc+">" : "Not set")
.addField("Duration", defaultDurationDoc?.string ?? "Not set")
.addField("Log", logChannelDoc ? "<#"+logChannelDoc+">" : "Not set");
return trySend(this.client, msg, {content:resultMsg, embed:settings});
.setTitle("Mute Configuration")
.addField("Role", roleDoc ? "<@&" + roleDoc + ">" : "Not set")
.addField("Duration", defaultDurationDoc?.string ?? "Not set");
return trySend(this.client, msg, { content: resultMsg, embed: settings });
}
for (const usermention of mentions) {
if (usermention.length > 0) {
let found = [],
nameid = cleanMentionID(usermention);
nameid = cleanMentionID(usermention);
if (/^\d{17,19}$/.test(nameid)) {
const findmem = msg.guild.member(nameid);
if (findmem) {
found.push(findmem.user);
} else {
await this.client.users.fetch(nameid).then(fetchUser => found.push(fetchUser)).catch(() => {});
await this.client.users.fetch(nameid).then(fetchUser => found.push(fetchUser)).catch(() => { });
}
} else {
found = findMemberRegEx(msg, nameid).map(r => r.user);
@ -289,26 +245,26 @@ module.exports = class mute extends commando.Command {
}
} else {
if (!settingUp && mentions[0].length === 0) {
return trySend(this.client, msg, "Who do you wanna mute? Provide as first argument `<[RegExp | user_[mention | ID]]>`. Use `,` to provide more than one user. Use `--` to split arguments.\nExample:```js\n" + `${msg.guild.commandPrefix}${this.name} 832423842785623423, @Shasha#1234, retard wanna get muted, #6969, ^fuck\\s(ur)?\\s.{5}#\\d+69$--69y69mo69w420d420h420m420s--Saying "joe"\`\`\``);
return trySend(this.client, msg, "Args: `<[user_[mention|ID|name]]> -- [reason] -- [duration]`. Use `,` to provide multiple user.\nExample:```js\n" + `${msg.guild.commandPrefix}${this.name} 580703409934696449, @Shasha#1234, ur mom,#6969,^fuck\\s(ur)?\\s.{5}#\\d+69$--69y69mo69w420d420h420m420s -- Saying "joe"\`\`\``);
}
}
}
let infractionToDoc;
if (targetUser.length > 0) {
let targetMember = [],
notInServer = [];
notInServer = [];
for (const user of targetUser) {
const member = msg.guild.member(user);
if (member) {
const pushIt = member.toJSON();
pushIt.roles = member.roles.cache.map(r => r.id);
pushIt.rolesID = member.roles.cache.map(r => r.id);
targetMember.push(pushIt);
} else {
const pushIt = user.toJSON();
notInServer.push(pushIt);
}
}
const infractionCase = infractionsDoc?.map(r => r.infraction)?.length;
const infractionCase = msg.guild.infractions?.length;
infractionToDoc = {
infraction: infractionCase ? infractionCase + 1 : 1,
by: targetUser,
@ -318,47 +274,47 @@ module.exports = class mute extends commando.Command {
for: timeForMessage,
until: untilDate,
reason: reason,
scene: msg.url,
msg: msg.toJSON(),
members: targetMember,
users: notInServer
}
await col.updateOne({document: msg.guild.id}, { $push:{"moderation.infractions": infractionToDoc}}, {upsert:true});
const newUnmuteSchedule = {
name: "unmute",
path: "./scheduler/unmute.js",
worker: {
argv: [msg, infractionToDoc.infraction]
},
date: untilDate
}
await col.updateOne({ document: msg.guild.id }, { $push: { "moderation.infractions": infractionToDoc } }, { upsert: true });
const NAME = msg.guild.id + "/" + infractionToDoc.infraction,
newUnmuteSchedule = {
name: NAME,
path: "./scheduler/unmute.js",
worker: {
argv: [NAME]
},
date: untilDate
};
}
resultMsg += `Result:\`\`\`js\nUsers: ${targetUser.map(r => r?.tag).join(", ")}\nReason: ${reason}\nAt: ${invokedAt.toUTCString()}\nFor: ${timeForMessage.join(" ")}\nUntil: ${typeof untilDate !== "string" ? untilDate.toUTCString() : untilDate}\`\`\``;
trySend(this.client, msg, {content:resultMsg+"```js\n" + JSON.stringify(infractionToDoc, null, 2) + "```",split:{maxLength: 2000,append:",```",prepend:"```js\n",char:","}});
return
return trySend(this.client, msg, { content: resultMsg + "```js\n" + JSON.stringify(infractionToDoc, null, 2) + "```", split: { maxLength: 2000, append: ",```", prepend: "```js\n", char: "," } });
}
};
/* if (config.mute.role.length === 0) {
return msg.channel.send(`Mute role isn't set! Run \`${this.client.commandPrefix}mute --role <role_[mention, ID]>\`. If you insist i will just give them admin perms <:purifyLife:774102054046007298>`)
}
if (setArgs) {
for(let set of setArgs) {
set = set.toLowerCase();
switch(set) {
case startsWith('role'): {
let role = set.slice('role'.length).trim();
if (role.startsWith('<&')) {
role = role.slice(2,-1);
}
//const foundRole =
}
}
/* if (config.mute.role.length === 0) {
return msg.channel.send(`Mute role isn't set! Run \`${this.client.commandPrefix}mute --role <role_[mention, ID]>\`. If you insist i will just give them admin perms <:purifyLife:774102054046007298>`)
}
if (setArgs) {
for(let set of setArgs) {
set = set.toLowerCase();
switch(set) {
case startsWith('role'): {
let role = set.slice('role'.length).trim();
if (role.startsWith('<&')) {
role = role.slice(2,-1);
}
}*/
//const foundRole =
}
}
}
}*/
//scheduler.add()
/*const yearDate = dateDur.getFullYear();
const monthDate = dateDur.getMonth();
const dayDate = dateDur.getDay();
const hourDate = dateDur.getHours();
const minuteDate = dateDur.getMinutes();
const secondDate = dateDur.getSeconds();*/
/*const yearDate = dateDur.getFullYear();
const monthDate = dateDur.getMonth();
const dayDate = dateDur.getDay();
const hourDate = dateDur.getHours();
const minuteDate = dateDur.getMinutes();
const secondDate = dateDur.getSeconds();*/

View file

@ -23,7 +23,7 @@ module.exports = class profile extends commando.Command {
*/
async run(msg, arg) {
let TM;
if (!arg) TM = msg.author; else TM = getUser(msg, arg);
if (!arg) TM = msg.author; else TM = getUser(msg, arg, true);
if (!TM) return trySend(msg.client, msg, "Bro stop lookin for yo imaginary gf");
const MEM = msg.guild.member(TM),
emb = defaultImageEmbed(msg, null, `\`${TM.tag}\`'s Profile`);

View file

@ -1,10 +1,27 @@
"use strict";
const commando = require("@iceprod/discord.js-commando");
const { MessageEmbed, GuildChannel } = require("discord.js");
const { MessageEmbed, GuildChannel, Message } = require("discord.js");
const { ranLog, errLog, getChannelMessage, noPerm, tryReact, trySend, cleanMentionID, getChannel, adCheck, parseDash, reValidURL, parseDoubleDash, defaultImageEmbed } = require("../../resources/functions");
const getColor = require("../../resources/getColor");
const emoteMessage = require("../../resources/emoteMessage");
const HELP = {
desc: `**Embed creator:** You can just copy this template and remove unneeded argument. Every argument are optional.` +
`\n\`--j\` JSON: \`[MessageEmbed JSON Object]\`,\n\`--t\` Title: \`[text]\`,\n\`--d\` Description: \`[text]\`,\n\`--a\` Author:\n\` -n\` Name: \`[text]\`,\n\` -i\` Icon: \`[url]\`,\n` +
`\` -u\` URL: \`[url]\`,\n\`--c\` Color: \`[hex|number|name]\`,\n\`--i\` Image: \`[url]\`,\n\`--th\` Thumbnail: \`[url]\`,\n` +
`\`--u\` URL: \`[url]\`,\n\`--f\` Add Field:\n\` -n\` Name: \`[text]\`,\n\` -d\` Description: \`[text]\`,\n\` -i\` Inline: True if provided,\n` +
`\`--fo\` Footer:\n\` -t\` Text: \`[text]\`,\n\` -i\` Icon: \`[url]\`,\n\`--co\` Content: \`[text]\`,\n\`--ch\` Channel: \`[mention|ID|name]\`,\n` +
`\`--ti\` Timestamp: \`[ISO 8601|UNIX (Milliseconds)]\` - Use https://time.lol ,\n` +
`\`--at\` Attachments: \`[url]\` - You can put \`-c\` when editing to copy all existing message attachments ` +
`(Cannot remove existing attachment unless \`--ch\` provided).\n\n**Embed editor:** ` +
`You can put\n\`--e\` Edit: \`<[message_[ID|link]|channel_[mention|ID] message_ID]>\`` +
`\nas first argument to edit the embed in provided message. All existing property will be replaced ` +
`with provided argument. Put\n\`--r\` Remove [Author, Fields, Footer]: \`[a, f, fo]\`\nto remove all existing property ` +
`of the provided argument in the embed.\n\nOther arguments:\n\`--q\` Quote: \`<[message_[ID|link]|channel_[mention|ID] message_ID]>\`` +
` - Quote a message.`,
fields: [
]
};
module.exports = class embmaker extends commando.Command {
constructor(client) {
@ -14,26 +31,12 @@ module.exports = class embmaker extends commando.Command {
aliases: ["embed-maker", "creat-emb", "creat-embed", "embed"],
group: "utility",
description: "Embed creator.",
details:
`**Embed creator:** You can just copy this template and remove unneeded argument. Every argument are optional.` +
`,\n\`--j\` JSON: \`[MessageEmbed JSON Object]\`,\n\`--t\` Title: \`[text]\`,\n\`--d\` Description: \`[text]\`,\n\`--a\` Author:\n\` -n\` Name: \`[text]\`,\n\` -i\` Icon: \`[url]\`,\n` +
`\` -u\` URL: \`[url]\`,\n\`--c\` Color: \`[hex|number|name]\`,\n\`--i\` Image: \`[url]\`,\n\`--th\` Thumbnail: \`[url]\`,\n` +
`\`--u\` URL: \`[url]\`,\n\`--f\` Add Field:\n\` -n\` Name: \`[text]\`,\n\` -d\` Description: \`[text]\`,\n\` -i\` Inline: True if provided,\n` +
`\`--fo\` Footer:\n\` -t\` Text: \`[text]\`,\n\` -i\` Icon: \`[url]\`,\n\`--co\` Content: \`[text]\`,\n\`--ch\` Channel: \`[mention|ID|name]\`,\n` +
`\`--ti\` Timestamp: \`[ISO 8601|UNIX (Milliseconds)]\` - Use https://time.lol ,\n` +
`\`--at\` Attachments: \`[url]\` - You can put \`-c\` when editing to copy all existing message attachments ` +
`(Cannot remove existing attachment unless \`--ch\` provided).\n\n**Embed editor:** ` +
`You can put\n\`--e\` Edit: \`<[message_[ID|link]|channel_[mention|ID] message_ID]>\`` +
`\nas first argument to edit the embed in provided message. All existing property will be replaced ` +
`with provided argument. Put\n\`--r\` Remove [Author, Fields, Footer]: \`[a, f, fo]\`\nto remove all existing property ` +
`of the provided argument in the embed.\n\nOther arguments:\n\`--q\` Quote: \`<[message_[ID|link]|channel_[mention|ID] message_ID]>\`` +
` - Quote a message.`
details: "Run the command without argument to see details."
});
}
async run(msg, arg) {
let isAdmin = true;
if (msg.guild && !this.client.owners.includes(msg.author)) {
if (!msg.member.hasPermission("EMBED_LINKS")) return trySend(this.client, msg, "No <a:catsmugLife:799633767848214549>");
if (!msg.member.hasPermission("ADMINISTRATOR")) isAdmin = false;
}
const args = parseDoubleDash(arg);
@ -46,13 +49,14 @@ module.exports = class embmaker extends commando.Command {
continue;
}
if (value.startsWith("e ")) {
if (msg.guild && !msg.member.hasPermission("MANAGE_MESSAGES")) {
reportMessage += "**[EDIT]** Requires Manage Messages.\n";
continue;
}
const editArg = value.slice("e ".length).trim().split(/ +/);
if (editArg[0].length > 0) {
editSrc = await getChannelMessage(msg, editArg[0], editArg[1]);
if (editSrc && editSrc.invoker !== msg.author && !isAdmin) {
editSrc = undefined;
reportMessage += "**[EDIT]** Require Administrator.\n";
continue;
}
if (editSrc) {
const editEmb = editSrc.embeds[0];
if (editSrc.content) {
@ -149,7 +153,8 @@ module.exports = class embmaker extends commando.Command {
continue;
}
if (value.startsWith("d ")) {
const use = emoteMessage(this.client, value.slice("d ".length).trim().replace(/\\(?!\\)/g, ""));
let DD = value.slice("d ".length).trim();
let use = emoteMessage(this.client, DD.replace(/\\(?!\\)/g, ""));
embed.setDescription(isAdmin ? use : adCheck(use));
continue;
}
@ -335,6 +340,11 @@ module.exports = class embmaker extends commando.Command {
continue;
}
}
const PC = channel?.permissionsFor?.(msg.author).serialize();
const PM = msg.channel.permissionsFor?.(msg.author).serialize();
const CC = channel?.permissionsFor?.(this.client.user).serialize();
const CM = msg.channel.permissionsFor?.(this.client.user).serialize();
if (!(PC || PM).EMBED_LINKS) return trySend(this.client, msg, "No <a:catsmugLife:799633767848214549>");
if (autIcon === false && embed.author.name) delete embed.author.name;
if (!autName && autIcon) autName = "";
if (autName || autIcon && embed.author !== null) embed.setAuthor(autName, autIcon, autUrl);
@ -342,8 +352,10 @@ module.exports = class embmaker extends commando.Command {
if (footertext || footericon && embed.footer !== null) embed.setFooter(footertext, footericon);
if (embed.length === 0 && (embed.thumbnail === null || embed.thumbnail.url === null) && embed.author === null && (embed.image === null || embed.image.url === null) && !footericon) {
if (embed.timestamp) embed.setFooter(""); else {
content = `<@${msg.author.id}>`;
embed = defaultImageEmbed(msg, null, "Usage");
embed.setDescription(this.details);
embed.setDescription(HELP.desc);
if (HELP.fields.length > 0) for (const u of HELP.fields) embed.addField(u.name, u.value, u.inline);
}
}
if (embed.color === 16777215) embed.setColor(16777214);
@ -354,7 +366,7 @@ module.exports = class embmaker extends commando.Command {
if (editSrc) {
if (channel) {
if (msg.guild && !this.client.owners.includes(msg.author)) {
if (channel.permissionsFor(msg.author).serialize().ATTACH_FILES && channel.permissionsFor(this.client.user).serialize().ATTACH_FILES && newAttach.length > 0) {
if (PC?.ATTACH_FILES && CC?.ATTACH_FILES && newAttach.length > 0) {
reportMessage += "**[ATTACHMENT]** Uploading attachments....\n";
} else {
if (newAttach.length > 0) {
@ -366,9 +378,7 @@ module.exports = class embmaker extends commando.Command {
sent.push(trySend(this.client, channel, { content: content, embed: embed, files: newAttach }));
} else {
if (msg.guild) {
const c = msg.channel.permissionsFor(msg.author).serialize(),
f = msg.channel.permissionsFor(this.client.user).serialize();
if (!c.ATTACH_FILES && !f.ATTACH_FILES) {
if (PM.ATTACH_FILES === undefined && CM.ATTACH_FILES === undefined) {
if (newAttach.length > 0) {
newAttach = [];
reportMessage += "**[ATTACHMENT]** Missing permission.\n";
@ -387,7 +397,7 @@ module.exports = class embmaker extends commando.Command {
}
} else {
if (msg.guild && !this.client.owners.includes(msg.author)) {
if ((channel ?? msg.channel).permissionsFor(msg.author).serialize().ATTACH_FILES && (channel ?? msg.channel).permissionsFor(this.client.user).serialize().ATTACH_FILES && newAttach.length > 0) {
if ((PC || PM).ATTACH_FILES && (CC || CM).ATTACH_FILES && newAttach.length > 0) {
reportMessage += "**[ATTACHMENT]** Uploading attachments....\n";
} else {
if (newAttach.length > 0) {
@ -404,6 +414,9 @@ module.exports = class embmaker extends commando.Command {
} else {
noPerm(msg);
}
for (const m of sent) m.then(r => {
if (r instanceof Message) r.setInvoker(msg.author);
});
return sent;
} catch (e) {
return errLog(e, msg, this.client, true, "", true);

View file

@ -3,7 +3,7 @@
const commando = require("@iceprod/discord.js-commando");
const { default: axios } = require("axios");
const { Message } = require("discord.js");
const { trySend, getChannelMessage, defaultImageEmbed } = require("../../resources/functions");
const { trySend, getChannelMessage, defaultImageEmbed, wait } = require("../../resources/functions");
const SPLG = [
"en",
"ar",
@ -24,6 +24,10 @@ const SPLG = [
"vi"
],
REG = /(?<!\\)--m +[^\s\n]+( +\d{17,19})?/;
let rl = 0, ex = 0;
setInterval(() => {
if (rl > 0) rl--;
}, 100);
module.exports = class translate extends commando.Command {
constructor(client) {
@ -32,7 +36,7 @@ module.exports = class translate extends commando.Command {
aliases: ["t", "trans"],
memberName: "translate",
group: "utility",
description: "Translate some alien languages.",
description: "Translate some alien languages. `--h` for help.",
details: "**Supported languages:**\n" +
`\`en\` English\n` +
`\`ar\` Arabic\n` +
@ -50,8 +54,7 @@ module.exports = class translate extends commando.Command {
`\`ru\` Russian\n` +
`\`es\` Spanish\n` +
`\`tr\` Turkish\n` +
`\`vi\` Vietnamese\n\n` +
`\`--h\` for help`
`\`vi\` Vietnamese`
});
}
/**
@ -79,7 +82,6 @@ module.exports = class translate extends commando.Command {
const A = MA[0].slice(4).trim().split(/ +/);
console.log(A);
const C = await getChannelMessage(msg, A[0], A[1]);
console.log(C);
if (C) tmes = C;
};
arg = arg.replace(REG, "").trim();
@ -95,6 +97,10 @@ module.exports = class translate extends commando.Command {
if (!trans || trans.length === 0) {
return trySend(msg.client, msg, "Nothing to translate. `--h` for help <:nekohmLife:846371737644957786>");
}
ex++;
if (ex > 1) rl += 6;
const t = rl * 100;
await wait(t);
const res = await axios.post("https://translate.mentality.rip/translate", {
q: trans.replace(/\./g, ","),
source: "auto",
@ -102,7 +108,8 @@ module.exports = class translate extends commando.Command {
}).then(r => {
console.log(r.data);
return r.data.translatedText;
}).catch(console.error);
}).catch(console.error)
.finally(() => ex--);
return trySend(msg.client, msg, res);
}
};

View file

@ -2,11 +2,20 @@
function timestampAt(client) {
const date = new Date(new Date().valueOf() + (client?.matchTimestamp ? client.matchTimestamp : 0)),
string = date.toLocaleTimeString("UTC", {"day": "numeric", "month": "2-digit", "year": "2-digit", "hour12": true}),
ampm = string.slice(string.length - 3),
miliseconds = date.getUTCMilliseconds(),
result = string.slice(0, -3) + "." + miliseconds + ampm;
string = date.toLocaleTimeString("UTC", { "day": "numeric", "month": "2-digit", "year": "2-digit", "hour12": true }),
ampm = string.slice(string.length - 3),
miliseconds = date.getUTCMilliseconds(),
result = string.slice(0, -3) + "." + miliseconds + ampm;
return "At: " + result;
};
module.exports = { timestampAt }
/**
*
* @param {String} string
* @returns {import("discord.js").MessageOptions}
*/
function makeJSONMessage(string) {
return { content: '```js\n' + JSON.stringify(string, (k, v) => v ?? undefined, 2) + '```', split: { maxLength: 2000, char: ",", append: ',```', prepend: '```js\n' } };
}
module.exports = { timestampAt, makeJSONMessage }

View file

@ -11,7 +11,7 @@ module.exports = async (GUILD, USER) => {
const emb = defaultEventLogEmbed(GUILD);
const rea = (await GUILD.fetchBan(USER)).reason;
emb.setDescription(rea ?? "No reason provided.")
.setTitle(`User \`${USER.tag}\` banned`)
.setTitle(`\`${USER.tag}\` banned`)
.setColor(getColor("red"))
.setThumbnail(USER.displayAvatarURL({ size: 4096, format: "png", dynamic: true }))
.addField("User", `<@${USER.id}>\n(${USER.id})`);

View file

@ -15,11 +15,11 @@ module.exports = (member) => {
if (!log) return;
const emb = defaultEventLogEmbed(member.guild);
emb
.setTitle("User `" + member.user.tag + "` joined")
.setThumbnail(member.user.displayAvatarURL({format: "png", size: 4096, dynamic: true}))
.setColor(getColor("cyan"))
.addField("Registered", "**" + member.user.createdAt.toUTCString().slice(0, -4) + "**", true)
.setDescription(`<@!${member.id}> (${member.id}) just joined.\nWe have ${member.guild.memberCount} total members now.`);
.setTitle("`" + member.user.tag + "` joined")
.setThumbnail(member.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true }))
.setColor(getColor("cyan"))
.addField("Registered", "**" + member.user.createdAt.toUTCString().slice(0, -4) + "**", true)
.setDescription(`<@!${member.id}> (${member.id}) just joined.\nWe have ${member.guild.memberCount} total members now.`);
return trySend(member.client, log, emb);
}
}

View file

@ -18,7 +18,7 @@ module.exports = (member) => {
const RO = member.roles.cache.sort((a, b) => b.position - a.position).map(r => r.id).slice(0, -1),
RU = splitOnLength(RO, 1010, ">, <@&");
emb
.setTitle("Member `" + member.user.tag + "` left")
.setTitle("`" + member.user.tag + "` left")
.setThumbnail(member.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true }))
.setColor(getColor("yellow"))
.addField("Registered", "**" + member.user.createdAt.toUTCString().slice(0, -4) + "**", true)

View file

@ -12,25 +12,25 @@ const getColor = require("../getColor");
*/
module.exports = (memberold, membernew) => {
if (!membernew.guild.eventChannels?.memberRole && !membernew.guild.eventChannels?.member) {
if (membernew.user.cachedAvatarURL != membernew.user.displayAvatarURL({format: "png", size: 4096, dynamic: true})) {
membernew.user.cachedAvatarURL = membernew.user.displayAvatarURL({format: "png", size: 4096, dynamic: true});
if (membernew.user.cachedAvatarURL != membernew.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })) {
membernew.user.cachedAvatarURL = membernew.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true });
};
return;
}
let log;
const emb = defaultEventLogEmbed(membernew.guild);
emb.setTitle("Profile `" + memberold.user.tag + "` updated")
.setThumbnail(membernew.user.cachedAvatarURL ?? memberold.toJSON().displayAvatarURL)
.setColor(getColor("blue"));
.setThumbnail(membernew.user.cachedAvatarURL ?? memberold.toJSON().displayAvatarURL)
.setColor(getColor("blue"));
if (membernew.guild.eventChannels?.memberRole) {
log = getChannel(membernew, membernew.guild.eventChannels.memberRole);
if (membernew.roles.cache.size > memberold.roles.cache.size) {
emb.addField("Role added", ("<@&" + membernew.roles.cache.difference(memberold.roles.cache).sort((a, b) => b.position - a.position).map(r => r.id).join(">, <@&") + ">").slice(0, 2048))
.setDescription("**Old roles**\n" + (memberold.roles.cache.size > 1 ? "<@&" + memberold.roles.cache.sort((a, b) => b.position - a.position).map(r => r.id).slice(0, -1).join(">, <@&") + ">" : "`[NONE]`"));
.setDescription("**Old roles**\n" + (memberold.roles.cache.size > 1 ? "<@&" + memberold.roles.cache.sort((a, b) => b.position - a.position).map(r => r.id).slice(0, -1).join(">, <@&") + ">" : "`[NONE]`"));
}
if (membernew.roles.cache.size < memberold.roles.cache.size) {
emb.addField("Role removed", ("<@&" + memberold.roles.cache.difference(membernew.roles.cache).sort((a, b) => b.position - a.position).map(r => r.id).join(">, <@&") + ">").slice(0, 2048))
.setDescription("**Current roles**\n" + (membernew.roles.cache.size > 1 ? "<@&" + membernew.roles.cache.sort((a, b) => b.position - a.position).map(r => r.id).slice(0, -1).join(">, <@&") + ">" : "`[NONE]`"));
.setDescription("**Current roles**\n" + (membernew.roles.cache.size > 1 ? "<@&" + membernew.roles.cache.sort((a, b) => b.position - a.position).map(r => r.id).slice(0, -1).join(">, <@&") + ">" : "`[NONE]`"));
}
}
if (membernew.guild.eventChannels?.member && membernew.roles.cache.size === memberold.roles.cache.size) {
@ -38,14 +38,14 @@ module.exports = (memberold, membernew) => {
if (membernew.displayName != memberold.displayName) {
emb.addField("Nickname", "Changed from `" + memberold.displayName + "` to `" + membernew.displayName + "`");
}
if (membernew.user.cachedAvatarURL != membernew.user.displayAvatarURL({format: "png", size: 4096, dynamic: true})) {
if (membernew.user.cachedAvatarURL != membernew.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })) {
emb
.setImage(membernew.user.displayAvatarURL({format: "png", size: 4096, dynamic: true}))
.addField("Avatar", (emb.thumbnail ? "This embed's thumbnail is the user's old avatar.\n" : "") + "The image below is the user's new avatar.");
.setImage(membernew.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true }))
.addField("Avatar", (emb.thumbnail ? "This embed's thumbnail is the user's old avatar.\n" : "") + "The image below is the user's new avatar.");
}
}
if (membernew.user.cachedAvatarURL != membernew.user.displayAvatarURL({format: "png", size: 4096, dynamic: true})) {
membernew.user.cachedAvatarURL = membernew.user.displayAvatarURL({format: "png", size: 4096, dynamic: true});
if (membernew.user.cachedAvatarURL != membernew.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })) {
membernew.user.cachedAvatarURL = membernew.user.displayAvatarURL({ format: "png", size: 4096, dynamic: true });
};
if (!emb.fields || emb.fields.length === 0) return;
return trySend(membernew.client, log, emb);

View file

@ -17,7 +17,7 @@ function giveNickHeart(msg) {
.then(r => {
if (r) return trySend(msg.client, msg, "okay <3");
})
.catch(e => noPerm(msg));
.catch(() => noPerm(msg));
}
}

View file

@ -62,12 +62,12 @@ async function getChannelMessage(msg, MainID, SecondID) {
if (SecondID && !/\D/.test(SecondID)) {
try {
const meschannel = (msg.client.owners.includes(msg.author) ? msg.client : msg.guild).channels.cache.get(MainID);
return meschannel.messages.fetch(SecondID);
return meschannel.messages.fetch(SecondID, true);
} catch {
return;
}
} else {
return msg.channel.messages.fetch(MainID).catch(() => { });
return msg.channel.messages.fetch(MainID, true).catch(() => { });
}
}
@ -81,17 +81,18 @@ function execCB(error, stdout, stderr) {
/**
* Command usage logger
* @param {CommandoMessage} msg
* @param {CommandoMessage} msg
* @param {String} addition
*/
async function ranLog(msg, addition) {
if (typeof addition != "string") return console.log(`[RANLOG] Not a string:`, addition);
const channel = msg.client.channels.cache.get(ranLogger),
ifCode = addition.startsWith("```") && addition.endsWith("```");
const addSplit = splitOnLength((addition.substr(ifCode ? 2045 : 2049)).split(","), 1010, ",");
ifCode = addition?.startsWith("```") && addition.endsWith("```");
const addSplit = splitOnLength((addition?.substr(ifCode ? 2045 : 2049)).split(","), 1010, ",");
const embed = defaultImageEmbed(msg, null, msg.command.name.toLocaleUpperCase() + ` ${msg.id}`);
embed.setAuthor(msg.author.tag + ` (${msg.author.id})`, msg.author.displayAvatarURL({ format: "png", size: 128, dynamic: true }))
.setURL(msg.url)
.setDescription(addition.slice(0, ifCode && addSplit[0]?.[0].length > 0 ? 2044 : 2048) + (ifCode && addSplit[0]?.[0].length > 0 ? "```" : ""));
.setURL(msg.url);
if (addition && addition.length > 0) embed.setDescription(addition.slice(0, ifCode && addSplit[0]?.[0].length > 0 ? 2044 : 2048) + (ifCode && addSplit[0]?.[0].length > 0 ? "```" : ""));
if (addSplit[0]?.[0].length > 0) for (const add of addSplit) embed.addField("", "```js\n" + add.join(",") + (embed.fields.length < (addSplit.length - 1) ? ",```" : ""));
embed.setFooter(timestampAt(msg.client), msg.guild?.iconURL({ format: "png", size: 128, dynamic: true }));
if (msg.guild) embed.addField("Guild", `\`${msg.guild?.name}\`\n(${msg.guild?.id})`, true);
@ -283,14 +284,14 @@ function findChannelRegEx(msg, name, exclude) {
/**
* Get role object with RegExp
* @param {Message | GuildMember} msg Object of the guild being searched
* @param {Message | GuildMember | Guild} msg Object of the guild being searched
* @param {String} name Keyword
* @returns {Role[]} Roles object found
*/
function findRoleRegEx(msg, name) {
if (!msg.guild || !name) return;
if (!msg || !name) return;
const re = new RegExp(name, "i");
return msg.guild.roles.cache.map(r => r).filter(r => re.test(r.name));
return (msg.guild || msg).roles.cache.map(r => r).filter(r => re.test(r.name));
}
/**
@ -454,7 +455,7 @@ function parseComa(content) {
* @returns {String[]}
*/
function parseDoubleDash(content) {
return content.trim().split(/(?<!\\)(--)+/);
return content.trim().split(/(?<!https?:\/\/[^\s\n]+)(?<!\\)(--)+/);
}
/**
@ -463,26 +464,34 @@ function parseDoubleDash(content) {
* @returns {String[]}
*/
function parseDash(content) {
return content.trim().split(/(?<!\\)-(?!-)/);
return content.trim().split(/(?<!https?:\/\/[^\s\n]+)(?<!\\)-(?!-)/);
}
const reValidURL = /^https?:\/\/\w+\.\w\w/;
const reValidURL = /^https?:\/\/[^\s\n]+\.[^\s\n][^\s\n]/;
/**
* Get user
* @param {Message} msg
* @param {String} key
* @param {Boolean} nonID
* @returns {User}
*/
function getUser(msg, key) {
function getUser(msg, key, nonID) {
if (!(msg || key)) return;
const use = cleanMentionID(key);
if (!use || use.length === 0) return;
let u;
if (/^\d{17,19}$/.test(use)) u = msg.client.users.cache.get(use); else u = getMember(msg.guild, use)?.[0].user;
return u;
if (/^\d{17,19}$/.test(use)) return msg.client.users.cache.get(use); else if (nonID) return getMember(msg.guild, use)?.[0].user;
}
function getRole(guild, key) {
if (!(guild || key)) return;
const use = cleanMentionID(key);
if (!use || use.length === 0) return;
if (/^\d{17,19}$/.test(use)) return guild.roles.cache.get(use); else return findRoleRegEx(guild, use)?.[0];
}
function wait(ms) { return new Promise(r => setTimeout(() => r(), ms)) }
module.exports = {
cleanMentionID, defaultEventLogEmbed,
multipleMembersFound, multipleRolesFound, multipleChannelsFound,
@ -492,5 +501,5 @@ module.exports = {
trySend, tryDelete, tryReact,
adCheck, defaultImageEmbed, getChannel,
splitOnLength, parseComa, parseDoubleDash, getMember,
parseDash, reValidURL, getUser
parseDash, reValidURL, getUser, getRole, wait
}

View file

@ -1,5 +1,7 @@
'use strict';
const { wait } = require("./functions");
const axios = require("axios").default,
U = ["Yo", "Yyo", "Hello my friend", "Hey cutie <3", "What", "Wat", "Watchu want", "Hewwo", "UwU hwee", "OwO whats this", "Yoooooooooo", "Supp", "Whats good mein frien", "Iyo", "Hows doin", "Wassup", "Whats good", "Wanna chat?"];
@ -21,16 +23,25 @@ const URL = [
'https://rebot.me/just-monika-56'
];
*/
let rl = 0, ex = 0;
setInterval(() => {
if (rl > 0) rl--;
}, 1000);
async function chatAnswer(message) {
// return axios.post("https://rebot.me/ask", { username: "simsimi", question: message }).then(r => r.data).catch(() => { });
ex++;
if (ex > 1) rl += 1;
const t = rl * 1000;
await wait(t);
const u = message.slice(0, 1000);
return axios.get(`https://api.simsimi.net/v1/`, {
params: {
text: u,
lang: "en"
}
}).then(r => r.data.success.replace(/Sim doesn't know what you are talking about. Please teach me/, "Sorry but i don't speak gibberish").replace(/kemon acho babu/, U[Math.floor(Math.random() * U.length)])).catch(() => { });
}).then(r => r.data.success.replace(/Sim doesn't know what you are talking about. Please teach me/, "Sorry but i don't speak gibberish").replace(/kemon acho babu/, U[Math.floor(Math.random() * U.length)])).catch(console.error)
.finally(() => ex--);
}
module.exports = { chatAnswer }
module.exports = { chatAnswer }

View file

@ -12,8 +12,8 @@ Structures.extend("Guild", g => {
}
async dbLoad() {
return database.collection("Guild").findOne({ document: this.id }).then((r, j) => {
if (j) return errLog(j, null, this.client);
return database.collection("Guild").findOne({ document: this.id }).then((r, e) => {
if (e) return errLog(e, null, this.client);
this.infractions = r?.moderation?.infractions || [];
this.moderation = r?.moderation?.settings || {};
this.defaultEmbed = r?.settings?.defaultEmbed || {};
@ -48,14 +48,6 @@ Structures.extend("Guild", g => {
} catch (e) { }
}
async setDescription(set) {
return database.collection("Guild").updateOne({ document: this.id }, { $set: { description: set }, $setOnInsert: { document: this.id } }, { upsert: true }, (e, r) => {
if (e) return errLog(e, null, this.client);
this.description = set;
return true;
});
}
async addInfraction(add) {
try {
const r = await database.collection("Guild").findOne({ document: this.id });
@ -195,7 +187,11 @@ Structures.extend("Message", e => {
super(client, data, channel);
this.previousMessageID = channel.lastMessageID;
};
}
setInvoker(user) {
return this.invoker = user;
};
};
});
Structures.extend("GuildMember", e => {
@ -204,8 +200,8 @@ Structures.extend("GuildMember", e => {
super(client, data, guild);
}
async getInfractions() {
async infractions() {
return this.guild.getInfractions(this.id);
}
}
})
});

View file

@ -3,7 +3,7 @@
const emoteMessage = require("../emoteMessage");
const { getChannel, parseDash, cleanMentionID, trySend } = require("../functions");
const { getGuild } = require("./resources/functions");
let a, G, C = [], last = 0, nO = "Args: [`-g` Guild: `[name|ID]`] `-c` Channel: `[name|ID]` [`-q` End current session | `-r` Resume previous session]";
let a, G, C = [], last = 0, nO = "Args: [`-g` Guild: `[name|ID]` | `-u` Remove channel: `[index]`] `-c` Channel: `[name|ID]` [`-q` End current session | `-r` Resume previous session]";
//const p = require("child_process");
module.exports = {
@ -98,7 +98,7 @@ module.exports = {
}
console.log("Session:");
for (let i = 0; i < C.length; i++) console.log(C[i].guild.name, C[i].guild.id, i + ":", C[i].name, C[i].id);
} else if (C[num]) return C[num].send(emoteMessage(client, sl ? arg.slice(num?.toString().length).trim() : arg)).catch(console.error); else {
} else if (C[num]) return C[num].send(emoteMessage(client, sl ? arg.slice(num?.toString().length).trim() ?? "hi" : arg)).catch(console.error); else {
console.log('No session. Available sessions:');
for (let i = 0; i < C.length; i++) console.log(C[i].guild.name, C[i].guild.id, i + ":", C[i].name, C[i].id);
return;