inital emoji support
This commit is contained in:
parent
d2294d9ac7
commit
8b3fe48a74
12 changed files with 377 additions and 7 deletions
|
@ -8,6 +8,8 @@ import { Settings, RoleList } from "./settings.js";
|
|||
import { Role } from "./role.js";
|
||||
import { InfiniteScroller } from "./infiniteScroller.js";
|
||||
import { SnowFlake } from "./snowflake.js";
|
||||
import { Emoji } from "./emoji.js";
|
||||
new Emoji();
|
||||
class Channel {
|
||||
editing;
|
||||
type;
|
||||
|
|
67
.dist/emoji.js
Normal file
67
.dist/emoji.js
Normal file
|
@ -0,0 +1,67 @@
|
|||
class Emoji {
|
||||
static emojis;
|
||||
static decodeEmojiList(buffer) {
|
||||
const view = new DataView(buffer, 0);
|
||||
let i = 0;
|
||||
function read16() {
|
||||
const int = view.getUint16(i);
|
||||
i += 2;
|
||||
return int;
|
||||
}
|
||||
function read8() {
|
||||
const int = view.getUint8(i);
|
||||
i += 1;
|
||||
return int;
|
||||
}
|
||||
function readString8() {
|
||||
return readStringNo(read8());
|
||||
}
|
||||
function readString16() {
|
||||
return readStringNo(read16());
|
||||
}
|
||||
function readStringNo(length) {
|
||||
const array = new Uint8Array(length);
|
||||
for (let i = 0; i < length; i++) {
|
||||
array[i] = read8();
|
||||
}
|
||||
const decoded = new TextDecoder("utf-8").decode(array.buffer);
|
||||
;
|
||||
//console.log(array);
|
||||
return decoded;
|
||||
}
|
||||
const build = [];
|
||||
let cats = read16();
|
||||
for (; cats !== 0; cats--) {
|
||||
const name = readString16();
|
||||
const emojis = [];
|
||||
let emojinumber = read16();
|
||||
for (; emojinumber !== 0; emojinumber--) {
|
||||
//console.log(emojis);
|
||||
const name = readString8();
|
||||
const len = read8();
|
||||
const skin_tone_support = len > 127;
|
||||
const emoji = readStringNo(len - (+skin_tone_support * 128));
|
||||
emojis.push({
|
||||
name,
|
||||
skin_tone_support,
|
||||
emoji
|
||||
});
|
||||
}
|
||||
build.push({
|
||||
name,
|
||||
emojis
|
||||
});
|
||||
}
|
||||
this.emojis = build;
|
||||
console.log(build);
|
||||
}
|
||||
static grabEmoji() {
|
||||
fetch("/emoji.bin").then(e => {
|
||||
return e.arrayBuffer();
|
||||
}).then(e => {
|
||||
Emoji.decodeEmojiList(e);
|
||||
});
|
||||
}
|
||||
}
|
||||
Emoji.grabEmoji();
|
||||
export { Emoji };
|
|
@ -363,7 +363,7 @@ class Localuser {
|
|||
const div = document.createElement("div");
|
||||
div.classList.add("home", "servericon");
|
||||
img.src = "/icons/home.svg";
|
||||
img.classList.add("svgtheme");
|
||||
img.classList.add("svgtheme", "svgicon");
|
||||
img["all"] = this.guildids.get("@me");
|
||||
this.guildids.get("@me").html = outdiv;
|
||||
const unread = document.createElement("div");
|
||||
|
@ -407,7 +407,7 @@ class Localuser {
|
|||
const guilddsdiv = document.createElement("div");
|
||||
const guildDiscoveryContainer = document.createElement("img");
|
||||
guildDiscoveryContainer.src = "/icons/explore.svg";
|
||||
guildDiscoveryContainer.classList.add("svgtheme");
|
||||
guildDiscoveryContainer.classList.add("svgtheme", "svgicon");
|
||||
guilddsdiv.classList.add("home", "servericon");
|
||||
guilddsdiv.appendChild(guildDiscoveryContainer);
|
||||
serverlist.appendChild(guilddsdiv);
|
||||
|
@ -922,5 +922,57 @@ class Localuser {
|
|||
]);
|
||||
botDialog.show();
|
||||
}
|
||||
//---------- resolving members code -----------
|
||||
waitingmembers = new Map();
|
||||
async resolvemember(id, guildid) {
|
||||
console.warn("this function is currently non-functional, either due to a bug in the client or the server, it's currently unclear, use at your own risk");
|
||||
if (!this.waitingmembers.has(guildid)) {
|
||||
this.waitingmembers.set(guildid, new Map());
|
||||
}
|
||||
let res;
|
||||
const promise = new Promise((r) => {
|
||||
res = r;
|
||||
});
|
||||
this.waitingmembers.get(guildid).set(id, res);
|
||||
this.getmembers();
|
||||
return await promise;
|
||||
}
|
||||
fetchingmembers = new Map();
|
||||
async getmembers() {
|
||||
if (this.ws) {
|
||||
this.waitingmembers.forEach(async (value, guildid) => {
|
||||
const keys = value.keys();
|
||||
if (this.fetchingmembers.has(guildid)) {
|
||||
return;
|
||||
}
|
||||
const build = [];
|
||||
for (const key of keys) {
|
||||
build.push(key);
|
||||
}
|
||||
;
|
||||
let res;
|
||||
const promise = new Promise((r) => {
|
||||
res = r;
|
||||
});
|
||||
this.ws.send(JSON.stringify({
|
||||
op: 8,
|
||||
d: {
|
||||
query: "",
|
||||
user_ids: build,
|
||||
guild_id: guildid,
|
||||
limit: 100,
|
||||
nonce: "" + Math.floor(Math.random() * 100000000)
|
||||
}
|
||||
}));
|
||||
this.fetchingmembers.set(guildid, res);
|
||||
const data = await promise;
|
||||
for (const thing of data) {
|
||||
value.get(thing.id)(thing);
|
||||
value.delete(thing.id);
|
||||
}
|
||||
this.getmembers();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
export { Localuser };
|
||||
|
|
|
@ -101,6 +101,7 @@ class Member {
|
|||
}
|
||||
const prom1 = fetch(guild.info.api.toString() + "/users/" + id + "/profile?with_mutual_guilds=true&with_mutual_friends_count=true&guild_id=" + guild.snowflake, { headers: guild.headers });
|
||||
prom1.catch(_ => { console.log(_); });
|
||||
guild.localuser.resolvemember(id?.id, guild.id);
|
||||
const promoise = prom1.then(_ => _.json()).then(json => {
|
||||
const memb = new Member(json, guild);
|
||||
Member.already[guild.id][id] = memb;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue