diff --git a/package.json b/package.json index 7f810c74..2f7e82a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "revolt.js", - "version": "3.0.1-beta.3", + "version": "3.0.1-beta.4", "main": "dist/index.js", "repository": "https://gitlab.insrt.uk/revolt/revolt.js", "author": "Paul Makles ", diff --git a/src/api/channels.ts b/src/api/channels.ts index 196c6fce..67659c1b 100644 --- a/src/api/channels.ts +++ b/src/api/channels.ts @@ -38,4 +38,10 @@ export namespace Channels { nonce: string, users: string[] } + + export type FetchMessagesRequest = { + limit?: number, + before?: string, + after?: string + } } diff --git a/src/objects/Channel.ts b/src/objects/Channel.ts index 33dfeec5..282b9f95 100644 --- a/src/objects/Channel.ts +++ b/src/objects/Channel.ts @@ -50,7 +50,7 @@ export default abstract class Channel { return channel; } - async fetchMessage(client: Client, id: string, data?: Channels.Message): Promise { + async fetchMessage(id: string, data?: Channels.Message, fetchingMultiple?: boolean): Promise { let existing; if (existing = this.messages.get(id)) { if (data) { @@ -61,19 +61,30 @@ export default abstract class Channel { return existing; } - let message = new Message(client, this, data ?? (await client.Axios.get(`/channels/${this.id}/messages/${id}`)).data); + let message = new Message(this.client, this, data ?? (await this.client.Axios.get(`/channels/${this.id}/messages/${id}`)).data); await message.$sync(); this.messages.set(id, message); - client.messages.set(id, message); - client.emit('create/message', message); + this.client.messages.set(id, message); + this.client.emit('create/message', message, fetchingMultiple); return message; } + async fetchMessages(params?: Channels.FetchMessagesRequest): Promise { + let res = await this.client.Axios.get(`/channels/${this.id}/messages`, { params }); + let messages = []; + + for (let entry of res.data) { + messages.push(await this.fetchMessage(entry.id, entry, true)); + } + + return messages; + } + async sendMessage(content: string, nonce: string = ulid()) { let res = await this.client.Axios.post(`/channels/${this.id}/messages`, { content, nonce }); let fire = !this.client.messages.has(res.data.id); - let message = await this.fetchMessage(this.client, res.data.id, res.data); + let message = await this.fetchMessage(res.data.id, res.data); fire && this.client.emit('message', message); return message; } diff --git a/src/tester.ts b/src/tester.ts index 37a2719a..f61640a4 100644 --- a/src/tester.ts +++ b/src/tester.ts @@ -10,6 +10,7 @@ client.once('ready', async () => { console.log(`Logged in as @${client.user?.username}`); // let channel = client.channels.values().next().value as Channel; + // console.log(await channel.fetchMessages()); // let message = await channel.sendMessage("epic!"); // await message.edit("pogger!"); // await message.delete(); diff --git a/src/websocket/client.ts b/src/websocket/client.ts index 5e3808f9..a508b153 100644 --- a/src/websocket/client.ts +++ b/src/websocket/client.ts @@ -96,7 +96,7 @@ export class WebSocketClient { case 'Message': { if (!this.client.messages.has(packet._id)) { let channel = await Channel.fetch(this.client, packet.channel); - let message = await channel.fetchMessage(this.client, packet._id, packet); + let message = await channel.fetchMessage(packet._id, packet); this.client.emit('message', message); } break;