diff --git a/.dist/localuser.js b/.dist/localuser.js index 2a3fc87..e221584 100644 --- a/.dist/localuser.js +++ b/.dist/localuser.js @@ -305,15 +305,35 @@ class Localuser { break; case "MESSAGE_DELETE": console.log(temp.d); - SnowFlake.getSnowFlakeFromID(temp.d.id, Message).getObject().deleteEvent(); + temp.d.guild_id ??= "@me"; + const guild = this.guildids.get(temp.d.guild_id); + if (guild) { + const channel = guild.channelids[temp.d.guild_id]; + if (channel) { + const message = channel.messages.get(temp.d.id); + if (message) { + message.deleteEvent(); + } + } + } break; case "READY": this.gottenReady(temp); break; - case "MESSAGE_UPDATE": - const message = SnowFlake.getSnowFlakeFromID(temp.d.id, Message).getObject(); - message.giveData(temp.d); + case "MESSAGE_UPDATE": { + temp.d.guild_id ??= "@me"; + const guild = this.guildids.get(temp.d.guild_id); + if (guild) { + const channel = guild.channelids[temp.d.guild_id]; + if (channel) { + const message = channel.messages.get(temp.d.id); + if (message) { + message.giveData(temp.d); + } + } + } break; + } case "TYPING_START": if (this.initialized) { this.typingStart(temp); diff --git a/tsconfig.json b/tsconfig.json index 71aba3f..e59ead1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "removeComments": false, "noImplicitThis":true, "useUnknownInCatchVariables":true, - "strictNullChecks":false + "strictNullChecks":true }, "include": [ "./webpage/*.ts" diff --git a/webpage/channel.ts b/webpage/channel.ts index a6e8048..371b0ac 100644 --- a/webpage/channel.ts +++ b/webpage/channel.ts @@ -10,7 +10,7 @@ import { Settings } from "./settings.js"; import { Role,RoleList } from "./role.js"; import {InfiniteScroller} from "./infiniteScroller.js"; import { SnowFlake } from "./snowflake.js"; -import { channeljson, messagejson, readyjson } from "./jsontypes.js"; +import { channeljson, messageCreateJson, messagejson, readyjson } from "./jsontypes.js"; import { MarkDown } from "./markdown.js"; declare global { @@ -994,7 +994,7 @@ class Channel{ }); } } - messageCreate(messagep:any):void{ + messageCreate(messagep:messageCreateJson):void{ if(!this.hasPermission("VIEW_CHANNEL")){return} const messagez=new Message(messagep.d,this); this.lastmessage=messagez; diff --git a/webpage/jsontypes.ts b/webpage/jsontypes.ts index 13622f7..17a89bd 100644 --- a/webpage/jsontypes.ts +++ b/webpage/jsontypes.ts @@ -1,6 +1,6 @@ type readyjson={ - op:number; - t:string; + op:0; + t:"READY"; s:number; d:{ v:number; @@ -341,4 +341,59 @@ type presencejson={ afk: boolean, user?:userjson, } -export {readyjson,dirrectjson,channeljson,guildjson,rolesjson,userjson,memberjson,mainuserjson,messagejson,filejson,embedjson,emojijson,presencejson}; +type messageCreateJson={ + op:0, + d:{ + guild_id?:string, + channel_id?:string, + }&messagejson, + s:number, + t:"MESSAGE_CREATE" +} +type wsjson={ + op:0, + d:any, + s:number, + t:"TYPING_START"|"USER_UPDATE"|"CHANNEL_UPDATE"|"CHANNEL_CREATE"|"CHANNEL_DELETE"|"GUILD_DELETE"|"GUILD_CREATE"|"MESSAGE_REACTION_ADD"|"MESSAGE_REACTION_REMOVE"|"MESSAGE_REACTION_REMOVE_ALL"|"MESSAGE_REACTION_REMOVE_EMOJI" +}|{ + op:0, + t:"GUILD_MEMBERS_CHUNK", + d:memberChunk +}|{ + op:0, + d:{ + id:string, + guild_id?:string, + channel_id:string + }, + s:number, + t:"MESSAGE_DELETE" +}|{ + op:0, + d:{ + guild_id?:string, + channel_id:string + }&messagejson, + s:number, + t:"MESSAGE_UPDATE" +}|messageCreateJson|readyjson|{ + op:11, + s:undefined, + d:{} +}|{ + op:10, + s:undefined, + d:{ + heartbeat_interval:number + } +} +type memberChunk={ + guild_id: string, + nonce: string, + members: memberjson[], + presences: presencejson[], + chunk_index: number, + chunk_count: number, + not_found: string[] +} +export {readyjson,dirrectjson,channeljson,guildjson,rolesjson,userjson,memberjson,mainuserjson,messagejson,filejson,embedjson,emojijson,presencejson,wsjson,messageCreateJson,memberChunk}; diff --git a/webpage/localuser.ts b/webpage/localuser.ts index d004fed..b345b2c 100644 --- a/webpage/localuser.ts +++ b/webpage/localuser.ts @@ -7,7 +7,7 @@ import {Dialog} from "./dialog.js"; import {getapiurls, getBulkInfo, setTheme, Specialuser} from "./login.js"; import { SnowFlake } from "./snowflake.js"; import { Message } from "./message.js"; -import { channeljson, memberjson, presencejson, readyjson } from "./jsontypes.js"; +import { channeljson, memberChunk, memberjson, messageCreateJson, presencejson, readyjson, wsjson } from "./jsontypes.js"; import { Member } from "./member.js"; import { FormError, Settings } from "./settings.js"; import { MarkDown } from "./markdown.js"; @@ -220,7 +220,7 @@ class Localuser{ if(temp.op===0&&temp.t==="READY"){ returny(); } - await this.handleEvent(temp); + await this.handleEvent(temp as wsjson); }catch(e){ console.error(e); }finally{ @@ -300,7 +300,7 @@ class Localuser{ await promise; return; } - async handleEvent(temp){ + async handleEvent(temp:wsjson){ console.debug(temp); if (temp.s) this.lastSequence=temp.s; if(temp.op==0){ @@ -312,15 +312,38 @@ class Localuser{ break; case "MESSAGE_DELETE": console.log(temp.d); - SnowFlake.getSnowFlakeFromID(temp.d.id,Message).getObject().deleteEvent(); + temp.d.guild_id??="@me"; + const guild=this.guildids.get(temp.d.guild_id); + if(guild){ + const channel=guild.channelids[temp.d.guild_id] + if(channel){ + const message=channel.messages.get(temp.d.id); + if(message){ + message.deleteEvent(); + } + } + + } + break; case "READY": this.gottenReady(temp as readyjson); break; - case "MESSAGE_UPDATE": - const message=SnowFlake.getSnowFlakeFromID(temp.d.id,Message).getObject(); - message.giveData(temp.d); + case "MESSAGE_UPDATE":{ + temp.d.guild_id??="@me"; + const guild=this.guildids.get(temp.d.guild_id); + if(guild){ + const channel=guild.channelids[temp.d.guild_id] + if(channel){ + const message=channel.messages.get(temp.d.id); + if(message){ + message.giveData(temp.d); + } + } + + } break; + } case "TYPING_START": if(this.initialized){ this.typingStart(temp); @@ -400,7 +423,7 @@ class Localuser{ const messageReactionRemoveEmoji = SnowFlake.getSnowFlakeFromID(temp.d.message_id, Message).getObject() messageReactionRemoveEmoji.reactionRemoveEmoji(temp.d.emoji) } - break + break; case "GUILD_MEMBERS_CHUNK": this.gotChunk(temp.d); break; @@ -702,7 +725,7 @@ class Localuser{ }) content.appendChild(guilds); } - messageCreate(messagep):void{ + messageCreate(messagep:messageCreateJson):void{ messagep.d.guild_id??="@me"; const guild=this.guildids.get(messagep.d.guild_id); if(!guild) return; @@ -1320,7 +1343,7 @@ class Localuser{ fetchingmembers:Map=new Map(); noncemap:Mapvoid>=new Map(); noncebuild:Map=new Map(); - async gotChunk(chunk:{chunk_index:number,chunk_count:number,nonce:string,not_found?:string[],members?:memberjson[],presences:presencejson[]}){ + async gotChunk(chunk:memberChunk){ for(const thing of chunk.presences){ if(thing.user){ this.presences.set(thing.user.id,thing);