deploy: 0a80079600
This commit is contained in:
parent
7f5c574398
commit
b7bd317bf0
9 changed files with 256 additions and 87 deletions
38
404.md
38
404.md
|
|
@ -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`.
|
|
||||||
38
README.md
38
README.md
|
|
@ -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`.
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"name":"hello-world","author":"Your name here","description":"An example shelter plugin","hash":"38b9443d1726222278f0c08f6258a9ec"}
|
|
||||||
|
|
@ -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
1
remixer/plugin.json
Normal 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
109
show raw message/plugin.js
Normal 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);
|
||||||
|
})();
|
||||||
1
show raw message/plugin.json
Normal file
1
show raw message/plugin.json
Normal 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
125
uwuifier/plugin.js
Normal 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
1
uwuifier/plugin.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name":"uwuifier","author":"amy","description":"become kawaii","hash":"5f7257c987cab92b755e74b24a6b56f7"}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue