1- import type { SystemMessage as APISystemMessage } from "stoat-api" ;
1+ import type { SystemMessage as APISystemMessage , Message as APIMessage } from "stoat-api" ;
22
33import type { Client } from "../Client.js" ;
44
55import type { User } from "./User.js" ;
66import { Message } from "./index.js" ;
7+ import { decodeTime } from "ulid" ;
78
89/**
910 * System Message
@@ -28,7 +29,7 @@ export abstract class SystemMessage {
2829 * @param embed Data
2930 * @returns System Message
3031 */
31- static from ( client : Client , message : APISystemMessage ) : SystemMessage {
32+ static from ( client : Client , parent : APIMessage , message : APISystemMessage ) : SystemMessage {
3233 switch ( message . type ) {
3334 case "text" :
3435 return new TextSystemMessage ( client , message ) ;
@@ -50,6 +51,8 @@ export abstract class SystemMessage {
5051 case "message_pinned" :
5152 case "message_unpinned" :
5253 return new MessagePinnedSystemMessage ( client , message ) ;
54+ case "call_started" :
55+ return new CallStartedSystemMessage ( client , parent , message ) ;
5356 default :
5457 return new TextSystemMessage ( client , {
5558 type : "text" ,
@@ -272,3 +275,37 @@ export class MessagePinnedSystemMessage extends SystemMessage {
272275 return this . client ! . users . get ( this . byId ) ;
273276 }
274277}
278+
279+ /**
280+ * Call Started System Message
281+ */
282+ export class CallStartedSystemMessage extends SystemMessage {
283+ readonly byId : string ;
284+ readonly startedAt : Date ;
285+ readonly finishedAt : Date | null ;
286+ /**
287+ * Construct System Message
288+ * @param client Client
289+ * @param parent Message
290+ * @param systemMessage System Message
291+ */
292+ constructor (
293+ client : Client ,
294+ parent : APIMessage ,
295+ systemMessage : APISystemMessage & {
296+ type : "call_started" ;
297+ } ,
298+ ) {
299+ super ( client , systemMessage . type ) ;
300+ this . byId = systemMessage . by ;
301+ this . startedAt = new Date ( decodeTime ( parent . _id ) ) ;
302+ this . finishedAt = systemMessage . finished_at != null ? new Date ( systemMessage . finished_at ) : null ;
303+ }
304+
305+ /**
306+ * User that started the call
307+ */
308+ get by ( ) : User | undefined {
309+ return this . client ! . users . get ( this . byId ) ;
310+ }
311+ }
0 commit comments