2023-04-02 09:49:47 -04:00
import author from './User.js' ;
2023-04-01 21:49:27 -04:00
import axios from 'axios' ;
2023-04-04 22:06:12 -04:00
import { Channel } from '../guilds/Channel.js' ;
2023-03-19 18:02:21 -04:00
2023-04-01 21:49:27 -04:00
export class message {
2023-03-19 18:02:21 -04:00
/** @type {author} */
2023-03-18 18:02:17 -04:00
author ;
2023-04-01 21:49:27 -04:00
/** @type {String} */
2023-03-18 18:02:17 -04:00
channel _id ;
/** @type {Object[]} */
mentions ;
2023-03-19 18:02:21 -04:00
/** @type {Object[]} */
mention _roles ;
/** @type {Boolean} */
mention _everyone ;
/** @type {message} */
referenced _message ;
/** @type {String} */
timestamp ;
/** @type {Boolean} */
pinned ;
2023-03-18 18:02:17 -04:00
/** @type {Object} */
member ;
/** @type {String} */
id ;
/** @type {Object} */
content ;
/** @type {Object[]} */
attachments ;
2023-03-19 18:02:21 -04:00
/** @type {Object[]} */
embeds ;
2023-04-01 21:49:27 -04:00
/** @type {Guild} */
guild ;
2023-03-18 18:02:17 -04:00
/** @type {String} */
guild _id ;
/** @type {Object} */
type ;
2023-03-19 18:02:21 -04:00
/** @type {Channel} */
2023-04-01 21:49:27 -04:00
channel ;
2023-03-19 18:02:21 -04:00
/** @type {String} */
# token ;
/**
* @param {String} content
* @returns {Promise<message>}
*/
reply ( inp ) {
return new Promise ( async ( resolve , reject ) => {
const refObj = {
message _id : this . id ,
channel _id : this . channel . id ,
guild _id : this . guild _id ,
fail _if _not _exists : false //when sending, whether to error if the referenced message doesn't exist instead of sending as a normal (non-reply) message, default true
}
const toSend = ( typeof inp == 'string' ) ? { content : inp } : inp ;
toSend [ 'message_reference' ] = refObj ;
resolve ( await this . channel . send ( toSend ) ) ;
} ) ;
}
delete ( ) {
return new Promise ( async ( resolve , reject ) => {
try {
const config = {
headers : {
Authorization : this . # token
}
}
const response = await axios . delete ( ` https://discord.com/api/channels/ ${ this . channel . id } /messages/ ${ this . id } ` , config ) ;
resolve ( response . data ) ;
} catch ( err ) {
reject ( err ) ;
}
} )
}
/**
* @param {{content: String, embeds: [Object]} | String} inp
*/
async edit ( inp ) {
return new Promise ( async ( resolve , reject ) => {
const newMsg = ( typeof inp == "string" ) ? { content : inp } : inp ;
const config = {
headers : {
Authorization : this . # token
}
}
axios . patch ( ` https://discord.com/api/channels/ ${ this . channel . id } /messages/ ${ this . id } ` , newMsg , config ) . then ( ( response ) => {
resolve ( response . data ) ;
} ) . catch ( ( err ) => {
reject ( ` REQUEST FAILED WITH CODE ${ err . response . data . code } AND THE FOLLOWING REASON: \n ${ err . response . data . message } ` ) ;
} ) ;
} ) ;
}
2023-03-18 18:02:17 -04:00
/**
* @param {Object} msgRaw
*/
2023-04-01 21:49:27 -04:00
constructor ( msgRaw , token , guild ) {
2023-03-19 18:02:21 -04:00
this . # token = token ;
2023-04-02 09:49:47 -04:00
this . guild = guild ;
2023-03-19 18:02:21 -04:00
2023-03-18 18:02:17 -04:00
for ( const k in this ) {
if ( msgRaw [ k ] != undefined ) {
if ( k == 'type' ) {
this . type = ( msgRaw [ 'guild_id' ] ) ? msgRaw [ k ] : 1 ;
2023-03-19 18:02:21 -04:00
}
else if ( k == "author" ) {
this [ k ] = new author ( msgRaw [ k ] ) ;
}
else {
if ( k == 'channel_id' ) {
2023-04-02 09:49:47 -04:00
this . channel = new Channel ( { id : msgRaw [ k ] } , this . guild , this . # token ) ;
2023-03-19 18:02:21 -04:00
}
2023-03-18 18:02:17 -04:00
this [ k ] = msgRaw [ k ] ;
}
}
2023-03-19 18:02:21 -04:00
}
2023-03-18 18:02:17 -04:00
}
}
2023-04-01 21:49:27 -04:00
export { messageChannelTypes } from './messageChannelTypes.js' ;