diff --git a/package.json b/package.json index 4cbef52b..2f64a0f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "revolt.js", - "version": "4.3.3-alpha.12", + "version": "4.3.3-alpha.13", "main": "dist/index.js", "repository": "https://gitlab.insrt.uk/revolt/revolt.js", "author": "Paul Makles ", diff --git a/src/api/routes.ts b/src/api/routes.ts index 40f6754d..f0677374 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -410,7 +410,7 @@ type Routes = } | { // Search messages in a channel (optionally include users as well). - method: 'GET', + method: 'POST', route: `/channels/${Id}/search`, data: { query: string, diff --git a/src/maps/Channels.ts b/src/maps/Channels.ts index 3ed41101..a1406610 100644 --- a/src/maps/Channels.ts +++ b/src/maps/Channels.ts @@ -232,6 +232,40 @@ export default class Channels extends Collection { return res; } + /** + * Search for messages + * @param id ID of the target channel + * @param params Message searching route data + * @returns The messages + */ + async search(id: string, params?: Omit["data"], 'include_users'>) { + return await this.client.request('POST', `/channels/${id}/search` as '/channels/id/search', { params }) as Message[]; + } + + /** + * Search for messages including the users that sent them + * @param id ID of the target channel + * @param params Message searching route data + * @returns The messages + */ + async searchWithUsers(id: string, params?: Omit["data"], 'include_users'>, processUsers?: boolean) { + let res = await this.client.request('GET', `/channels/${id}/search` as '/channels/id/search', { params: { ...params, include_users: true } }) as { messages: Message[], users: User[], members: Servers.Member[] }; + + if (processUsers) { + for (let user of res.users) { + this.client.users.set(user); + } + + if (res.members) { + for (let member of res.members) { + this.client.servers.members.set(flattenMember(member)); + } + } + } + + return res; + } + /** * Fetch stale messages * @param id ID of the target channel