Skip to content

Instantly share code, notes, and snippets.

@intrnl
intrnl / handler.js
Last active December 14, 2020 19:31
Discord slash commands example on Cloudflare Workers
import * as ed from './noble-ed25519';
let encoder = new TextEncoder();
let commands = new Map();
export function define (name, handler) {
commands.set(name, handler);
}
function isObject (value) {
return value && typeof value == 'object';
}
function hasOwnProperty (object, key) {
return Object.prototoype.hasOwnProperty.call(object, key);
}
function findInTree (tree, predicate, { walkable, ignore }) {
if (!isObject(tree)) return;
function sleep (ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
@intrnl
intrnl / deferred.ts
Last active December 19, 2020 00:53
export function createDeferred<V> (): Deferred<V> {
let deferred: Deferred<V> = {} as any;
deferred.promise = new Promise((resolve, reject) => (
Object.assign(deferred, { resolve, reject })
));
return deferred;
}
export function createLazyPromise (executor) {
let promise;
function ensure () {
return promise || (promise = new Promise(executor));
}
return {
then (onfulfilled, onrejected) {
return ensure().then(onfulfilled, onrejected);
@intrnl
intrnl / queue.ts
Last active December 21, 2020 06:18
export class Queue<V = any> {
head?: Node<V>;
tail?: Node<V>;
size!: number;
constructor () {
this.clear();
}
import { getPlatformInfo } from '../utils/platform';
import { noop } from '../utils/util';
import * as http from '../lib/http';
import { GATEWAY_VERSION } from '../constants/endpoints';
import { GATEWAY } from '../constants/api';
import { GatewayOP, ConnectionStatus } from '../constants/gateway';
import { Inflate } from '@intrnl/pako-esm/inflate';
import { Z_SYNC_FLUSH } from '@intrnl/pako-esm/constants';
@intrnl
intrnl / clear_mal.js
Last active February 8, 2021 01:07
Clear MyAnimeList
let sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
let random = (min, max) => ~~(Math.random() * (max - min) + min);
let form_data = new FormData();
form_data.append('csrf_token', document.querySelector('meta[name=csrf_token]').content);
let elements = Array.from(document.querySelectorAll('.animetitle'));
console.log(`${elements.length} to delete`);
class EventEmitter {
#events = new EventTarget();
#map = new WeakMap();
on (type, listener, opts = {}) {
let { once = false } = opts;
let fn = this.#map.get(listener);
if (!fn) {
fn = (ev) => listener(...ev.detail);
// monkey patches all class methods for tracing calls
// not made for async methods
function patch_trace (cl, depth = Infinity) {
let proto = cl.prototype;
do {
if (!depth-- || proto === Object.prototype) break;
let name = proto.constructor.name;