remove snowflake instances

This commit is contained in:
MathMan05 2024-09-03 11:00:44 -05:00
parent 004beb4955
commit e66b6c0883
16 changed files with 97 additions and 149 deletions

View file

@ -18,13 +18,12 @@ declare global {
image?: string|null|undefined
}
}
class Channel{
class Channel extends SnowFlake{
editing:Message|null;
type:number;
owner:Guild;
headers:Localuser["headers"];
name:string;
snowflake:SnowFlake;
parent_id?:string;
parent:Channel|null;
children:Channel[];
@ -48,9 +47,6 @@ class Channel{
idToPrev:Map<string,string>=new Map();
idToNext:Map<string,string>=new Map();
messages:Map<string,Message>=new Map();
get id(){
return this.snowflake.id;
}
static setupcontextmenu(){
this.contextmenu.addbutton("Copy channel id",function(this:Channel){
console.log(this);
@ -171,20 +167,19 @@ class Channel{
}
setUpInfiniteScroller(){
this.infinite=new InfiniteScroller((async (id:string,offset:number):Promise<string|undefined>=>{
const snowflake=id;
if(offset===1){
if(this.idToPrev.has(snowflake)){
return this.idToPrev.get(snowflake);
if(this.idToPrev.has(id)){
return this.idToPrev.get(id);
}else{
await this.grabBefore(id);
return this.idToPrev.get(snowflake);
return this.idToPrev.get(id);
}
}else{
if(this.idToNext.has(snowflake)){
return this.idToNext.get(snowflake);
if(this.idToNext.has(id)){
return this.idToNext.get(id);
}else if(this.lastmessage?.id!==id){
await this.grabAfter(id);
return this.idToNext.get(snowflake);
return this.idToNext.get(id);
}else{
console.log("at bottom");
}
@ -219,7 +214,8 @@ class Channel{
this.readbottom.bind(this)
);
}
constructor(json:channeljson|-1,owner:Guild){
constructor(json:channeljson|-1,owner:Guild,id:string=json===-1?undefined:json.id){
super(id);
if(json===-1){
return;
}
@ -228,7 +224,6 @@ class Channel{
this.owner=owner;
this.headers=this.owner.headers;
this.name=json.name;
this.snowflake=new SnowFlake(json.id);
if(json.parent_id){
this.parent_id=json.parent_id;
}
@ -500,7 +495,7 @@ class Channel{
if(!this.hasunreads){
return;
}
fetch(this.info.api+"/channels/"+this.snowflake+"/messages/"+this.lastmessageid+"/ack",{
fetch(this.info.api+"/channels/"+this.id+"/messages/"+this.lastmessageid+"/ack",{
method: "POST",
headers: this.headers,
body: JSON.stringify({})
@ -586,7 +581,7 @@ class Channel{
let name=this.name;
let topic=this.topic;
let nsfw=this.nsfw;
const thisid=this.snowflake;
const thisid=this.id;
const thistype=this.type;
const full=new Dialog(
["hdiv",
@ -625,7 +620,7 @@ class Channel{
console.log(full);
}
deleteChannel(){
fetch(this.info.api+"/channels/"+this.snowflake,{
fetch(this.info.api+"/channels/"+this.id,{
method: "DELETE",
headers: this.headers
});
@ -669,7 +664,7 @@ class Channel{
if(message){
return message;
}else{
const gety=await fetch(this.info.api+"/channels/"+this.snowflake+"/messages?limit=1&around="+id,{headers: this.headers});
const gety=await fetch(this.info.api+"/channels/"+this.id+"/messages?limit=1&around="+id,{headers: this.headers});
const json=await gety.json();
return new Message(json[0],this);
}
@ -692,7 +687,7 @@ class Channel{
this.guild.prevchannel=this;
this.localuser.channelfocus=this;
const prom=this.infinite.delete();
history.pushState(null, "","/channels/"+this.guild_id+"/"+this.snowflake);
history.pushState(null, "","/channels/"+this.guild_id+"/"+this.id);
this.localuser.pageTitle("#"+this.name);
const channelTopic=document.getElementById("channelTopic") as HTMLSpanElement;
@ -746,7 +741,7 @@ class Channel{
if(this.lastreadmessageid&&this.messages.has(this.lastreadmessageid)){
return;
}
const j=await fetch(this.info.api+"/channels/"+this.snowflake+"/messages?limit=100",{
const j=await fetch(this.info.api+"/channels/"+this.id+"/messages?limit=100",{
headers: this.headers,
});
@ -856,11 +851,6 @@ class Channel{
throw new Error("please don't call this, no one has implemented it :P");
}
async buildmessages(){
/*
if(((!this.lastmessage)||(!this.lastmessage.snowflake)||(!this.goBackIds(this.lastmessage.snowflake,50,false)))&&this.lastreadmessageid){
await this.grabAfter(this.lastreadmessageid.id);
}
*/
this.infinitefocus=false;
this.tryfocusinfinate();
}
@ -973,7 +963,7 @@ class Channel{
return;
}
this.typing=Date.now()+6000;
fetch(this.info.api+"/channels/"+this.snowflake+"/typing",{
fetch(this.info.api+"/channels/"+this.id+"/typing",{
method: "POST",
headers: this.headers
});
@ -1015,7 +1005,7 @@ class Channel{
if(replyjson){
body.message_reference=replyjson;
}
return await fetch(this.info.api+"/channels/"+this.snowflake+"/messages",{
return await fetch(this.info.api+"/channels/"+this.id+"/messages",{
method: "POST",
headers: this.headers,
body: JSON.stringify(body)
@ -1034,7 +1024,7 @@ class Channel{
for(const i in attachments){
formData.append("files["+i+"]",attachments[i]);
}
return await fetch(this.info.api+"/channels/"+this.snowflake+"/messages", {
return await fetch(this.info.api+"/channels/"+this.id+"/messages", {
method: "POST",
body: formData,
headers: {Authorization: this.headers.Authorization}
@ -1125,7 +1115,7 @@ class Channel{
}
}
async addRoleToPerms(role:Role){
await fetch(this.info.api+"/channels/"+this.snowflake+"/permissions/"+role.snowflake,{
await fetch(this.info.api+"/channels/"+this.id+"/permissions/"+role.id,{
method: "PUT",
headers: this.headers,
body: JSON.stringify({
@ -1144,7 +1134,7 @@ class Channel{
if(permission){
permission.allow=perms.allow;
permission.deny=perms.deny;
await fetch(this.info.api+"/channels/"+this.snowflake+"/permissions/"+id,{
await fetch(this.info.api+"/channels/"+this.id+"/permissions/"+id,{
method: "PUT",
headers: this.headers,
body: JSON.stringify({

View file

@ -4,7 +4,6 @@ import{ Message }from"./message.js";
import{ Localuser }from"./localuser.js";
import{User}from"./user.js";
import{ Member }from"./member.js";
import{ SnowFlake }from"./snowflake.js";
import{ dirrectjson, memberjson }from"./jsontypes.js";
import{ Permissions }from"./permissions.js";
@ -19,7 +18,6 @@ class Direct extends Guild{
this.headers=this.localuser.headers;
this.channels=[];
this.channelids={};
this.snowflake=new SnowFlake("@me");
this.properties={};
this.roles=[];
this.roleids=new Map();
@ -84,7 +82,7 @@ dmPermissions.setPermission("USE_VAD",1);
class Group extends Channel{
user:User;
constructor(json:dirrectjson,owner:Direct){
super(-1,owner);
super(-1,owner,json.id);
this.owner=owner;
this.headers=this.guild.headers;
this.name=json.recipients[0]?.username;
@ -94,7 +92,6 @@ class Group extends Channel{
this.user=this.localuser.user;
}
this.name??=this.localuser.user.username;
this.snowflake=new SnowFlake(json.id);
this.parent_id=null;
this.parent=null;
this.children=[];
@ -106,7 +103,8 @@ class Group extends Channel{
if(this.lastmessageid){
this.position=Number((BigInt(this.lastmessageid)>>22n)+1420070400000n);
}
this.position=-Math.max(this.position,this.snowflake.getUnixTime());
this.position=-Math.max(this.position,this.getUnixTime());
}
createguildHTML(){
const div=document.createElement("div");

View file

@ -10,12 +10,11 @@ import{ SnowFlake }from"./snowflake.js";
import{ channeljson, guildjson, emojijson, memberjson }from"./jsontypes.js";
import{ User }from"./user.js";
import{ Message }from"./message.js";
class Guild{
class Guild extends SnowFlake{
owner:Localuser;
headers:Localuser["headers"];
channels:Channel[];
channelids:{[key:string]:Channel};
snowflake:SnowFlake;
properties;
roles:Role[];
roleids:Map<string,Role>;
@ -27,9 +26,6 @@ class Guild{
member:Member;
html:HTMLElement;
emojis:emojijson[];
get id(){
return this.snowflake.id;
}
static contextmenu=new Contextmenu<Guild,undefined>("guild menu");
static setupcontextmenu(){
Guild.contextmenu.addbutton("Copy Guild id",function(this:Guild){
@ -87,20 +83,20 @@ class Guild{
s1.options.push(new RoleList(permlist,this,this.updateRolePermissions.bind(this)));
settings.show();
}
constructor(json:guildjson|-1,owner:Localuser,member:memberjson|User|null){
if(json===-1||member===null){
constructor(json:guildjson|-1,owner:Localuser,member:memberjson|User){
if(json===-1){
super("@me");
return;
}
if(json.stickers.length){
console.log(json.stickers,":3");
}
super(json.id);
this.emojis = json.emojis;
this.owner=owner;
this.headers=this.owner.headers;
this.channels=[];
this.channelids={};
this.snowflake=new SnowFlake(json.id);
this.properties=json.properties;
this.roles=[];
this.roleids=new Map();
@ -203,7 +199,7 @@ class Guild{
full.show();
}
async leave(){
return fetch(this.info.api+"/users/@me/guilds/"+this.snowflake,{
return fetch(this.info.api+"/users/@me/guilds/"+this.id,{
method: "DELETE",
headers: this.headers
});
@ -351,7 +347,7 @@ class Guild{
full.show();
}
async delete(){
return fetch(this.info.api+"/guilds/"+this.snowflake+"/delete",{
return fetch(this.info.api+"/guilds/"+this.id+"/delete",{
method: "POST",
headers: this.headers,
});
@ -543,7 +539,7 @@ class Guild{
});
}
async createRole(name:string){
const fetched=await fetch(this.info.api+"/guilds/"+this.snowflake+"roles",{
const fetched=await fetch(this.info.api+"/guilds/"+this.id+"roles",{
method: "POST",
headers: this.headers,
body: JSON.stringify({
@ -563,7 +559,7 @@ class Guild{
role.permissions.allow=perms.allow;
role.permissions.deny=perms.deny;
await fetch(this.info.api+"/guilds/"+this.snowflake+"/roles/"+this.snowflake,{
await fetch(this.info.api+"/guilds/"+this.id+"/roles/"+role.id,{
method: "PATCH",
headers: this.headers,
body: JSON.stringify({

View file

@ -106,8 +106,7 @@ class Localuser{
if(guild===undefined){
continue;
}
const guildid=guild.snowflake;
(this.guildids.get(guildid.id) as Guild).channelids[thing.channel_id].readStateInfo(thing);
guild.channelids[thing.channel_id].readStateInfo(thing);
}
for(const thing of ready.d.relationships){
const user=new User(thing.user,this);

View file

@ -11,7 +11,7 @@ import{ SnowFlake }from"./snowflake.js";
import{ memberjson, messagejson }from"./jsontypes.js";
import{Emoji}from"./emoji.js";
class Message{
class Message extends SnowFlake{
static contextmenu=new Contextmenu<Message,undefined>("message menu");
owner:Channel;
headers:Localuser["headers"];
@ -20,7 +20,6 @@ class Message{
mentions:User[];
mention_roles:Role[];
attachments:File[];//probably should be its own class tbh, should be Attachments[]
snowflake:SnowFlake;
message_reference;
type:number;
timestamp:number;
@ -43,9 +42,6 @@ class Message{
div:HTMLDivElement|undefined;
member:Member|undefined;
reactions:messagejson["reactions"];
get id(){
return this.snowflake.id;
}
static setup(){
this.del=new Promise(_=>{
this.resolve=_;
@ -82,6 +78,7 @@ class Message{
});
}
constructor(messagejson:messagejson,owner:Channel){
super(messagejson.id);
this.owner=owner;
this.headers=this.owner.headers;
this.giveData(messagejson);
@ -119,7 +116,6 @@ class Message{
this.content=new MarkDown(messagejson[thing],this.channel);
continue;
}else if(thing ==="id"){
this.snowflake=new SnowFlake(messagejson.id);
continue;
}else if(thing==="member"){
Member.new(messagejson.member as memberjson,this.guild).then(_=>{
@ -161,7 +157,7 @@ class Message{
func();
}
canDelete(){
return this.channel.hasPermission("MANAGE_MESSAGES")||this.author.snowflake===this.localuser.user.snowflake;
return this.channel.hasPermission("MANAGE_MESSAGES")||this.author===this.localuser.user;
}
get channel(){
return this.owner;
@ -206,14 +202,14 @@ class Message{
return build;
}
async edit(content){
return await fetch(this.info.api+"/channels/"+this.channel.snowflake+"/messages/"+this.id,{
return await fetch(this.info.api+"/channels/"+this.channel.id+"/messages/"+this.id,{
method: "PATCH",
headers: this.headers,
body: JSON.stringify({content})
});
}
delete(){
fetch(`${this.info.api}/channels/${this.channel.snowflake}/messages/${this.id}`,{
fetch(`${this.info.api}/channels/${this.channel.id}/messages/${this.id}`,{
headers: this.headers,
method: "DELETE",
});
@ -381,7 +377,7 @@ class Message{
const newt=(new Date(this.timestamp).getTime())/1000;
current=(newt-old)>600;
}
const combine=(premessage?.author?.snowflake!=this.author.snowflake)||(current)||this.message_reference;
const combine=(premessage?.author!=this.author)||(current)||this.message_reference;
if(combine){
const pfp=this.author.buildpfp();
this.author.bind(pfp,this.guild,false);
@ -567,7 +563,7 @@ class Message{
}
buildhtml(premessage?:Message|undefined):HTMLElement{
if(this.div){
console.error(`HTML for ${this.snowflake} already exists, aborting`);return this.div;
console.error(`HTML for ${this.id} already exists, aborting`);return this.div;
}
try{
const div=document.createElement("div");

View file

@ -4,11 +4,10 @@ import{Localuser}from"./localuser.js";
import{Guild}from"./guild.js";
import{ SnowFlake }from"./snowflake.js";
import{ rolesjson }from"./jsontypes.js";
class Role{
class Role extends SnowFlake{
permissions:Permissions;
owner:Guild;
color:number;
readonly snowflake:SnowFlake;
name:string;
info:Guild["info"];
hoist:boolean;
@ -16,15 +15,12 @@ class Role{
mentionable:boolean;
unicode_emoji:string;
headers:Guild["headers"];
get id(){
return this.snowflake.id;
}
constructor(json:rolesjson, owner:Guild){
super(json.id);
this.headers=owner.headers;
this.info=owner.info;
for(const thing of Object.keys(json)){
if(thing==="id"){
this.snowflake=new SnowFlake(json.id);
continue;
}
this[thing]=json[thing];

View file

@ -1,13 +1,16 @@
class SnowFlake{
abstract class SnowFlake{
public readonly id:string;
constructor(id:string){
this.id=id;
}
getUnixTime():number{
return SnowFlake.stringToUnixTime(this.id);
}
static stringToUnixTime(str:string){
try{
return Number((BigInt(this.id)>>22n)+1420070400000n);
return Number((BigInt(str)>>22n)+1420070400000n);
}catch{
console.error(`The ID is corrupted, it's ${this.id} when it should be some number.`);
console.error(`The ID is corrupted, it's ${str} when it should be some number.`);
return 0;
}
}

View file

@ -7,10 +7,9 @@ import{Guild}from"./guild.js";
import{ SnowFlake }from"./snowflake.js";
import{ presencejson, userjson }from"./jsontypes.js";
class User{
class User extends SnowFlake{
owner:Localuser;
hypotheticalpfp:boolean;
snowflake:SnowFlake;
avatar:string|null;
username:string;
nickname:string|null=null;
@ -64,9 +63,6 @@ class User{
return"offline";
}
}
get id(){
return this.snowflake.id;
}
static contextmenu=new Contextmenu<User,Member|undefined>("User Menu");
static setUpContextMenu(){
this.contextmenu.addbutton("Copy user id",function(this:User){
@ -142,6 +138,7 @@ class User{
return this.owner;
}
constructor(userjson:userjson,owner:Localuser,dontclone=false){
super(userjson.id);
this.owner=owner;
if(!owner){
console.error("missing localuser");
@ -153,7 +150,6 @@ class User{
continue;
}
if(thing === "id"){
this.snowflake=new SnowFlake(userjson[thing]);
continue;
}
this[thing]=userjson[thing];