commit
						8e49dc4306
					
				
					 4 changed files with 47 additions and 2 deletions
				
			
		|  | @ -3,6 +3,7 @@ import { Channel } from '../structures/channel.ts' | |||
| import { Embed } from '../structures/embed.ts' | ||||
| import { Message } from '../structures/message.ts' | ||||
| import type { TextChannel } from '../structures/textChannel.ts' | ||||
| import type { User } from '../structures/user.ts' | ||||
| import type { | ||||
|   ChannelPayload, | ||||
|   GuildChannelPayload, | ||||
|  | @ -21,6 +22,21 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> { | |||
|     super(client, 'channels', Channel) | ||||
|   } | ||||
| 
 | ||||
|   async getUserDM(user: User | string): Promise<string | undefined> { | ||||
|     return this.client.cache.get( | ||||
|       'user_dms', | ||||
|       typeof user === 'string' ? user : user.id | ||||
|     ) | ||||
|   } | ||||
| 
 | ||||
|   async setUserDM(user: User | string, id: string): Promise<void> { | ||||
|     await this.client.cache.set( | ||||
|       'user_dms', | ||||
|       typeof user === 'string' ? user : user.id, | ||||
|       id | ||||
|     ) | ||||
|   } | ||||
| 
 | ||||
|   // Override get method as Generic
 | ||||
|   async get<T = Channel>(key: string): Promise<T | undefined> { | ||||
|     const data = await this._get(key) | ||||
|  | @ -99,7 +115,7 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> { | |||
|     } | ||||
| 
 | ||||
|     const payload: any = { | ||||
|       content: content, | ||||
|       content: content ?? option?.content, | ||||
|       embed: option?.embed, | ||||
|       file: option?.file, | ||||
|       files: option?.files, | ||||
|  | @ -165,7 +181,7 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> { | |||
|     const newMsg = await this.client.rest.api.channels[channelID].messages[ | ||||
|       typeof message === 'string' ? message : message.id | ||||
|     ].patch({ | ||||
|       content: text, | ||||
|       content: text ?? option?.content, | ||||
|       embed: option?.embed !== undefined ? option.embed.toJSON() : undefined, | ||||
|       // Cannot upload new files with Message
 | ||||
|       // file: option?.file,
 | ||||
|  |  | |||
|  | @ -6,6 +6,8 @@ import { ImageURL } from './cdn.ts' | |||
| import type { ImageSize, ImageFormats } from '../types/cdn.ts' | ||||
| import { DEFAULT_USER_AVATAR, USER_AVATAR } from '../types/endpoint.ts' | ||||
| import type { DMChannel } from './dmChannel.ts' | ||||
| import { AllMessageOptions } from './textChannel.ts' | ||||
| import { Message } from './message.ts' | ||||
| 
 | ||||
| export class User extends SnowflakeBase { | ||||
|   id: string | ||||
|  | @ -94,4 +96,25 @@ export class User extends SnowflakeBase { | |||
|   async createDM(): Promise<DMChannel> { | ||||
|     return this.client.createDM(this) | ||||
|   } | ||||
| 
 | ||||
|   async resolveDM(): Promise<DMChannel> { | ||||
|     const dmID = await this.client.channels.getUserDM(this.id) | ||||
|     const dm = | ||||
|       (dmID !== undefined | ||||
|         ? await this.client.channels.get<DMChannel>(dmID) | ||||
|         : undefined) ?? | ||||
|       (await this.createDM().then((chan) => | ||||
|         this.client.channels.setUserDM(this.id, chan.id).then(() => chan) | ||||
|       )) | ||||
|     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
 | ||||
|     return dm! | ||||
|   } | ||||
| 
 | ||||
|   async send( | ||||
|     content: string | AllMessageOptions, | ||||
|     options?: AllMessageOptions | ||||
|   ): Promise<Message> { | ||||
|     const dm = await this.resolveDM() | ||||
|     return dm.send(content, options) | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -204,6 +204,7 @@ export interface AllowedMentionsPayload { | |||
| } | ||||
| 
 | ||||
| export interface MessageOptions { | ||||
|   content?: string | ||||
|   tts?: boolean | ||||
|   embed?: Embed | ||||
|   file?: MessageAttachment | ||||
|  |  | |||
|  | @ -256,6 +256,11 @@ client.on('messageCreate', async (msg: Message) => { | |||
|     msg.reply(buf) | ||||
|   } else if (msg.content === '!addrole') { | ||||
|     msg.member?.roles.add('837255383759716362') | ||||
|   } else if (msg.content === '!dm') { | ||||
|     console.log('wtf') | ||||
|     msg.author.send('UwU').then((m) => { | ||||
|       msg.reply(`Done, ${m.id}`) | ||||
|     }) | ||||
|   } else if (msg.content === '!timer') { | ||||
|     msg.channel.send('3...').then((msg) => { | ||||
|       setTimeout(() => { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue