Improvedingon that plugin. now doesnt fuckington up hyprlinks (#658)

* Improvedingon that plugin. now doesnt fuckington up hyprlinks

* bitchass ==

* bleh

---------

Co-authored-by: thororen <78185467+thororen1234@users.noreply.github.com>
This commit is contained in:
BioTomateDE 2026-01-19 08:31:21 +01:00 • committed by GitHub
parent a3ba201441
commit f69b63f594
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 34 additions and 36 deletions

View file

@ -1,4 +1,4 @@
/*
/*
* Vencord, a Discord client mod
* Copyright (c) 2025 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
@ -32,7 +32,6 @@ const settings = definePluginSettings({
const isLegal = (word: string): boolean => {
if (word === "i" || word === "I") return false;
if (word === "http" || word === "https") return false;
const lastChar = word.slice(-1).toLowerCase();
if (["a", "e", "o", "u", "y"].includes(lastChar)) return false;
@ -40,31 +39,26 @@ const isLegal = (word: string): boolean => {
return true;
};
const getWordBoundaries = (string: string): WordMatch[] => {
const regex = /[.,!?;:'"\-_()[\]{}<>/\\|@#$%^&*+=`~…—–\s0-9]+/g;
const getWords = (string: string): WordMatch[] => {
const linkRegex = /https?:\/\/[^\s]+\.[^\s]+/g;
const linkRanges = new Set<number>();
const matches: WordMatch[] = [];
let startIndex: number = 0;
for (const match of string.matchAll(regex)) {
const word = string.slice(startIndex, match.index);
if (word.length > 0) {
matches.push({ word, startIndex });
for (const match of string.matchAll(linkRegex)) {
const start = match.index!;
const end = start + match[0].length;
for (let i = start; i < end; i++) {
linkRanges.add(i);
}
startIndex = match.index + match[0].length;
}
if (startIndex < string.length) {
const word = string.slice(startIndex);
matches.push({ word, startIndex });
}
return matches;
return Array.from(string.matchAll(/[\p{L}]+/gu), match => ({
word: match[0],
startIndex: match.index!
})).filter(match => !linkRanges.has(match.startIndex));
};
const chooseRandomWord = (message: string): WordMatch | null => {
const words: WordMatch[] = getWordBoundaries(message);
const words: WordMatch[] = getWords(message);
while (words.length > 0) {
const index: number = Math.floor(Math.random() * words.length);
@ -81,14 +75,14 @@ const chooseRandomWord = (message: string): WordMatch | null => {
return null;
};
const whatToAppend = (word: string): string => {
if (word.endsWith("ington")) return "";
if (word.endsWith("ingto")) return "n";
if (word.endsWith("ingt")) return "on";
if (word.endsWith("ing")) return "ton";
if (word.endsWith("in")) return "gton";
if (word.endsWith("i")) return "ngton";
return "ington";
const ington = (word: string): string => {
if (word.endsWith("INGTON")) return "";
if (word.endsWith("INGTO")) return "N";
if (word.endsWith("INGT")) return "ON";
if (word.endsWith("ING")) return "TON";
if (word.endsWith("IN")) return "GTON";
if (word.endsWith("I")) return "NGTON";
return "INGTON";
};
const handleMessage = ((channelId, message) => {
@ -100,17 +94,17 @@ const handleMessage = ((channelId, message) => {
const wordMatch: WordMatch | null = chooseRandomWord(msg);
if (wordMatch === null) return;
const { word } = wordMatch;
const wordLower = word.toLowerCase();
const isLower = word === wordLower;
const word = wordMatch.word;
const wordUpper = word.toUpperCase();
const isUpper = word === wordUpper;
let append = whatToAppend(wordLower);
if (!isLower) {
append = append.toUpperCase();
let insertion = ington(wordUpper);
if (!isUpper) {
insertion = insertion.toLowerCase();
}
const idx: number = wordMatch.startIndex + word.length;
message.content = msg.slice(0, idx) + append + msg.slice(idx);
message.content = msg.slice(0, idx) + insertion + msg.slice(idx);
});
const IngtoninatorButton: ChatBarButtonFactory = ({ isMainChat }) => {
@ -152,7 +146,7 @@ function disabledIcon() {
export default definePlugin({
name: "Ingtoninator",
description: "Suffixes 'ington' to a random word in your message",
authors: [EquicordDevs.zyqunix],
authors: [EquicordDevs.zyqunix, EquicordDevs.BioTomateDE],
settings,
chatBarButton: {
icon: disabledIcon,

View file

@ -1241,6 +1241,10 @@ export const EquicordDevs = Object.freeze({
name: "busyboxkitty",
id: 1312185484159483948n
},
BioTomateDE: {
name: "BioTomateDE",
id: 553499669226061844n,
},
} satisfies Record<string, Dev>);
// iife so #__PURE__ works correctly