BetterDiscordAddons/Plugins/SendLargeMessages/SendLargeMessages.plugin.js

285 lines
11 KiB
JavaScript
Raw Normal View History

2019-09-20 22:32:52 +02:00
//META{"name":"SendLargeMessages","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/SendLargeMessages","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/SendLargeMessages/SendLargeMessages.plugin.js"}*//
2018-10-11 10:21:26 +02:00
class SendLargeMessages {
2019-01-17 23:48:29 +01:00
getName () {return "SendLargeMessages";}
2019-12-21 11:25:13 +01:00
getVersion () {return "1.5.9";}
2019-01-17 23:48:29 +01:00
getAuthor () {return "DevilBro";}
getDescription () {return "Opens a popout when your message is too large, which allows you to automatically send the message in several smaller messages.";}
2019-01-26 22:45:19 +01:00
2019-09-04 12:34:02 +02:00
constructor () {
2019-02-28 20:09:44 +01:00
this.changelog = {
2019-12-18 11:49:24 +01:00
"fixed":[["Switching","Plugin acting weird after switching channels"],["New WYSIWYG Textarea","Fixed for the new WYSIWYG Textarea that is hidden by experiments"]],
2019-12-17 14:51:58 +01:00
"improved":[["Sending Messages","The plugin no longer needs the modal to send multiple messages, you can just write larger messages in the channel textarea and it will automatically split it up before sending it"]]
2019-02-28 20:09:44 +01:00
};
2019-09-04 12:34:02 +02:00
2019-11-14 17:56:26 +01:00
this.patchedModules = {
2019-12-17 14:51:58 +01:00
before: {
2019-12-21 11:25:13 +01:00
ChannelTextAreaForm: "render",
ChannelEditorContainer: "render"
2019-11-14 17:56:26 +01:00
}
};
2019-09-04 12:34:02 +02:00
}
2019-01-26 22:45:19 +01:00
2019-09-04 12:34:02 +02:00
initConstructor () {
2018-10-11 10:21:26 +02:00
this.messageDelay = 1000; //changing at own risk, might result in bans or mutes
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.css = `
2019-01-24 13:37:08 +01:00
.${this.name}-modal textarea {
2019-11-11 11:11:33 +01:00
height: 50vh;
2018-10-11 10:21:26 +02:00
}`;
}
//legacy
load () {}
start () {
2019-02-04 09:13:15 +01:00
if (!global.BDFDB) global.BDFDB = {myPlugins:{}};
if (global.BDFDB && global.BDFDB.myPlugins && typeof global.BDFDB.myPlugins == "object") global.BDFDB.myPlugins[this.getName()] = this;
2019-05-26 13:55:26 +02:00
var libraryScript = document.querySelector('head script#BDFDBLibraryScript');
if (!libraryScript || (performance.now() - libraryScript.getAttribute("date")) > 600000) {
2018-10-11 10:21:26 +02:00
if (libraryScript) libraryScript.remove();
libraryScript = document.createElement("script");
2019-05-26 13:55:26 +02:00
libraryScript.setAttribute("id", "BDFDBLibraryScript");
2018-10-11 10:21:26 +02:00
libraryScript.setAttribute("type", "text/javascript");
2019-10-18 10:56:41 +02:00
libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.min.js");
2019-01-17 23:48:29 +01:00
libraryScript.setAttribute("date", performance.now());
2019-05-26 13:55:26 +02:00
libraryScript.addEventListener("load", () => {this.initialize();});
2018-10-11 10:21:26 +02:00
document.head.appendChild(libraryScript);
2019-05-26 13:55:26 +02:00
}
else if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) this.initialize();
2019-11-01 10:27:07 +01:00
this.startTimeout = setTimeout(() => {
try {return this.initialize();}
catch (err) {console.error(`%c[${this.getName()}]%c`, "color: #3a71c1; font-weight: 700;", "", "Fatal Error: Could not initiate plugin! " + err);}
}, 30000);
2018-10-11 10:21:26 +02:00
}
initialize () {
2019-01-17 23:48:29 +01:00
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
2019-01-22 11:05:54 +01:00
if (this.started) return;
2019-10-22 18:55:25 +02:00
BDFDB.PluginUtils.init(this);
2019-11-11 11:11:33 +01:00
2019-10-22 18:55:25 +02:00
BDFDB.ModuleUtils.forceAllUpdates(this);
2018-10-11 10:21:26 +02:00
}
2019-11-01 10:14:50 +01:00
else console.error(`%c[${this.getName()}]%c`, "color: #3a71c1; font-weight: 700;", "", "Fatal Error: Could not load BD functions!");
2018-10-11 10:21:26 +02:00
}
stop () {
2019-01-26 22:45:19 +01:00
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
2019-10-22 11:37:23 +02:00
this.stopping = true;
2019-11-11 11:11:33 +01:00
BDFDB.ModuleUtils.forceAllUpdates(this);
2019-10-22 18:55:25 +02:00
BDFDB.PluginUtils.clear(this);
2018-10-11 10:21:26 +02:00
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
// begin of own functions
2019-12-21 11:25:13 +01:00
processChannelTextAreaForm (e) {
if (!BDFDB.ModuleUtils.isPatched(this, e.instance, "handleSendMessage")) BDFDB.ModuleUtils.patch(this, e.instance, "handleSendMessage", {instead: e2 => {
let parsedLength = BDFDB.StringUtils.getParsedLength(e2.methodArguments[0]);
if (parsedLength > 2000) {
e2.stopOriginalMethodCall();
let messages = this.formatText(e2.methodArguments[0], Math.sqrt(Math.pow(parsedLength - e2.methodArguments[0].length, 2)) > Math.max(parsedLength, e2.methodArguments[0].length) / 20);
messages.filter(n => n).forEach((message, i) => {
BDFDB.TimeUtils.timeout(_ => {
e2.originalMethod(message);
if (i >= messages.length-1) BDFDB.NotificationUtils.toast(this.labels.toast_allsent_text, {type:"success"});
}, this.messageDelay * i);
});
return Promise.resolve({
shouldClear: true,
shouldRefocus: true
});
}
else return e2.callOriginalMethodAfterwards();
}}, true);
}
processChannelEditorContainer (e) {
if (e.instance.props.type && e.instance.props.type == BDFDB.DiscordConstants.TextareaTypes.NORMAL) e.instance.props.shouldUploadLongMessages = false;
2018-10-11 10:21:26 +02:00
}
2019-01-26 22:45:19 +01:00
2019-12-17 14:51:58 +01:00
formatText (text, parse) {
2019-06-20 10:07:17 +02:00
text = text.replace(/\t/g, " ");
let longwords = text.match(/[\S]{1800,}/gm);
2019-12-17 14:51:58 +01:00
if (longwords) for (let longword of longwords) {
2018-10-11 10:21:26 +02:00
let count1 = 0;
let shortwords = [];
2019-12-17 14:51:58 +01:00
longword.split("").forEach(c => {
if (shortwords[count1] && shortwords[count1].length >= 1800) count1++;
shortwords[count1] = shortwords[count1] ? shortwords[count1] + c : c;
2018-10-11 10:21:26 +02:00
});
text = text.replace(longword, shortwords.join(" "));
}
let messages = [];
let count2 = 0;
2018-10-11 10:21:26 +02:00
text.split(" ").forEach((word) => {
2019-12-17 14:51:58 +01:00
if (messages[count2] && (parse ? BDFDB.StringUtils.getParsedLength(messages[count2] + "" + word) : (messages[count2] + "" + word).length) > 1900) count2++;
2018-10-11 10:21:26 +02:00
messages[count2] = messages[count2] ? messages[count2] + " " + word : word;
});
2019-01-26 22:45:19 +01:00
let insertCodeBlock = null, insertCodeLine = null;
for (let j = 0; j < messages.length; j++) {
2018-10-11 10:21:26 +02:00
if (insertCodeBlock) {
messages[j] = insertCodeBlock + messages[j];
insertCodeBlock = null;
}
else if (insertCodeLine) {
messages[j] = insertCodeLine + messages[j];
insertCodeLine = null;
}
2019-01-26 22:45:19 +01:00
let codeBlocks = messages[j].match(/`{3,}[\S]*\n|`{3,}/gm);
let codeLines = messages[j].match(/[^`]{0,1}`{1,2}[^`]|[^`]`{1,2}[^`]{0,1}/gm);
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
if (codeBlocks && codeBlocks.length % 2 == 1) {
messages[j] = messages[j] + "```";
insertCodeBlock = codeBlocks[codeBlocks.length-1] + "\n";
}
else if (codeLines && codeLines.length % 2 == 1) {
insertCodeLine = codeLines[codeLines.length-1].replace(/[^`]/g, "");
messages[j] = messages[j] + insertCodeLine;
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
return messages;
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
setLabelsByLanguage () {
2019-10-22 19:38:25 +02:00
switch (BDFDB.LanguageUtils.getLanguage().id) {
2018-10-11 10:21:26 +02:00
case "hr": //croatian
return {
toast_allsent_text: "Sve veliku poslane.",
modal_messages_warning: "Nemojte slati previše veliku!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Pošalji veliku poruku:"
2018-10-11 10:21:26 +02:00
};
case "da": //danish
return {
toast_allsent_text: "Alle beskeder sendes.",
modal_messages_warning: "Send ikke for mange beskeder!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Send stor besked:"
2018-10-11 10:21:26 +02:00
};
case "de": //german
return {
toast_allsent_text: "Alle Nachrichten versendet.",
modal_messages_warning: "Schicke nicht zu viele Nachrichten!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Große Nachricht senden:"
2018-10-11 10:21:26 +02:00
};
case "es": //spanish
return {
toast_allsent_text: "Todos los mensajes enviados.",
modal_messages_warning: "¡No envíe demasiados mensajes!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Enviar mensaje grande:"
2018-10-11 10:21:26 +02:00
};
case "fr": //french
return {
toast_allsent_text: "Tous les messages envoyés",
modal_messages_warning: "N'envoyez pas trop de messages!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Envoyer un gros message:"
2018-10-11 10:21:26 +02:00
};
case "it": //italian
return {
toast_allsent_text: "Tutti i messaggi inviati.",
modal_messages_warning: "Non inviare troppi messaggi!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Invia grande messaggio:"
2018-10-11 10:21:26 +02:00
};
case "nl": //dutch
return {
toast_allsent_text: "Alle berichten verzonden.",
modal_messages_warning: "Stuur niet te veel berichten!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Stuur een groot bericht:"
2018-10-11 10:21:26 +02:00
};
case "no": //norwegian
return {
toast_allsent_text: "Alle meldinger sendt.",
modal_messages_warning: "Ikke send for mange meldinger!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Send stor melding:"
2018-10-11 10:21:26 +02:00
};
case "pl": //polish
return {
toast_allsent_text: "Wszystkie wiadomości zostały wysłane.",
modal_messages_warning: "Nie wysyłaj zbyt wielu wiadomości!",
2019-09-11 12:14:43 +02:00
modal_header_text: "Wyślij dużą wiadomość:"
2018-10-11 10:21:26 +02:00
};
case "pt-BR": //portuguese (brazil)
return {
toast_allsent_text: "Todas as mensagens enviadas.",
modal_messages_warning: "Não envie muitas mensagens!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Enviar mensagem grande:"
2018-10-11 10:21:26 +02:00
};
case "fi": //finnish
return {
toast_allsent_text: "Kaikki lähetetyt viestit.",
modal_messages_warning: "Älä lähetä liian monta viestiä!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Lähetä suuri viesti:"
2018-10-11 10:21:26 +02:00
};
case "sv": //swedish
return {
toast_allsent_text: "Alla meddelanden skickade.",
modal_messages_warning: "Skicka inte för många meddelanden!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Skicka stort meddelande:"
2018-10-11 10:21:26 +02:00
};
case "tr": //turkish
return {
toast_allsent_text: "Tüm mesajlar gönderildi.",
modal_messages_warning: "Çok fazla mesaj göndermeyin!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Büyük mesaj gönder:"
2018-10-11 10:21:26 +02:00
};
case "cs": //czech
return {
toast_allsent_text: "Všechny zprávy byly odeslány.",
modal_messages_warning: "Neposílejte příliš mnoho zpráv!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Odeslat velkou zprávu:"
2018-10-11 10:21:26 +02:00
};
case "bg": //bulgarian
return {
toast_allsent_text: "Всички изпратени съобщения.",
modal_messages_warning: "Не изпращайте твърде много съобщения!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Изпратете голямо съобщение:"
2018-10-11 10:21:26 +02:00
};
case "ru": //russian
return {
toast_allsent_text: "Все отправленные сообщения.",
modal_messages_warning: "Не отправляйте слишком много сообщений!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Отправить сообщение:"
2018-10-11 10:21:26 +02:00
};
case "uk": //ukrainian
return {
toast_allsent_text: "Всі повідомлення надіслано.",
modal_messages_warning: "Не надсилайте надто багато повідомлень!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Надіслати велике повідомлення:"
2018-10-11 10:21:26 +02:00
};
case "ja": //japanese
return {
toast_allsent_text: "すべてのメッセージが送信されました。",
modal_messages_warning: "あまりにも多くのメッセージを送信しないでください!",
2019-11-11 11:11:33 +01:00
modal_header_text: "大きなメッセージを送信する:"
2018-10-11 10:21:26 +02:00
};
case "zh-TW": //chinese (traditional)
return {
toast_allsent_text: "發送的所有消息。",
modal_messages_warning: "不要發送太多信息!",
2019-11-11 11:11:33 +01:00
modal_header_text: "發送大信息:"
2018-10-11 10:21:26 +02:00
};
case "ko": //korean
return {
toast_allsent_text: "모든 메시지가 전송되었습니다.",
modal_messages_warning: "너무 많은 메시지를 보내지 마십시오!",
2019-11-11 11:11:33 +01:00
modal_header_text: "큰 메시지 보내기:"
2018-10-11 10:21:26 +02:00
};
default: //default: english
return {
toast_allsent_text: "All messages sent.",
modal_messages_warning: "Do not send too many messages!",
2019-11-11 11:11:33 +01:00
modal_header_text: "Send large message:"
2018-10-11 10:21:26 +02:00
};
}
}
}