1
0
Fork 0
This commit is contained in:
amyulating 2024-12-22 17:03:56 +00:00
parent 7f5c574398
commit b7bd317bf0
9 changed files with 256 additions and 87 deletions

38
404.md
View file

@ -3,40 +3,4 @@ permalink: /404.html
--- ---
> **Note:** You accessed a link that returned a 404, probably by clicking one of the plugin links. You're supposed to copy the link address and add it into shelter. > **Note:** You accessed a link that returned a 404, probably by clicking one of the plugin links. You're supposed to copy the link address and add it into shelter.
# [Your name here]'s shelter plugins meow
If you're reading this you should either change this README,
or you should run `npx degit uwu/shelter-template shelter-plugins`!
## Getting started
You should be using [pnpm](https://pnpm.io/) with this template ideally.
To install the dependencies and debug `hello-world` run:
```sh
pnpm i
pnpm lune dev plugins/hello-world
```
Ensure that Lune Dev Mode is enabled in Discord so that lune can connect to it.
Now you can start debugging. The plugin will automatically reload after every change.
## Installing
To then install your finished plugin in shelter you can either rely on GitHub pages and it's workflow or you can build and host them here temporarily.
### Building locally
To build and host your plugins locally run:
```sh
pnpm lune ci
npx http-server dist/ --cors
```
Then you can install your plugin in shelter with this URL `http://localhost:8080/hello-world`.
### Publishing via GitHub
If you have published this repo on GitHub the plugins will be built after every commit.
For the GitHub action to run flawlessly, make sure you have the following setting enabled:
`Repo settings > Actions > General > Workflow permissions > Read and write permissions`
And for it to be hosted correctly you need to configure the `gh-pages` branch after its been created by the GitHub action. You can do this in `Repo settings > Pages > Branch`.
If this worked, you will be able to install the plugin via `https://<username>.github.io/<repo>/hello-world`.

View file

@ -1,37 +1 @@
# [Your name here]'s shelter plugins meow
If you're reading this you should either change this README,
or you should run `npx degit uwu/shelter-template shelter-plugins`!
## Getting started
You should be using [pnpm](https://pnpm.io/) with this template ideally.
To install the dependencies and debug `hello-world` run:
```sh
pnpm i
pnpm lune dev plugins/hello-world
```
Ensure that Lune Dev Mode is enabled in Discord so that lune can connect to it.
Now you can start debugging. The plugin will automatically reload after every change.
## Installing
To then install your finished plugin in shelter you can either rely on GitHub pages and it's workflow or you can build and host them here temporarily.
### Building locally
To build and host your plugins locally run:
```sh
pnpm lune ci
npx http-server dist/ --cors
```
Then you can install your plugin in shelter with this URL `http://localhost:8080/hello-world`.
### Publishing via GitHub
If you have published this repo on GitHub the plugins will be built after every commit.
For the GitHub action to run flawlessly, make sure you have the following setting enabled:
`Repo settings > Actions > General > Workflow permissions > Read and write permissions`
And for it to be hosted correctly you need to configure the `gh-pages` branch after its been created by the GitHub action. You can do this in `Repo settings > Pages > Branch`.
If this worked, you will be able to install the plugin via `https://<username>.github.io/<repo>/hello-world`.

View file

@ -1 +0,0 @@
{"name":"hello-world","author":"Your name here","description":"An example shelter plugin","hash":"38b9443d1726222278f0c08f6258a9ec"}

View file

@ -17,22 +17,27 @@
}; };
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// plugins/hello-world/index.jsx // plugins/remixer/index.ts
var hello_world_exports = {}; var remixer_exports = {};
__export(hello_world_exports, { __export(remixer_exports, {
onLoad: () => onLoad,
onUnload: () => onUnload onUnload: () => onUnload
}); });
var { var {
util: { http: { intercept }
log
}
} = shelter; } = shelter;
function onLoad() { var unintercept = intercept("post", /\/channels\/\d+\/messages/, async (req, send) => {
log("Hello, World from shelter!"); if (req.body.attachments) {
for (let i = 0; i < req.body.attachments.length; i++) {
req.body.attachments[i] = {
...req.body.attachments[i],
is_remix: true
};
} }
}
return send(req);
});
function onUnload() { function onUnload() {
log("Goodbye, World from shelter!"); unintercept();
} }
return __toCommonJS(hello_world_exports); return __toCommonJS(remixer_exports);
})(); })();

1
remixer/plugin.json Normal file
View file

@ -0,0 +1 @@
{"name":"remixer","author":"amy","description":"set all your attachments as remix","hash":"c0b349410aef346b64dbd882ad6ad3be"}

109
show raw message/plugin.js Normal file
View file

@ -0,0 +1,109 @@
(() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// shltr-res-ns:solid-js/web
var require_web = __commonJS({
"shltr-res-ns:solid-js/web"(exports, module) {
module.exports = shelter.solidWeb;
}
});
// plugins/show raw message/index.jsx
var show_raw_message_exports = {};
__export(show_raw_message_exports, {
onUnload: () => onUnload
});
var import_web = __toESM(require_web(), 1);
var import_web2 = __toESM(require_web(), 1);
var import_web3 = __toESM(require_web(), 1);
var _tmpl$ = /* @__PURE__ */ (0, import_web.template)(`<code></code>`, 2);
var {
util: {
getFiber,
reactFiberWalker
},
flux: {
dispatcher,
stores
},
observeDom,
ui: {
Button,
openModal,
ModalBody,
ModalFooter,
ModalRoot,
ModalHeader,
ModalSizes
}
} = shelter;
dispatcher.subscribe("CONTEXT_MENU_OPEN", handler);
function handler(dispatch) {
const unObserve = observeDom("[id^=message-copy-link]", (elem) => {
const messageId = reactFiberWalker(getFiber(elem), "message", true).pendingProps.message.id;
elem.insertAdjacentElement("afterend", (0, import_web3.createComponent)(Button, {
size: "MEDIUM",
get onClick() {
return clicked.bind(null, getMessageObject(messageId));
},
children: "show raw message object"
}));
unObserve();
});
setTimeout(unObserve, 500);
}
function clicked(a) {
const remove = openModal((p) => (0, import_web3.createComponent)(ModalRoot, {
get size() {
return ModalSizes.SMALL;
},
get children() {
const _el$ = _tmpl$.cloneNode(true);
_el$.style.setProperty("overflowX", "scroll");
_el$.style.setProperty("overflowY", "scroll");
(0, import_web2.insert)(_el$, () => JSON.stringify(a, null, 2));
return _el$;
}
}));
dispatcher.dispatch({
type: "CONTEXT_MENU_CLOSE"
});
}
function getMessageObject(messageId) {
const fluxMessages = stores.MessageStore.getMessages(stores.SelectedChannelStore.getChannelId());
return fluxMessages._map[messageId];
}
function onUnload() {
dispatcher.unsubscribe("CONTEXT_MENU_OPEN", handler);
}
return __toCommonJS(show_raw_message_exports);
})();

View file

@ -0,0 +1 @@
{"name":"show raw messages","author":"amy","description":"see the raw message object (beta, looks like shit)","hash":"7d631fc37d6d450a9c264163d020f41b"}

125
uwuifier/plugin.js Normal file
View file

@ -0,0 +1,125 @@
(() => {
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// plugins/uwuifier/index.jsx
var uwuifier_exports = {};
__export(uwuifier_exports, {
onUnload: () => onUnload
});
var {
http: {
intercept
},
util: {
log
}
} = shelter;
var endings = [
"rawr x3",
"OwO",
"UwU",
"o.O",
"-.-",
">w<",
"(\u2445\u02D8\uA4B3\u02D8)",
"(\uA20D\u1D17\uA20D)",
"(\u02D8\u03C9\u02D8)",
"(U \u1D55 U\u2741)",
"\u03C3\u03C9\u03C3",
"\xF2\u03C9\xF3",
"(///\u02EC///\u273F)",
"(U \uFE4F U)",
"( \u0361o \u03C9 \u0361o )",
"\u0298w\u0298",
":3",
":3",
// important enough to have twice
":3",
// important enough to have thrice
"XD",
"nyaa~~",
"mya",
">_<",
"\u{1F633}",
"\u{1F97A}",
"\u{1F633}\u{1F633}\u{1F633}",
"rawr",
"^^",
"^^;;",
"(\u02C6 \uFECC \u02C6)\u2661",
"^\u2022\uFECC\u2022^",
"/(^\u2022\u03C9\u2022^)",
"(\u273Fo\u03C9o)"
];
var replacements = [["small", "smol"], ["cute", "kawaii"], ["fluff", "floof"], ["love", "luv"], ["stupid", "baka"], ["what", "nani"], ["meow", "nya"], ["hello", "hewwo"]];
function selectRandomElement(arr) {
const randomIndex = Math.floor(Math.random() * arr.length);
return arr[randomIndex];
}
var isOneCharacterString = (str) => {
return str.split("").every((char) => char === str[0]);
};
function replaceString(inputString) {
let replaced = false;
for (const replacement of replacements) {
const regex = new RegExp(`\\b${replacement[0]}\\b`, "gi");
if (regex.test(inputString)) {
inputString = inputString.replace(regex, replacement[1]);
replaced = true;
}
}
return replaced ? inputString : false;
}
function uwuify(message) {
const rule = /\S+|\s+/g;
const words = message.match(rule);
let answer = "";
if (words === null)
return "";
for (let i = 0; i < words.length; i++) {
if (isOneCharacterString(words[i]) || words[i].startsWith("https://")) {
answer += words[i];
continue;
}
if (!replaceString(words[i])) {
answer += words[i].replace(/n(?=[aeo])/g, "ny").replace(/l|r/g, "w");
} else
answer += replaceString(words[i]);
}
answer += " " + selectRandomElement(endings);
return answer;
}
var unintercept = intercept("post", /\/channels\/\d+\/messages/, (req, send) => {
let newContent = req?.body?.content;
log(newContent);
if (!newContent) {
return send(req);
}
if (newContent.startsWith("!u ")) {
newContent = newContent.replace("!u ", "", 1);
req.body.content = uwuify(newContent.toLowerCase());
}
return send(req);
});
function onUnload() {
log("Goodbye, Wowwd fwom shewtew! ^^;;");
unintercept();
}
return __toCommonJS(uwuifier_exports);
})();

1
uwuifier/plugin.json Normal file
View file

@ -0,0 +1 @@
{"name":"uwuifier","author":"amy","description":"become kawaii","hash":"5f7257c987cab92b755e74b24a6b56f7"}