inital emoji support

This commit is contained in:
MathMan05 2024-08-05 19:06:26 -05:00
parent d2294d9ac7
commit 8b3fe48a74
12 changed files with 377 additions and 7 deletions

View file

@ -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
View 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 };

View file

@ -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 };

View file

@ -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;