diff --git a/packages/core/src/structures/channels.ts b/packages/core/src/structures/channels.ts index a3c24f4..f98dd25 100644 --- a/packages/core/src/structures/channels.ts +++ b/packages/core/src/structures/channels.ts @@ -9,7 +9,7 @@ import type { PermissionsOverwrites } from '../utils/util'; import { urlToBase64 } from '../utils/url-to-base-64'; /** Classes and routes */ -import type { +import { DiscordChannel, DiscordInvite, DiscordInviteMetadata, @@ -22,7 +22,8 @@ import type { VideoQualityModes, GetReactions, GetMessagesOptions, - ListArchivedThreads } from '@biscuitland/api-types'; + ListArchivedThreads, + USER_DM} from '@biscuitland/api-types'; import { CHANNEL, CHANNEL_PINS, @@ -102,8 +103,8 @@ export abstract class BaseChannel implements Model { return this.type === ChannelTypes.GuildStageVoice; } - async fetch(): Promise { - const channel = await this.session.rest.get(CHANNEL(this.id)); + async fetch(channelId?: Snowflake): Promise { + const channel = await this.session.rest.get(CHANNEL(channelId ?? this.id)); return ChannelFactory.from(this.session, channel); } @@ -684,6 +685,12 @@ export class DMChannel extends BaseChannel implements Model { return new DMChannel(this.session, channel); } + + async open(userId: Snowflake): Promise { + const channel = await this.session.rest.post(USER_DM(), { recipient_id: userId}); + + return new DMChannel(this.session, channel); + } } export interface DMChannel extends Omit, Omit {} diff --git a/packages/core/src/structures/guilds.ts b/packages/core/src/structures/guilds.ts index 1a87a56..a29ae68 100644 --- a/packages/core/src/structures/guilds.ts +++ b/packages/core/src/structures/guilds.ts @@ -58,7 +58,7 @@ import { CHANNEL, GUILD_CHANNELS, } from '@biscuitland/api-types'; -import { ChannelFactory, GuildChannel, ReturnThreadsArchive, ThreadChannel, Channel } from './channels'; +import { ChannelFactory, GuildChannel, ReturnThreadsArchive, ThreadChannel, ChannelInGuild } from './channels'; import { Member, ThreadMember } from './members'; import { Role } from './role'; import { GuildEmoji } from './emojis'; @@ -1216,16 +1216,16 @@ export class Guild extends BaseGuild implements Model { return new GuildPreview(this.session, preview); } - async fetchChannel(channelID: string): Promise { - const channel = await this.session.rest.get(CHANNEL(channelID)); + async fetchChannel(channelId: string): Promise { + const channel = await this.session.rest.get(CHANNEL(channelId)); - return ChannelFactory.from(this.session, channel); + return ChannelFactory.fromGuildChannel(this.session, channel); } - async fetchChannels(): Promise { + async fetchChannels(): Promise { const channels = await this.session.rest.get(GUILD_CHANNELS(this.id)); - return channels.map(channel => ChannelFactory.from(this.session, channel)); + return channels.map(channel => ChannelFactory.fromGuildChannel(this.session, channel)); } /** fetches a member */ diff --git a/packages/core/src/structures/user.ts b/packages/core/src/structures/user.ts index 84b4c69..76bc5ff 100644 --- a/packages/core/src/structures/user.ts +++ b/packages/core/src/structures/user.ts @@ -5,6 +5,7 @@ import type { DiscordUser, PremiumTypes, UserFlags } from '@biscuitland/api-type import type { ImageFormat, ImageSize } from '../utils/util'; import { USER, USER_AVATAR, USER_DEFAULT_AVATAR } from '@biscuitland/api-types'; import { Util } from '../utils/util'; +import { DMChannel } from './channels'; export type AvatarOptions = { format?: ImageFormat; @@ -113,6 +114,10 @@ export class User implements Model { return Util.formatImageURL(url, options.size ?? 128, options.format); } + openDM(): Promise { + return DMChannel.prototype.open.call({ session: this.session }, this.id); + } + toString(): string { return `<@${this.id}>`; }