Skip to content

Commit a6f49b9

Browse files
authored
feat: add call_started system message (#120)
1 parent 1e1b738 commit a6f49b9

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

src/classes/SystemMessage.ts

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import type { SystemMessage as APISystemMessage } from "stoat-api";
1+
import type { SystemMessage as APISystemMessage, Message as APIMessage } from "stoat-api";
22

33
import type { Client } from "../Client.js";
44

55
import type { User } from "./User.js";
66
import { 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+
}

src/hydration/message.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const messageHydration: Hydrate<Merge<Message>, HydratedMessage> = {
5353
: undefined,
5454
content: (message) => message.content!,
5555
systemMessage: (message, ctx) =>
56-
SystemMessage.from(ctx as Client, message.system!),
56+
SystemMessage.from(ctx as Client, message, message.system!),
5757
attachments: (message, ctx) =>
5858
message.attachments!.map((file) => new File(ctx as Client, file)),
5959
editedAt: (message) => new Date(message.edited!),
@@ -98,4 +98,4 @@ export enum MessageFlags {
9898
* This cannot be true if MentionsEveryone is true
9999
*/
100100
MentionsOnline = 3,
101-
}
101+
}

0 commit comments

Comments
 (0)