seyfert
Version:
The most advanced framework for discord bots
101 lines (100 loc) • 4.64 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ThreadShorter = void 0;
const __1 = require("../..");
const structures_1 = require("../../structures");
const types_1 = require("../../types");
const base_1 = require("./base");
class ThreadShorter extends base_1.BaseShorter {
/**
* Creates a new thread in the channel (only guild based channels).
* @param channelId The ID of the parent channel.
* @param reason The reason for unpinning the message.
* @returns A promise that resolves when the thread is succesfully created.
*/
async create(channelId, body, reason) {
let thread;
if ('message' in body || 'files' in body) {
const { message, files, ...rest } = body;
const parsedFiles = files ? await (0, __1.resolveFiles)(files) : undefined;
const transformedBody = structures_1.MessagesMethods.transformMessageBody(message ?? {}, parsedFiles, this.client);
thread = await this.client.proxy.channels(channelId).threads.post({
body: {
...rest,
message: transformedBody,
},
files: parsedFiles,
reason,
});
}
else
thread = await this.client.proxy.channels(channelId).threads.post({ body, reason });
await this.client.cache.channels?.setIfNI(__1.CacheFrom.Rest, 'Guilds', thread.id, thread.guild_id, thread);
return (0, structures_1.channelFrom)(thread, this.client);
}
async fromMessage(channelId, messageId, options) {
const { reason, ...body } = options;
const thread = await this.client.proxy.channels(channelId).messages(messageId).threads.post({ body, reason });
await this.client.cache.channels?.setIfNI(__1.CacheFrom.Rest, 'Guilds', thread.id, thread.guild_id, thread);
return await (0, structures_1.channelFrom)(thread, this.client);
}
join(threadId) {
return this.client.proxy.channels(threadId)['thread-members']('@me').put();
}
leave(threadId) {
return this.client.proxy.channels(threadId)['thread-members']('@me').delete();
}
async lock(threadId, locked = true, reason) {
return this.edit(threadId, { locked }, reason);
}
async edit(threadId, body, reason) {
return (await this.client.channels.edit(threadId, body, { reason }));
}
removeMember(threadId, memberId) {
return this.client.proxy.channels(threadId)['thread-members'](memberId).delete();
}
fetchMember(threadId, memberId, with_member) {
return this.client.proxy.channels(threadId)['thread-members'](memberId).get({
query: {
with_member,
},
});
}
addMember(threadId, memberId) {
return this.client.proxy.channels(threadId)['thread-members'](memberId).put();
}
listMembers(threadId, query) {
return this.client.proxy.channels(threadId)['thread-members'].get({ query });
}
async listArchived(channelId, type, query) {
const data = await this.client.proxy.channels(channelId).threads.archived[type].get({ query });
return {
threads: data.threads.map(thread => (0, structures_1.channelFrom)(thread, this.client)),
members: data.members,
hasMore: data.has_more,
};
}
async listGuildActive(guildId, force = false) {
if (!force) {
const cached = await this.client.cache.channels?.valuesRaw(guildId);
if (cached)
return cached
.filter(x => [types_1.ChannelType.PublicThread, types_1.ChannelType.PrivateThread, types_1.ChannelType.AnnouncementThread].includes(x.type))
.map(x => (0, structures_1.channelFrom)(x, this.client));
}
const data = await this.client.proxy.guilds(guildId).threads.active.get();
return Promise.all(data.threads.map(async (thread) => {
await this.client.cache.channels?.setIfNI(__1.CacheFrom.Rest, 'Guilds', thread.id, guildId, thread);
return (0, structures_1.channelFrom)(thread, this.client);
}));
}
async listJoinedArchivedPrivate(channelId, query) {
const data = await this.client.proxy.channels(channelId).users('@me').threads.archived.private.get({ query });
return {
threads: data.threads.map(thread => (0, structures_1.channelFrom)(thread, this.client)),
members: data.members,
hasMore: data.has_more,
};
}
}
exports.ThreadShorter = ThreadShorter;