mirror of
https://github.com/danbulant/Shasha
synced 2026-06-18 13:51:08 +00:00
I'm really questioning life rn
This commit is contained in:
parent
8727d56772
commit
0442ccbe8d
11 changed files with 394 additions and 92 deletions
49
Main.js
49
Main.js
|
|
@ -9,9 +9,9 @@ const client = new Commando.Client({
|
|||
});
|
||||
const sqlite = require('sqlite');
|
||||
let configFile = require('./config.json');
|
||||
const { errLog, trySend } = require('./resources/functions');
|
||||
const { errLog, trySend, noPerm } = require('./resources/functions');
|
||||
const { join } = require('path');
|
||||
//const { chatAnswer } = require("./resources/shaChat");
|
||||
const { chatAnswer } = require("./resources/shaChat");
|
||||
const { timestampAt } = require("./resources/debug");
|
||||
|
||||
client.registry
|
||||
|
|
@ -20,7 +20,8 @@ client.registry
|
|||
'moderation',
|
||||
'experiment',
|
||||
'image',
|
||||
'fun'
|
||||
'fun',
|
||||
"owner"
|
||||
])
|
||||
.registerDefaults()
|
||||
.registerCommandsIn(join(__dirname, 'cmds'));
|
||||
|
|
@ -41,19 +42,43 @@ client.on('ready', async () => {
|
|||
});
|
||||
|
||||
client.on("message", async msg => {
|
||||
if (msg.guild?.dbLoaded === false && !msg.author.bot) {
|
||||
await msg.guild.dbLoad();
|
||||
}
|
||||
if (msg.author.dbLoaded === false && !msg.author.bot) {
|
||||
await msg.author.dbLoad();
|
||||
}/*
|
||||
if (msg.channel.id === "837178237322919966" && !msg.author.bot && !msg.content.toLowerCase().startsWith(client.commandPrefix+"chat")) {
|
||||
chatAnswer(client, msg);
|
||||
msg.author.dbLoad();
|
||||
}
|
||||
if (msg.channel.id === "837178237322919966" && !msg.author.bot && !msg.isCommand) {
|
||||
msg.channel.startTyping().then(trySend(client, msg, await chatAnswer(msg.cleanContent))
|
||||
).then(msg.channel.stopTyping()).catch(msg.channel.stopTyping());
|
||||
}
|
||||
|
||||
if (!msg.guild) {
|
||||
console.log(`(${msg.channel.recipient.id}) ${msg.channel.recipient.tag}: (${msg.author.id}) ${msg.author.tag}: ${msg.content}`);
|
||||
} */
|
||||
//console.log(`(${msg.channel.recipient.id}) ${msg.channel.recipient.tag}: (${msg.author.id}) ${msg.author.tag}: ${msg.content}`);
|
||||
} else {
|
||||
if (/(?<!dont|don't|no).*giv.*(heart|nick).*(nick|heart)/i.test(msg.content)) {
|
||||
if (!msg.member.displayName?.endsWith("<3")) {
|
||||
msg.member.setNickname(msg.member.displayName + " <3")
|
||||
.then(r => {
|
||||
if (r) {
|
||||
trySend(client, msg, "YES! <3 <3");
|
||||
};
|
||||
})
|
||||
.catch(noPerm(msg));
|
||||
}
|
||||
}
|
||||
if (/(dont|don't|no).*giv.*(heart|nick).*(nick|heart)/i.test(msg.content)) {
|
||||
if (msg.member.displayName?.endsWith(" <3")) {
|
||||
msg.member.setNickname(msg.member.displayName.slice(0, -3))
|
||||
.then(r => {
|
||||
if (r) {
|
||||
trySend(client, msg, "okay <3");
|
||||
};
|
||||
})
|
||||
.catch(noPerm(msg));
|
||||
}
|
||||
}
|
||||
if (msg.guild.dbLoaded === false) {
|
||||
msg.guild.dbLoad();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
client.on("guildMemberRemove", memberLeave => {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
const commando = require("@iceprod/discord.js-commando");
|
||||
//const { chatAnswer } = require("../../resources/shaChat");
|
||||
const { trySend } = require("../../resources/functions");
|
||||
const { chatAnswer } = require("../../resources/shaChat");
|
||||
|
||||
module.exports = class chat extends commando.Command {
|
||||
constructor(client) {
|
||||
|
|
@ -13,6 +14,13 @@ module.exports = class chat extends commando.Command {
|
|||
});
|
||||
}
|
||||
async run(msg) {
|
||||
//chatAnswer(this.client, msg);
|
||||
return msg.channel.startTyping().then(
|
||||
trySend(this.client, msg, await chatAnswer(msg.cleanContent.slice((msg.guild.commandPrefix + msg.command.name).length + 1))).then(r => {
|
||||
msg.channel.stopTyping();
|
||||
return r;
|
||||
}).catch(
|
||||
msg.channel.stopTyping()
|
||||
)
|
||||
);
|
||||
}
|
||||
};
|
||||
192
cmds/moderation/eventlog.js
Normal file
192
cmds/moderation/eventlog.js
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
'use strict';
|
||||
|
||||
const commando = require("@iceprod/discord.js-commando");
|
||||
const { getChannelProchedure, trySend, defaultImageEmbed } = require("../../resources/functions");
|
||||
|
||||
module.exports = class eventlog extends commando.Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: "eventlog",
|
||||
aliases: ["eventlogs"],
|
||||
memberName: "eventlog",
|
||||
group: "moderation",
|
||||
description: "Configure server's Event Log Channels.",
|
||||
guildOnly: true,
|
||||
userPermissions: ["MANAGE_GUILD"]
|
||||
});
|
||||
}
|
||||
async run(msg, arg) {
|
||||
const set = arg.split(/(?<!\\)(--)+/);
|
||||
let eventChannels = msg.guild.eventChannels;
|
||||
if (!eventChannels) eventChannels = {};
|
||||
if (set.length < 2 && set[0].length === 0) return trySend(this.client, msg, await resultEmbed(this));
|
||||
let report = "", joinleavelog, channellog, banunbanlog, messagelog = { channel: undefined, ignore: [] }, invitelog, rolelog, guildlog, membernicklog, emotelog, memberroleslog, remove = false, setMessageIgnore = false;
|
||||
for (const args of set) {
|
||||
const lowArg = args.toLowerCase();
|
||||
if (lowArg.startsWith("remove")) remove = true;
|
||||
if (lowArg.startsWith("joinleave")) {
|
||||
if (remove) eventChannels.joinLeave = undefined; else {
|
||||
joinleavelog = getChannelProchedure(this.client, msg, args.slice("joinleaves".length).trim())?.id;
|
||||
if (!joinleavelog) report += "**[JOINLEAVE]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("channel")) {
|
||||
if (remove) eventChannels.channel = undefined; else {
|
||||
channellog = getChannelProchedure(this.client, msg, args.slice("channels".length).trim())?.id;
|
||||
if (!channellog) report += "**[CHANNEL]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("banunban")) {
|
||||
if (remove) {
|
||||
eventChannels.banUnban = undefined;
|
||||
} else {
|
||||
banunbanlog = getChannelProchedure(this.client, msg, args.slice("banunbanS".length).trim())?.id;
|
||||
if (!banunbanlog) {
|
||||
report += "**[BANUNBAN]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("message")) {
|
||||
if (remove) {
|
||||
eventChannels.message = {
|
||||
channel: undefined,
|
||||
ignore: []
|
||||
}
|
||||
} else {
|
||||
const mesArgs = args.slice("message").trim().split(/(?<!\\)-(?!-)/);
|
||||
if (mesArgs.length > 0 && /(?<!\\)-ignore/i.test(lowArg)) {
|
||||
setMessageIgnore = true;
|
||||
for (const mesArg of mesArgs) {
|
||||
if (mesArg.toLowerCase().startsWith("ignore")) {
|
||||
const ignoreArgs = mesArg.slice("ignores".length).trim().split(/(?<!\\),+(?!\d*})/);
|
||||
if (ignoreArgs.length > 0) {
|
||||
for (const ign of ignoreArgs) {
|
||||
if (ign.length === 0) {
|
||||
continue;
|
||||
}
|
||||
const chan = getChannelProchedure(this.client, msg, ign);
|
||||
if (chan) {
|
||||
if (messagelog.ignore.includes(chan.id)) {
|
||||
report += "**[MESSAGE_CHANNELIGNORE]** Duplicate result: <#" + chan.id +
|
||||
`> with keyword: **${ign.trim()}**\n`;
|
||||
} else {
|
||||
messagelog.ignore.push(chan.id);
|
||||
}
|
||||
} else {
|
||||
report += "**[MESSAGE_CHANNELIGNORE]** Unknown channel: **" + ign.trim() + "**\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
messagelog.channel = getChannelProchedure(this.client, msg, args.slice("messages".length).replace(/(?<!\\)-ignore.*/i, "").trim())?.id;
|
||||
if (!messagelog.channel) {
|
||||
report += "**[MESSAGE]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("invite")) {
|
||||
if (remove) {
|
||||
eventChannels.invite = undefined;
|
||||
} else {
|
||||
invitelog = getChannelProchedure(this.client, msg, args.slice("invites".length).trim())?.id;
|
||||
if (!invitelog) {
|
||||
report += "**[INVITE]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("role")) {
|
||||
if (remove) {
|
||||
eventChannels.role = undefined;
|
||||
} else {
|
||||
rolelog = getChannelProchedure(this.client, msg, args.slice("roles".length).trim())?.id;
|
||||
if (!rolelog) {
|
||||
report += "**[ROLE]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("guild")) {
|
||||
if (remove) {
|
||||
eventChannels.guild = undefined;
|
||||
} else {
|
||||
guildlog = getChannelProchedure(this.client, msg, args.slice("guilds".length).trim())?.id;
|
||||
if (!guildlog) {
|
||||
report += "**[GUILD]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("member")) {
|
||||
if (remove) {
|
||||
eventChannels.member = undefined;
|
||||
} else {
|
||||
membernicklog = getChannelProchedure(this.client, msg, args.slice("members".length).trim())?.id;
|
||||
if (!membernicklog) {
|
||||
report += "**[MEMBER]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("emoji")) {
|
||||
if (remove) {
|
||||
eventChannels.emote = undefined;
|
||||
} else {
|
||||
emotelog = getChannelProchedure(this.client, msg, args.slice("emojis".length).trim())?.id;
|
||||
if (!emotelog) {
|
||||
report += "**[EMOJI]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lowArg.startsWith("memberrole")) {
|
||||
if (remove) {
|
||||
eventChannels.memberRole = undefined;
|
||||
} else {
|
||||
memberroleslog = getChannelProchedure(this.client, msg, args.slice("memberroles".length).trim())?.id;
|
||||
if (!memberroleslog) {
|
||||
report += "**[MEMBERROLE]** Unknown channel.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
async function resultEmbed(the) {
|
||||
const emb = await defaultImageEmbed(msg, null, "Event Log Channels Configuration");
|
||||
emb
|
||||
.setDescription(`Set configuration using \`\`\`js\n${msg.guild.commandPrefix + the.name} [--remove] --<Category> <Channel_[Mention | Name | ID]>\`\`\`**Categories:** \`\`\`js\n[MESSAGE [-ignore <Channel_[Mention | Name | ID]>], JOINLEAVE, MEMBER, MEMBERROLE, BANUNBAN, GUILD, ROLE, CHANNEL, EMOJI, INVITE]\`\`\``)
|
||||
.addField(`Message Edit and Delete`, eventChannels?.message?.channel ? `<#${eventChannels?.message.channel}>\n**Ignores:** ${eventChannels?.message?.ignore?.length > 0 ?
|
||||
"<#" + eventChannels?.message.ignore.join(">, <#") + ">" : "None"}`
|
||||
: "Not set", true)
|
||||
.addField(`Member Join and Leave`, eventChannels?.joinLeave ? `<#${eventChannels?.joinLeave}>` : "Not set", true)
|
||||
.addField(`Member Profile Updates`, eventChannels?.member ? `<#${eventChannels?.member}>` : "Not set", true)
|
||||
.addField(`Member Role Updates`, eventChannels?.memberRole ? `<#${eventChannels?.memberRole}>` : "Not set", true)
|
||||
.addField(`Member Ban and Unban`, eventChannels?.banUnban ? `<#${eventChannels?.banUnban}>` : "Not set", true)
|
||||
.addField(`Server Updates`, eventChannels?.guild ? `<#${eventChannels?.guild}>` : "Not set", true)
|
||||
.addField(`Server Role Updates`, eventChannels?.role ? `<#${eventChannels?.role}>` : "Not set", true)
|
||||
.addField(`Server Channels Updates`, eventChannels?.channel ? `<#${eventChannels?.channel}>` : "Not set", true)
|
||||
.addField(`Server Emoji Updates`, eventChannels?.emote ? `<#${eventChannels?.emote}>` : "Not set", true)
|
||||
.addField(`Server Invites`, eventChannels?.invite ? `<#${eventChannels?.invite}>` : "Not set", true);
|
||||
return emb;
|
||||
}
|
||||
eventChannels = {
|
||||
joinLeave: joinleavelog ?? eventChannels?.joinLeave,
|
||||
channel: channellog ?? eventChannels?.channel,
|
||||
banUnban: banunbanlog ?? eventChannels?.banUnban,
|
||||
message: {
|
||||
channel: messagelog.channel ?? eventChannels?.message?.channel,
|
||||
ignore: setMessageIgnore ? messagelog.ignore : eventChannels?.message?.ignore
|
||||
},
|
||||
invite: invitelog ?? eventChannels?.invite,
|
||||
role: rolelog ?? eventChannels?.role,
|
||||
guild: guildlog ?? eventChannels?.guild,
|
||||
member: membernicklog ?? eventChannels?.member,
|
||||
emote: emotelog ?? eventChannels?.emote,
|
||||
memberRole: memberroleslog ?? eventChannels?.memberRole
|
||||
}
|
||||
await msg.guild.setEventChannels(eventChannels);
|
||||
if (msg.guild.eventChannels === eventChannels) {
|
||||
report += "Event Log Channels set!\n";
|
||||
}
|
||||
report += "\n**SUMMARY:**";
|
||||
if (report.length > 0) {
|
||||
return trySend(this.client, msg, (await resultEmbed(this)).setDescription(report.slice(0, 2048)));
|
||||
}
|
||||
}
|
||||
};
|
||||
18
cmds/owner/update.js
Normal file
18
cmds/owner/update.js
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
'use strict';
|
||||
|
||||
const commando = require("@iceprod/discord.js-commando");
|
||||
|
||||
module.exports = class update extends commando.Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: "update",
|
||||
memberName: "update",
|
||||
group: "owner",
|
||||
description: "Update Shasha.",
|
||||
ownerOnly: true
|
||||
});
|
||||
}
|
||||
run(msg) {
|
||||
|
||||
}
|
||||
};
|
||||
|
|
@ -13,9 +13,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
aliases: ["embedmaker","createmb","creatembed"],
|
||||
group: "utility",
|
||||
description: "Embed creator.",
|
||||
details:`Embed creator: You can just copy this template and remove unneeded argument. Every argument is optional.\`\`\`\n--title [text]\n--description [text]\n--author:\n -name [text]\n -icon [url]\n -url [url]\n--color [hex, number, name of color]\n--image [url]\n--thumbnail [url]\n--url [url]\n--newfield:\n -name [text]\n -desc [text]\n -inline (true if provided)\n--footer:\n -text [text]\n -icon [url]\n--content [text]\n--channel [channel_[mention, ID]]\n--timestamp [ISO 8601, UNIX Timestamp (Milliseconds)] - Use https://time.lol \n--attachments [url] - You can put [-copy] when editing to copy all the message attachments (Cannot remove existing attachment unless [--channel] provided) \`\`\`Embed editor: You can put \`\`\`--edit <[message_ID, channel_[mention, ID] message_ID]>\`\`\` as first argument to edit the embed in a message. All existing property will be replaced with provided argument. Put \`\`\`--remove [author, fields, footer]\`\`\` to remove all existing property of the provided argument in the embed.\n\nOther arguments:\`\`\`\n--quote <[message_ID, channel_[mention, ID] message_ID]> - Quote a message\`\`\``,
|
||||
ownerOnly:false,
|
||||
hidden:false
|
||||
details:`Embed creator: You can just copy this template and remove unneeded argument. Every argument is optional.\`\`\`\n--title [text]\n--description [text]\n--author:\n -name [text]\n -icon [url]\n -url [url]\n--color [hex, number, name of color]\n--image [url]\n--thumbnail [url]\n--url [url]\n--newfield:\n -name [text]\n -desc [text]\n -inline (true if provided)\n--footer:\n -text [text]\n -icon [url]\n--content [text]\n--channel [channel_[mention, ID]]\n--timestamp [ISO 8601, UNIX Timestamp (Milliseconds)] - Use https://time.lol \n--attachments [url] - You can put [-copy] when editing to copy all the message attachments (Cannot remove existing attachment unless [--channel] provided) \`\`\`Embed editor: You can put \`\`\`--edit <[message_ID, channel_[mention, ID] message_ID]>\`\`\` as first argument to edit the embed in a message. All existing property will be replaced with provided argument. Put \`\`\`--remove [author, fields, footer]\`\`\` to remove all existing property of the provided argument in the embed.\n\nOther arguments:\`\`\`\n--quote <[message_ID, channel_[mention, ID] message_ID]> - Quote a message\`\`\``
|
||||
});
|
||||
}
|
||||
/**
|
||||
|
|
@ -25,6 +23,9 @@ module.exports = class embmaker extends commando.Command {
|
|||
* @returns
|
||||
*/
|
||||
async run(msg, arg) {
|
||||
if (msg.guild && !this.client.owners.includes(msg.author) && !msg.member.hasPermission("EMBED_LINKS")) {
|
||||
return trySend(this.client, msg, "LMFAO no");
|
||||
}
|
||||
const args = arg.trim().split(/(?<!\\)(\-\-)+/);
|
||||
let embed = new MessageEmbed();
|
||||
let autName, footertext, autIcon, autUrl, footericon, content, channel, editSrc, newAttach = [], reportMessage = "";
|
||||
|
|
@ -32,8 +33,13 @@ module.exports = class embmaker extends commando.Command {
|
|||
for(const value of args) {
|
||||
if (value.toLowerCase().startsWith("json")) {
|
||||
embed = new MessageEmbed(JSON.parse(value.slice("json".length).trim()));
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('edit')) {
|
||||
if (msg.guild && !msg.member.hasPermission("MANAGE_MESSAGES")) {
|
||||
reportMessage += "**[EDIT]** Require Manage Messages.\n";
|
||||
continue;
|
||||
}
|
||||
const editArg = value.slice('edit'.length).trim().split(/ +/);
|
||||
if (editArg[0].length > 0) {
|
||||
editSrc = await getChannelMessage(this.client, msg, editArg[0], editArg[1]);
|
||||
|
|
@ -72,6 +78,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
} else {
|
||||
reportMessage += "**[EDIT]** No argument provided.\n";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('quote')) {
|
||||
const quoteargs = value.slice('quote'.length).toLowerCase().trim().split(/ +/);
|
||||
|
|
@ -104,6 +111,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
} else {
|
||||
reportMessage += "**[QUOTE]** No argument provided.\n";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('remove')) {
|
||||
const remove = value.slice('remove'.length).toLowerCase().trim().split(/ +/);
|
||||
|
|
@ -123,21 +131,26 @@ module.exports = class embmaker extends commando.Command {
|
|||
embed.footer = null;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('title')) {
|
||||
embed.setTitle(value.slice('title'.length).trim().replace(/\\(?!\\)/g,''));
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('desc')) {
|
||||
embed.setDescription(value.slice('desc'.length).trim().replace(/\\(?!\\)/g,''));
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('description')) {
|
||||
embed.setDescription(value.slice('description'.length).trim().replace(/\\(?!\\)/g,''));
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith("author")) {
|
||||
const autData = value.trim().split(/( \-)+/);
|
||||
for(const autVal of autData) {
|
||||
if (autVal.toLowerCase().startsWith('name')) {
|
||||
autName = autVal.slice('name'.length).trim().replace(/\\(?!\\)/g,'');
|
||||
continue;
|
||||
}
|
||||
if (autVal.toLowerCase().startsWith('icon')) {
|
||||
if (/^https?:\/\/\w+\.\w\w/.test(autVal.slice('icon'.length).trim())) {
|
||||
|
|
@ -146,6 +159,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
reportMessage += "**[AUTHOR]** Invalid icon URL.\n";
|
||||
autIcon = null;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (autVal.toLowerCase().startsWith('url')) {
|
||||
if (/^https?:\/\/\w+\.\w\w/.test(autVal.slice('url'.length).trim())) {
|
||||
|
|
@ -154,8 +168,10 @@ module.exports = class embmaker extends commando.Command {
|
|||
reportMessage += "**[AUTHOR]** Invalid URL.\n";
|
||||
autUrl = null;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith("color")) {
|
||||
const colorName = value.slice("color".length).trim();
|
||||
|
|
@ -163,6 +179,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
if (color) {
|
||||
embed.setColor(color);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith("image")) {
|
||||
if (/^https?:\/\/\w+\.\w\w/.test(value.slice("image".length).trim())) {
|
||||
|
|
@ -171,6 +188,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
reportMessage += "**[IMAGE]** Invalid URL.\n";
|
||||
embed.setImage(null);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith("thumbnail")) {
|
||||
if (/^https?:\/\/\w+\.\w\w/.test(value.slice("thumbnail".length).trim())) {
|
||||
|
|
@ -179,6 +197,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
reportMessage += "**[THUMBNAIL]** Invalid URL.\n";
|
||||
embed.setThumbnail(null);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('url')) {
|
||||
if (/^https?:\/\/\w+\.\w\w/.test(value.slice("url".length).trim())) {
|
||||
|
|
@ -187,6 +206,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
reportMessage += "**[URL]** Invalid URL.\n";
|
||||
embed.setURL(null);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('attachment')) {
|
||||
const attach = value.slice("attachments".length).trim().split(/ +/);
|
||||
|
|
@ -210,6 +230,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith("timestamp")) {
|
||||
if(!/\D/.test(value.slice("timestamp".length).trim())) {
|
||||
|
|
@ -224,6 +245,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
if (!embed.timestamp) {
|
||||
reportMessage += "**[TIMESTAMP]** Invalid format.\n";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('footer')) {
|
||||
const footerData = value.trim().split(/( \-)+/);
|
||||
|
|
@ -240,6 +262,7 @@ module.exports = class embmaker extends commando.Command {
|
|||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('newfield')) {
|
||||
const fieldData = value.trim().split(/( \-)+/);
|
||||
|
|
@ -265,9 +288,11 @@ module.exports = class embmaker extends commando.Command {
|
|||
fieldValue = '';
|
||||
}
|
||||
embed.addField(fieldName,fieldValue,inline);
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('content')) {
|
||||
content = value.slice('content'.length).trim().replace(/\\(?!\\)/g,'');
|
||||
continue;
|
||||
}
|
||||
if (value.toLowerCase().startsWith('channel')) {
|
||||
let ID = cleanMentionID(value.slice('channel'.length).trim());
|
||||
|
|
@ -279,13 +304,21 @@ module.exports = class embmaker extends commando.Command {
|
|||
if (!channel && this.client.owners.includes(msg.author.id)) {
|
||||
channel = this.client.channels.cache.get(ID);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
if (!channel) {
|
||||
channel = findChannelRegEx(msg, ID, ["category", "voice"])[0];
|
||||
}
|
||||
if (!channel) {
|
||||
reportMessage += "**[CHANNEL]** Unknown channel.\n";
|
||||
} else {
|
||||
const p = msg.guild?.channels.cache.get(channel)?.permissionsFor(msg.author);
|
||||
if (!p || p.missing("SEND_MESSAGES") || p.missing("EMBED_LINKS") || p.missing("VIEW_CHANNEL")) {
|
||||
channel = undefined;
|
||||
reportMessage += "**[CHANNEL]** Missing permission.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(autIcon === false) {
|
||||
|
|
@ -315,18 +348,29 @@ module.exports = class embmaker extends commando.Command {
|
|||
if (embed.description === '' && (content || newAttach.length > 0)) {
|
||||
embed = null;
|
||||
}
|
||||
if (newAttach.length > 0) {
|
||||
reportMessage += "**[ATTACHMENT]** Uploading attachments....\n";
|
||||
}
|
||||
let sent = [];
|
||||
if (reportMessage.length > 0) {
|
||||
sent.push(trySend(this.client, msg, reportMessage));
|
||||
}
|
||||
if (editSrc) {
|
||||
if (channel) {
|
||||
if (msg.guild?.channels.cache.get(channel)?.permissionsFor(msg.author).has("ATTACH_FILES") && newAttach.length > 0) {
|
||||
reportMessage += "**[ATTACHMENT]** Uploading attachments....\n";
|
||||
} else {
|
||||
if (newAttach.length > 0) {
|
||||
newAttach = [];
|
||||
reportMessage += "**[ATTACHMENT]** Missing permission.\n";
|
||||
}
|
||||
}
|
||||
sent.push(channel.send({content:content,embed:embed,files:newAttach}).catch(e => noPerm(msg)));
|
||||
} else {
|
||||
channel = msg.channel;
|
||||
if (msg.guild && channel.permissionsFor(msg.author).missing("ATTACH_FILES")) {
|
||||
if (newAttach.length > 0) {
|
||||
newAttach = [];
|
||||
reportMessage += "**[ATTACHMENT]** Missing permission.\n";
|
||||
}
|
||||
}
|
||||
if (editSrc.author === this.client.user) {
|
||||
sent.push(editSrc.edit({content:content,embed:embed,files:newAttach}).catch(e => {
|
||||
errLog(e, msg, this.client);
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
const commando = require("@iceprod/discord.js-commando"),
|
||||
{ fixChat } = require("../../resources/shaChat");
|
||||
const { trySend } = require("../../resources/functions");
|
||||
|
||||
module.exports = class fixchat extends commando.Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: "fixchat",
|
||||
memberName: "fixchat",
|
||||
group: "utility",
|
||||
description: "Fix broken chat."
|
||||
});
|
||||
}
|
||||
async run(msg) {
|
||||
//const r = await fixChat();
|
||||
if (r === 3) {
|
||||
return trySend(this.client, msg, "Fixed!");
|
||||
} else {
|
||||
return trySend(this.client, msg, "Oopsie somethin's wrong...");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -15,7 +15,6 @@ module.exports = class send extends commando.Command {
|
|||
}
|
||||
async run(msg, args ) {
|
||||
const comarg = args.trim().split(/ +/);
|
||||
let at = comarg[0];
|
||||
if (!comarg[0]) {
|
||||
return trySend(this.client, msg, 'Where?!?');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"@iceprod/discord.js-commando": "^0.14.3",
|
||||
"axios": "^0.21.1",
|
||||
"bree": "^6.2.0",
|
||||
"bufferutil": "^4.0.3",
|
||||
"cabin": "^9.0.4",
|
||||
"cleverbot-node": "^0.3.11",
|
||||
"discord.js": "^12.5.2",
|
||||
"discord.js-commando": "^0.12.3",
|
||||
"erlpack": "github:discord/erlpack",
|
||||
|
|
@ -12,8 +12,6 @@
|
|||
"lodash": "^4.17.21",
|
||||
"mongodb": "^3.6.6",
|
||||
"node": "^15.12.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"puppeteer": "^9.0.0",
|
||||
"sqlite": "^4.0.21",
|
||||
"sqlite3": "^5.0.2",
|
||||
"utf-8-validate": "^5.0.4",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
const { MessageEmbed, Message, GuildMember, User, Client, GuildChannel, Role, MessageOptions, Channel } = require('discord.js');
|
||||
const { MessageEmbed, Message, GuildMember, User, Client, GuildChannel, Role, MessageOptions, TextChannel, DMChannel } = require('discord.js');
|
||||
const { defaultErrorLogChannel, ranLogger } = require("../config.json");
|
||||
const { database } = require("../database/mongo");
|
||||
const { timestampAt } = require('./debug');
|
||||
|
|
@ -172,26 +172,25 @@ function noPerm(msg) {
|
|||
|
||||
/**
|
||||
* Send message
|
||||
* @param {Client} client - (this.client)
|
||||
* @param {Message | String | Channel} msg Message object | channel_ID
|
||||
* @param {CommandoClient} client - (this.client)
|
||||
* @param {Message | String | TextChannel | DMChannel} msg Message object | channel_ID
|
||||
* @param {MessageOptions} content - ({content:content,optionblabla})
|
||||
* @param {Boolean} adCheck - Check source for Discord invite link (true)
|
||||
* @returns {Promise<Message>} Sent message object
|
||||
*/
|
||||
async function trySend(client, msg, content, adCheck = true) {
|
||||
function trySend(client, msg, content, adCheck = true) {
|
||||
if (!client || !msg) {
|
||||
return;
|
||||
}
|
||||
let msgOf;
|
||||
if (msg?.channel) {
|
||||
msgOf = msg.channel;
|
||||
} else {
|
||||
if (typeof msg === "string") {
|
||||
msgOf = client.channels.cache.get(msg);
|
||||
} else {
|
||||
msgOf = msg;
|
||||
if (client.owners.includes(msg.author)) {
|
||||
adCheck = false;
|
||||
if (content.disableMentions) {
|
||||
content.disableMentions = "none";
|
||||
}
|
||||
}
|
||||
if (typeof msg === "string") {
|
||||
msg = client.channels.cache.get(msg);
|
||||
}
|
||||
if (adCheck) {
|
||||
if (content.content) {
|
||||
content.content = sentAdCheck(content.content);
|
||||
|
|
@ -201,15 +200,15 @@ async function trySend(client, msg, content, adCheck = true) {
|
|||
}
|
||||
}
|
||||
}
|
||||
const sentMes = await msgOf.send(content)
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
if (msg?.channel) {
|
||||
noPerm(msg);
|
||||
if (msg instanceof Message) {
|
||||
return msg.channel.send(content).catch(() => {});
|
||||
} else {
|
||||
if (msg instanceof TextChannel || msg instanceof DMChannel) {
|
||||
return msg.send(content).catch(() => {});
|
||||
} else {
|
||||
console.error("[TRYSEND] Unknown {msg} type.", msg);
|
||||
}
|
||||
return
|
||||
});
|
||||
return sentMes;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -403,6 +402,34 @@ function multipleChannelsFound(client, msg, arr, key, max = 4, withID) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Standard
|
||||
* @param {Client} client this.client
|
||||
* @param {Message} msg - Message object
|
||||
* @param {String} key - Channel ID | Mention | Name
|
||||
* @returns
|
||||
*/
|
||||
function getChannelProchedure(client, msg, key) {
|
||||
if (key.length === 0) {
|
||||
return;
|
||||
}
|
||||
const search = cleanMentionID(key);
|
||||
if (search.length === 0) {
|
||||
return;
|
||||
}
|
||||
let channel;
|
||||
if (/^\d{17,19}$/.test(search)) {
|
||||
channel = msg.guild.channels.cache.get(search);
|
||||
if (!channel && client.owners.includes(msg.author)) {
|
||||
channel = client.channels.cache.get(search);
|
||||
}
|
||||
}
|
||||
if (!channel) {
|
||||
channel = findChannelRegEx(msg, search, ["category", "voice"])[0];
|
||||
}
|
||||
return channel;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
cleanMentionID,
|
||||
multipleMembersFound, multipleRolesFound, multipleChannelsFound,
|
||||
|
|
@ -410,5 +437,5 @@ module.exports = {
|
|||
getChannelMessage, errLog,
|
||||
execCB, ranLog, noPerm,
|
||||
trySend, tryDelete, tryReact,
|
||||
sentAdCheck, defaultImageEmbed
|
||||
sentAdCheck, defaultImageEmbed, getChannelProchedure
|
||||
}
|
||||
|
|
@ -1,12 +1,13 @@
|
|||
'use strict';
|
||||
|
||||
const puppeteer = require('puppeteer');
|
||||
const { trySend, noPerm } = require('./functions');
|
||||
//const puppeteer = require('puppeteer');
|
||||
const axios = require("axios").default;
|
||||
const { errLog } = require('./functions');
|
||||
const Commando = require("@iceprod/discord.js-commando");
|
||||
require("discord.js");
|
||||
//require("discord.js");
|
||||
|
||||
//'4, 15, 10, 11, 14, 17, 18'
|
||||
|
||||
/*
|
||||
const URL = [
|
||||
'https://rebot.me/simsimi', 'https://rebot.me/ryuko-matoi',//1
|
||||
'https://rebot.me/xmonikax', 'https://rebot.me/futa-nun',//3
|
||||
|
|
@ -20,7 +21,7 @@ const URL = [
|
|||
'https://rebot.me/zacharie-1', 'https://rebot.me/natsuki-41',//19
|
||||
'https://rebot.me/lea-7062078', 'https://rebot.me/bunny-exe',//21
|
||||
'https://rebot.me/just-monika-56'
|
||||
];
|
||||
];/*
|
||||
const browser = puppeteer.launch();
|
||||
const page1 = browser.then(r => r.newPage());
|
||||
page1.then(r => r.goto(URL[1]).catch(console.error));
|
||||
|
|
@ -31,7 +32,7 @@ page1.then(r => r.goto(URL[1]).catch(console.error));
|
|||
* @param {Number} index - Index of answer
|
||||
* @param {Commando.Message} question - Message object
|
||||
* @returns {Promise<String | Boolean>} Reply
|
||||
*/
|
||||
*
|
||||
async function shaChat(client, index, question) {
|
||||
if (page1) {
|
||||
let query = question.content.trim();
|
||||
|
|
@ -55,7 +56,7 @@ async function shaChat(client, index, question) {
|
|||
* @param {puppeteer.Page} page
|
||||
* @param {Number} index
|
||||
* @returns {String}
|
||||
*/
|
||||
*
|
||||
async function fetchAnswer(page, index) {
|
||||
try {
|
||||
await page.waitForSelector(`#answer > div:nth-child(${index})`).catch(() => {});
|
||||
|
|
@ -70,13 +71,15 @@ async function fetchAnswer(page, index) {
|
|||
}
|
||||
|
||||
let chatIndex = 3;
|
||||
|
||||
*/
|
||||
/**
|
||||
* @param {Commando.Client} client
|
||||
* @param {Commando.CommandoMessage} message
|
||||
* @returns
|
||||
* @param {String} message - Query
|
||||
* @returns {Promise<String>} Answers
|
||||
*/
|
||||
async function chatAnswer(client, message) {
|
||||
async function chatAnswer(message) {
|
||||
const r = await axios.post("https://rebot.me/ask", { username: "muffin-6", question: message }).catch(() => {});
|
||||
return r.data;
|
||||
} /* {
|
||||
//console.log(message.content);
|
||||
//console.log(chatIndex);
|
||||
if (message.content.trim().length === 0) {
|
||||
|
|
@ -106,10 +109,10 @@ let chatIndex = 3;
|
|||
message.channel.stopTyping();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function fixChat() {
|
||||
return page1.then(r => r.reload()).then(() => {return chatIndex = 3}).catch(e => {return console.log(e)});
|
||||
}
|
||||
} */
|
||||
|
||||
module.exports = { chatAnswer, fixChat }
|
||||
module.exports = { chatAnswer }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
const { Structures } = require("discord.js"),
|
||||
{ database } = require("../database/mongo");
|
||||
const { errLog } = require("./functions");
|
||||
{ database } = require("../database/mongo"),
|
||||
{ errLog } = require("./functions");
|
||||
|
||||
Structures.extend("Guild", g => {
|
||||
return class Guild extends g {
|
||||
|
|
@ -16,6 +16,9 @@ Structures.extend("Guild", g => {
|
|||
this.infractions = r?.moderation?.infractions;
|
||||
this.moderation = r?.moderation?.settings;
|
||||
this.defaultEmbed = r?.settings?.defaultEmbed;
|
||||
|
||||
this.eventChannels = r?.settings?.eventChannels;
|
||||
|
||||
return this.dbLoaded = true;
|
||||
});
|
||||
return ret;
|
||||
|
|
@ -42,6 +45,8 @@ Structures.extend("Guild", g => {
|
|||
if (found.length > 0) {
|
||||
return found;
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} catch (e) { }
|
||||
}
|
||||
|
|
@ -49,16 +54,22 @@ Structures.extend("Guild", g => {
|
|||
try {
|
||||
const r = await database.collection("Guild").findOne({ document: this.id });
|
||||
this.infractions = r?.moderation?.infractions;
|
||||
const ret = database.collection("Guild").updateOne({document: this.id}, {$push:{"moderation.infractions":add}}, (e, r) => {
|
||||
const ret = database.collection("Guild").updateOne({document: this.id}, {$push:{"moderation.infractions":add}}, (e) => {
|
||||
if (e) return errLog(e, null, this.client);
|
||||
if (r) {
|
||||
this.infractions.push(add);
|
||||
return true;
|
||||
};
|
||||
this.infractions.push(add);
|
||||
return true;
|
||||
});
|
||||
return ret;
|
||||
} catch (e) { }
|
||||
}
|
||||
setEventChannels(set) {
|
||||
const ret = database.collection("Guild").updateOne({document: this.id}, {$set: {"settings.eventChannels": set}}, {upsert: true}, (e) => {
|
||||
if (e) return errLog(e, null, this.client);
|
||||
this.eventChannels = set;
|
||||
return true;
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
setDefaultEmbed(set) {
|
||||
const ret = database.collection("Guild").updateOne({document: this.id}, {$set:{"settings.defaultEmbed": set}}, {upsert: true}, (e) => {
|
||||
if (e) return errLog(e, null, this.client);
|
||||
|
|
@ -83,6 +94,7 @@ Structures.extend("User", u => {
|
|||
constructor(client, data) {
|
||||
super(client, data);
|
||||
this.dbLoaded = false;
|
||||
this.giveHeart = "yes";
|
||||
}
|
||||
async dbLoad() {
|
||||
const ret = await database.collection("User").findOne({document: this.id}).then((r, j) => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue