Now we can listen and send event
Co-Authored-By: Aki <71239005+AkiaCode@users.noreply.github.com> Co-Authored-By: Lee Hyun <ink0416@naver.com> Co-Authored-By: khk4912 <30457148+khk4912@users.noreply.github.com> Co-Authored-By: Choi Minseo <minseo0388@outlook.com> Co-Authored-By: Y <8479056+yky4589@users.noreply.github.com>
This commit is contained in:
parent
97b5c82023
commit
1d067a957c
28 changed files with 566 additions and 295 deletions
|
@ -12,8 +12,11 @@ module.exports = {
|
|||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: {
|
||||
ecmaVersion: 12,
|
||||
sourceType: 'module'
|
||||
sourceType: 'module',
|
||||
project: 'tsconfig.json'
|
||||
},
|
||||
plugins: ['@typescript-eslint'],
|
||||
rules: {}
|
||||
rules: {
|
||||
'@typescript-eslint/restrict-template-expressions': 'off'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
export const DISCORD_API_URL = 'https://discord.com/api'
|
||||
export const DISCORD_API_URL: string = 'https://discord.com/api'
|
||||
|
||||
export const DISCORD_GATEWAY_URL = 'wss://gateway.discord.gg'
|
||||
export const DISCORD_GATEWAY_URL: string = 'wss://gateway.discord.gg'
|
||||
|
||||
export const DISCORD_CDN_URL = 'https://cdn.discordapp.com'
|
||||
export const DISCORD_CDN_URL: string = 'https://cdn.discordapp.com'
|
||||
|
||||
export const DISCORD_API_VERSION = 8
|
||||
export const DISCORD_API_VERSION: number = 8
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
let caches: any = {}
|
||||
|
||||
const get = (cacheName: string, key: string) => {
|
||||
const get = (cacheName: string, key: string): any => {
|
||||
const gotCache: Map<string, any> = caches[cacheName]
|
||||
if (gotCache === undefined || !(gotCache instanceof Map)) {
|
||||
return undefined
|
||||
|
@ -10,7 +10,7 @@ const get = (cacheName: string, key: string) => {
|
|||
return gotMap
|
||||
}
|
||||
|
||||
const set = (cacheName: string, key: string, value: any) => {
|
||||
const set = (cacheName: string, key: string, value: any): any => {
|
||||
let gotCache: Map<string, any> = caches[cacheName]
|
||||
if (gotCache === undefined || !(gotCache instanceof Map)) {
|
||||
gotCache = caches[cacheName] = new Map<string, any>()
|
||||
|
@ -21,7 +21,7 @@ const set = (cacheName: string, key: string, value: any) => {
|
|||
return value
|
||||
}
|
||||
|
||||
const del = (cacheName: string, key: string) => {
|
||||
const del = (cacheName: string, key: string): boolean | undefined => {
|
||||
const gotCache: Map<string, any> = caches[cacheName]
|
||||
if (gotCache === undefined || !(gotCache instanceof Map)) {
|
||||
return
|
||||
|
@ -30,16 +30,17 @@ const del = (cacheName: string, key: string) => {
|
|||
return gotCache.delete(key)
|
||||
}
|
||||
|
||||
const deleteCache = (cacheName: string) => {
|
||||
const deleteCache = (cacheName: string): void => {
|
||||
const gotCache = caches[cacheName]
|
||||
if (gotCache === undefined) {
|
||||
return
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
||||
delete caches[cacheName]
|
||||
}
|
||||
|
||||
const resetCaches = () => {
|
||||
const resetCaches = (): void => {
|
||||
caches = {}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,25 +2,27 @@ import { User } from '../structures/user.ts'
|
|||
import { GatewayIntents } from '../types/gatewayTypes.ts'
|
||||
import { Gateway } from './gateway.ts'
|
||||
import { Rest } from './rest.ts'
|
||||
|
||||
import EventEmitter from 'https://deno.land/std@0.74.0/node/events.ts'
|
||||
/**
|
||||
* Discord Client.
|
||||
*/
|
||||
export class Client {
|
||||
export class Client extends EventEmitter {
|
||||
gateway?: Gateway
|
||||
rest?: Rest
|
||||
user?: User
|
||||
ping = 0
|
||||
token?: string
|
||||
|
||||
constructor () {}
|
||||
// constructor () {
|
||||
// super()
|
||||
// }
|
||||
|
||||
/**
|
||||
* This function is used for connect to discord.
|
||||
* @param token Your token. This is required.
|
||||
* @param intents Gateway intents in array. This is required.
|
||||
*/
|
||||
connect (token: string, intents: GatewayIntents[]) {
|
||||
connect (token: string, intents: GatewayIntents[]): void {
|
||||
this.token = token
|
||||
this.gateway = new Gateway(this, token, intents)
|
||||
}
|
||||
|
|
|
@ -14,6 +14,14 @@ import { GuildPayload } from '../types/guildTypes.ts'
|
|||
import { User } from '../structures/user.ts'
|
||||
import * as cache from './cache.ts'
|
||||
import { Guild } from '../structures/guild.ts'
|
||||
import { Channel } from '../structures/channel.ts'
|
||||
import { ChannelTypes } from '../types/channelTypes.ts'
|
||||
import { DMChannel } from '../structures/dmChannel.ts'
|
||||
import { GroupDMChannel } from '../structures/groupChannel.ts'
|
||||
import { GuildTextChannel } from '../structures/guildTextChannel.ts'
|
||||
import { VoiceChannel } from '../structures/guildVoiceChannel.ts'
|
||||
import { CategoryChannel } from '../structures/guildCategoryChannel.ts'
|
||||
import { NewsChannel } from '../structures/guildNewsChannel.ts'
|
||||
|
||||
/**
|
||||
* Handles Discord gateway connection.
|
||||
|
@ -27,13 +35,12 @@ class Gateway {
|
|||
intents: GatewayIntents[]
|
||||
connected = false
|
||||
initialized = false
|
||||
heartbeatInterval = 0
|
||||
heartbeatIntervalID?: number
|
||||
heartbeatCheckerIntervalID?: number
|
||||
sequenceID?: number
|
||||
sessionID?: string
|
||||
private heartbeatInterval = 0
|
||||
private heartbeatIntervalID?: number
|
||||
private sequenceID?: number
|
||||
private sessionID?: string
|
||||
lastPingTimestemp = 0
|
||||
heartbeatServerResponded = false
|
||||
private heartbeatServerResponded = false
|
||||
client: Client
|
||||
|
||||
constructor (client: Client, token: string, intents: GatewayIntents[]) {
|
||||
|
@ -41,6 +48,7 @@ class Gateway {
|
|||
this.intents = intents
|
||||
this.client = client
|
||||
this.websocket = new WebSocket(
|
||||
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
||||
`${DISCORD_GATEWAY_URL}/?v=${DISCORD_API_VERSION}&encoding=json`,
|
||||
[]
|
||||
)
|
||||
|
@ -51,11 +59,11 @@ class Gateway {
|
|||
this.websocket.onerror = this.onerror.bind(this)
|
||||
}
|
||||
|
||||
private onopen () {
|
||||
private onopen (): void {
|
||||
this.connected = true
|
||||
}
|
||||
|
||||
private onmessage (event: MessageEvent) {
|
||||
private onmessage (event: MessageEvent): void {
|
||||
let data = event.data
|
||||
if (data instanceof ArrayBuffer) {
|
||||
data = new Uint8Array(data)
|
||||
|
@ -75,7 +83,6 @@ class Gateway {
|
|||
this.heartbeatServerResponded = false
|
||||
} else {
|
||||
clearInterval(this.heartbeatIntervalID)
|
||||
clearInterval(this.heartbeatCheckerIntervalID)
|
||||
this.websocket.close()
|
||||
this.initWebsocket()
|
||||
return
|
||||
|
@ -94,16 +101,7 @@ class Gateway {
|
|||
this.sendIdentify()
|
||||
this.initialized = true
|
||||
} else {
|
||||
this.websocket.send(
|
||||
JSON.stringify({
|
||||
op: GatewayOpcodes.RESUME,
|
||||
d: {
|
||||
token: this.token,
|
||||
session_id: this.sessionID,
|
||||
seq: this.sequenceID
|
||||
}
|
||||
})
|
||||
)
|
||||
this.sendResume()
|
||||
}
|
||||
break
|
||||
|
||||
|
@ -113,7 +111,13 @@ class Gateway {
|
|||
break
|
||||
|
||||
case GatewayOpcodes.INVALID_SESSION:
|
||||
setTimeout(this.sendIdentify, 3000)
|
||||
// Because we know this gonna be bool
|
||||
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
||||
if (!d) {
|
||||
setTimeout(this.sendResume, 3000)
|
||||
} else {
|
||||
setTimeout(this.sendIdentify, 3000)
|
||||
}
|
||||
break
|
||||
|
||||
case GatewayOpcodes.DISPATCH:
|
||||
|
@ -126,9 +130,86 @@ class Gateway {
|
|||
this.client.user = new User(this.client, d.user)
|
||||
this.sessionID = d.session_id
|
||||
d.guilds.forEach((guild: GuildPayload) => {
|
||||
cache.set('guilds', guild.id, new Guild(this.client, guild))
|
||||
Guild.autoInit(this.client, {
|
||||
endpoint: 'guild',
|
||||
restURLfuncArgs: [guild.id]
|
||||
})
|
||||
})
|
||||
this.client.emit('ready')
|
||||
break
|
||||
case GatewayEvents.Channel_Create: {
|
||||
let channel: Channel | undefined
|
||||
switch (d.type) {
|
||||
case ChannelTypes.DM:
|
||||
channel = new DMChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GROUP_DM:
|
||||
channel = new GroupDMChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_TEXT:
|
||||
channel = new GuildTextChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_VOICE:
|
||||
channel = new VoiceChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_CATEGORY:
|
||||
channel = new CategoryChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_NEWS:
|
||||
channel = new NewsChannel(this.client, d)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
if (channel !== undefined) {
|
||||
cache.set('channel', channel.id, channel)
|
||||
this.client.emit('channelCreate', channel)
|
||||
}
|
||||
break
|
||||
}
|
||||
case GatewayEvents.Channel_Update: {
|
||||
const oldChannel: Channel = cache.get('channel', d.id)
|
||||
|
||||
if (oldChannel.type !== d.type) {
|
||||
let channel: Channel = oldChannel
|
||||
switch (d.type) {
|
||||
case ChannelTypes.DM:
|
||||
channel = new DMChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GROUP_DM:
|
||||
channel = new GroupDMChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_TEXT:
|
||||
channel = new GuildTextChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_VOICE:
|
||||
channel = new VoiceChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_CATEGORY:
|
||||
channel = new CategoryChannel(this.client, d)
|
||||
break
|
||||
case ChannelTypes.GUILD_NEWS:
|
||||
channel = new NewsChannel(this.client, d)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
cache.set('channel', channel.id, channel)
|
||||
this.client.emit('channelUpdate', oldChannel, channel)
|
||||
} else {
|
||||
const before = oldChannel.refreshFromData(d)
|
||||
this.client.emit('channelUpdate', before, oldChannel)
|
||||
}
|
||||
break
|
||||
}
|
||||
case GatewayEvents.Channel_Delete: {
|
||||
const channel: Channel = cache.get('channel', d.id)
|
||||
cache.del('channel', d.id)
|
||||
|
||||
this.client.emit('channelDelete', channel)
|
||||
break
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
@ -138,17 +219,18 @@ class Gateway {
|
|||
}
|
||||
}
|
||||
|
||||
private onclose (event: CloseEvent) {
|
||||
private onclose (event: CloseEvent): void {
|
||||
console.log(event.code)
|
||||
// TODO: Handle close event codes.
|
||||
}
|
||||
|
||||
private onerror (event: Event | ErrorEvent) {
|
||||
private onerror (event: Event | ErrorEvent): void {
|
||||
const eventError = event as ErrorEvent
|
||||
|
||||
console.log(eventError)
|
||||
}
|
||||
|
||||
private sendIdentify () {
|
||||
private sendIdentify (): void {
|
||||
this.websocket.send(
|
||||
JSON.stringify({
|
||||
op: GatewayOpcodes.IDENTIFY,
|
||||
|
@ -176,8 +258,22 @@ class Gateway {
|
|||
)
|
||||
}
|
||||
|
||||
initWebsocket () {
|
||||
private sendResume (): void {
|
||||
this.websocket.send(
|
||||
JSON.stringify({
|
||||
op: GatewayOpcodes.RESUME,
|
||||
d: {
|
||||
token: this.token,
|
||||
session_id: this.sessionID,
|
||||
seq: this.sequenceID
|
||||
}
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
initWebsocket (): void {
|
||||
this.websocket = new WebSocket(
|
||||
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
||||
`${DISCORD_GATEWAY_URL}/?v=${DISCORD_API_VERSION}&encoding=json`,
|
||||
[]
|
||||
)
|
||||
|
@ -188,7 +284,7 @@ class Gateway {
|
|||
this.websocket.onerror = this.onerror.bind(this)
|
||||
}
|
||||
|
||||
close () {
|
||||
close (): void {
|
||||
this.websocket.close(1000)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ class Rest {
|
|||
constructor (client: Client) {
|
||||
this.client = client
|
||||
}
|
||||
//TODO: make endpoints function
|
||||
// TODO: make endpoints function
|
||||
}
|
||||
|
||||
export { Rest }
|
||||
|
|
|
@ -1,63 +1,113 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import * as cache from '../models/cache.ts'
|
||||
import endpoint from '../types/endpoint.ts'
|
||||
import endpoints from '../types/endpoint.ts'
|
||||
|
||||
interface IInit {
|
||||
useCache?: boolean
|
||||
cacheName: string
|
||||
endpoint: string,
|
||||
endpoint: string
|
||||
restURLfuncArgs: string[]
|
||||
}
|
||||
|
||||
export class Base {
|
||||
client: Client
|
||||
static cacheName?: string
|
||||
propertyConverterOverride: { [k: string]: string } = {}
|
||||
static useCache?: boolean = true
|
||||
static restFunc?: ((...restURLfuncArgs: string[]) => string)
|
||||
static restFunc?: (...restURLfuncArgs: string[]) => string
|
||||
|
||||
constructor (client: Client, _data?: any) {
|
||||
this.client = client
|
||||
}
|
||||
|
||||
static async autoInit (client: Client, init: IInit) {
|
||||
this.useCache = init.useCache;
|
||||
const cacheID = init.restURLfuncArgs.join(':')
|
||||
if (this.useCache) {
|
||||
const cached = cache.get(
|
||||
init.cacheName,
|
||||
cacheID
|
||||
)
|
||||
static async autoInit (
|
||||
client: Client,
|
||||
{ useCache, endpoint, restURLfuncArgs }: IInit
|
||||
): Promise<any> {
|
||||
this.useCache = useCache
|
||||
const cacheID = restURLfuncArgs.join(':')
|
||||
if (this.useCache !== undefined) {
|
||||
const cached = cache.get(this.cacheName ?? this.name, cacheID)
|
||||
if (cached !== undefined) {
|
||||
return cached
|
||||
}
|
||||
}
|
||||
this.restFunc = endpoint.find(v => v.name === init.endpoint)
|
||||
this.restFunc = endpoints.find(v => v.name === endpoint)
|
||||
// TODO: Make error for this
|
||||
if(this.restFunc) {
|
||||
const resp = await fetch(this.restFunc(...init.restURLfuncArgs), {
|
||||
if (this.restFunc !== undefined) {
|
||||
const resp = await fetch(this.restFunc(...restURLfuncArgs), {
|
||||
headers: {
|
||||
Authorization: `Bot ${client.token}`
|
||||
}
|
||||
})
|
||||
const jsonParsed = await resp.json()
|
||||
|
||||
cache.set(init.cacheName, cacheID, new this(client, jsonParsed))
|
||||
|
||||
cache.set(
|
||||
this.cacheName ?? this.name,
|
||||
cacheID,
|
||||
new this(client, jsonParsed)
|
||||
)
|
||||
|
||||
return new this(client, jsonParsed)
|
||||
}
|
||||
}
|
||||
|
||||
async refresh (client: Client, init: IInit) {
|
||||
const restFunc: ((...restURLfuncArgs: string[]) => string) | undefined = endpoint.find(v => v.name === init.endpoint)
|
||||
async refreshFromAPI (
|
||||
client: Client,
|
||||
{ endpoint, restURLfuncArgs }: IInit
|
||||
): Promise<this> {
|
||||
const oldOne = Object.assign(Object.create(this), this)
|
||||
const restFunc:
|
||||
| ((...restURLfuncArgs: string[]) => string)
|
||||
| undefined = endpoints.find(v => v.name === endpoint)
|
||||
// TODO: Make error for this
|
||||
if(restFunc) {
|
||||
const resp = await fetch(restFunc(...init.restURLfuncArgs), {
|
||||
if (restFunc !== undefined) {
|
||||
const resp = await fetch(restFunc(...restURLfuncArgs), {
|
||||
headers: {
|
||||
Authorization: `Bot ${client.token}`
|
||||
}
|
||||
})
|
||||
const jsonParsed = await resp.json()
|
||||
|
||||
Object.assign(this, jsonParsed)
|
||||
const result: { [k: string]: any } = {}
|
||||
Object.keys(jsonParsed).forEach(key => {
|
||||
result[this.convertPropertyNameToStandard(key)] = jsonParsed[key]
|
||||
})
|
||||
|
||||
Object.assign(this, result)
|
||||
}
|
||||
|
||||
return oldOne
|
||||
}
|
||||
|
||||
refreshFromData (data: { [k: string]: any }): this {
|
||||
const oldOne = Object.assign(Object.create(this), this)
|
||||
const result: { [k: string]: any } = {}
|
||||
Object.keys(data).forEach(key => {
|
||||
result[this.convertPropertyNameToStandard(key)] = data[key]
|
||||
})
|
||||
|
||||
Object.assign(this, result)
|
||||
return oldOne
|
||||
}
|
||||
|
||||
convertPropertyNameToStandard (name: string): string {
|
||||
if (name in this.propertyConverterOverride) {
|
||||
return this.propertyConverterOverride[name]
|
||||
}
|
||||
|
||||
name = name.replaceAll('_id', 'ID')
|
||||
name = name
|
||||
.split('_')
|
||||
.map((value, index) => {
|
||||
if (index !== 0) {
|
||||
value = value[0].toUpperCase() + value.slice(1)
|
||||
}
|
||||
return value
|
||||
})
|
||||
.join('')
|
||||
return name
|
||||
}
|
||||
|
||||
// toJSON() {}
|
||||
}
|
||||
|
||||
// 오류를 해결하기 위해 저는 2개로 접속하겠습니다. VS2019
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import { ImageFormats, ImageSize } from "../types/cdnTypes.ts";
|
||||
import { ImageFormats, ImageSize } from '../types/cdnTypes.ts'
|
||||
|
||||
export const ImageURL = (
|
||||
url: string,
|
||||
format: ImageFormats,
|
||||
size?: ImageSize | 128
|
||||
) => {
|
||||
if (url.includes('a_')) {
|
||||
return url + '.gif' + '?size=' + size
|
||||
} else return url + '.' + format + '?size=' + size
|
||||
}
|
||||
url: string,
|
||||
format: ImageFormats,
|
||||
size?: ImageSize | 128
|
||||
): string => {
|
||||
if (url.includes('a_')) {
|
||||
return `${url}.gif?size=${size}`
|
||||
} else return `${url}.${format}?size=${size}`
|
||||
}
|
||||
|
|
|
@ -1,35 +1,18 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import {
|
||||
ChannelPayload,
|
||||
GuildChannelCategoryPayload,
|
||||
GuildNewsChannelPayload,
|
||||
GuildTextChannelPayload,
|
||||
GuildVoiceChannelPayload,
|
||||
DMChannelPayload,
|
||||
GroupDMChannelPayload,
|
||||
ChannelTypes
|
||||
} from '../types/channelTypes.ts'
|
||||
import { ChannelPayload, ChannelTypes } from '../types/channelTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { CategoryChannel } from './guildCategoryChannel.ts'
|
||||
import { VoiceChannel } from './guildVoiceChannel.ts'
|
||||
import { NewsChannel } from './guildnewsChannel.ts'
|
||||
import { DMChannel } from './dmChannel.ts'
|
||||
import { GroupDMChannel } from './groupChannel.ts'
|
||||
import { TextChannel } from './textChannel.ts'
|
||||
|
||||
export class Channel extends Base {
|
||||
type: ChannelTypes
|
||||
id: string
|
||||
static cacheName = 'channel'
|
||||
static cacheArgIndex = 0
|
||||
get mention (): string {
|
||||
return `<#${this.id}>`
|
||||
}
|
||||
|
||||
constructor (client: Client, data: ChannelPayload) {
|
||||
super(client, data)
|
||||
this.type = data.type
|
||||
this.id = data.id
|
||||
}
|
||||
|
||||
get mention () {
|
||||
return `<#${this.id}>`
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { Base } from './base.ts'
|
||||
import {
|
||||
EmbedAuthor,
|
||||
EmbedField,
|
||||
|
@ -27,7 +26,7 @@ export class Embed {
|
|||
author?: EmbedAuthor
|
||||
fields?: EmbedField[]
|
||||
constructor (client: Client, data?: EmbedPayload) {
|
||||
if(data) {
|
||||
if (data !== undefined) {
|
||||
this.title = data.title
|
||||
this.type = data.type
|
||||
this.description = data.description
|
||||
|
@ -43,22 +42,4 @@ export class Embed {
|
|||
this.fields = data.fields
|
||||
}
|
||||
}
|
||||
|
||||
toJSON () {
|
||||
return {
|
||||
title: this.title,
|
||||
type: this.type,
|
||||
description: this.description,
|
||||
url: this.url,
|
||||
timestamp: this.timestamp,
|
||||
color: this.color,
|
||||
footer: this.footer,
|
||||
image: this.image,
|
||||
thumbnail: this.thumbnail,
|
||||
video: this.video,
|
||||
provider: this.provider,
|
||||
author: this.author,
|
||||
fields: this.fields
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,28 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { EmojiPayload } from '../types/emojiTypes.ts'
|
||||
import { UserPayload } from '../types/userTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { User } from './user.ts'
|
||||
|
||||
export class Emoji extends Base {
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-readonly
|
||||
private data: EmojiPayload
|
||||
client: Client
|
||||
id: string
|
||||
name: string
|
||||
roles?: []
|
||||
user?: UserPayload
|
||||
|
||||
get user (): User | undefined {
|
||||
if (this.data.user !== undefined) {
|
||||
return new User(this.client, this.data.user)
|
||||
}
|
||||
}
|
||||
|
||||
requireColons?: boolean
|
||||
managed?: boolean
|
||||
animated?: boolean
|
||||
available?: boolean
|
||||
|
||||
get CustomEmoji () {
|
||||
get getEmojiString (): string {
|
||||
if (this.animated === false) {
|
||||
return `<:${this.name}:${this.id}>`
|
||||
} else return `<a:${this.name}:${this.id}>`
|
||||
|
@ -21,10 +30,11 @@ export class Emoji extends Base {
|
|||
|
||||
constructor (client: Client, data: EmojiPayload) {
|
||||
super(client, data)
|
||||
this.data = data
|
||||
this.client = client
|
||||
this.id = data.id
|
||||
this.name = data.name
|
||||
this.roles = data.roles
|
||||
this.user = data.user
|
||||
this.requireColons = data.require_colons
|
||||
this.managed = data.managed
|
||||
this.animated = data.animated
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { GroupDMChannelPayload } from '../types/channelTypes.ts'
|
||||
import { Base } from "./base.ts"
|
||||
import { Channel } from './channel.ts'
|
||||
|
||||
export class GroupDMChannel extends Channel{
|
||||
export class GroupDMChannel extends Channel {
|
||||
name: string
|
||||
icon?: string
|
||||
ownerID: string
|
||||
|
|
|
@ -1,17 +1,12 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { ChannelPayload } from '../types/channelTypes.ts'
|
||||
import { EmojiPayload } from '../types/emojiTypes.ts'
|
||||
|
||||
import {
|
||||
GuildFeatures,
|
||||
GuildPayload,
|
||||
MemberPayload
|
||||
} from '../types/guildTypes.ts'
|
||||
import { GuildFeatures, GuildPayload } from '../types/guildTypes.ts'
|
||||
import { PresenceUpdatePayload } from '../types/presenceTypes.ts'
|
||||
import { RolePayload } from '../types/roleTypes.ts'
|
||||
import { VoiceStatePayload } from '../types/voiceTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import * as cache from '../models/cache.ts'
|
||||
import { Channel } from './channel.ts'
|
||||
import { Emoji } from './emoji.ts'
|
||||
import { Member } from './member.ts'
|
||||
import { Role } from './role.ts'
|
||||
import { VoiceState } from './voiceState.ts'
|
||||
|
||||
export class Guild extends Base {
|
||||
id: string
|
||||
|
@ -31,8 +26,8 @@ export class Guild extends Base {
|
|||
verificationLevel: string
|
||||
defaultMessageNotifications: string
|
||||
explicitContentFilter: string
|
||||
roles: RolePayload[]
|
||||
emojis: EmojiPayload[]
|
||||
roles: Role[]
|
||||
emojis: Emoji[]
|
||||
features: GuildFeatures[]
|
||||
mfaLevel: string
|
||||
applicationID?: string
|
||||
|
@ -43,9 +38,9 @@ export class Guild extends Base {
|
|||
large?: boolean
|
||||
unavailable: boolean
|
||||
memberCount?: number
|
||||
voiceStates?: VoiceStatePayload[]
|
||||
members?: MemberPayload[]
|
||||
channels?: ChannelPayload[]
|
||||
voiceStates?: VoiceState[]
|
||||
members?: Member[]
|
||||
channels?: Channel[]
|
||||
presences?: PresenceUpdatePayload[]
|
||||
maxPresences?: number
|
||||
maxMembers?: number
|
||||
|
@ -79,8 +74,8 @@ export class Guild extends Base {
|
|||
this.verificationLevel = data.verification_level
|
||||
this.defaultMessageNotifications = data.default_message_notifications
|
||||
this.explicitContentFilter = data.explicit_content_filter
|
||||
this.roles = data.roles
|
||||
this.emojis = data.emojis
|
||||
this.roles = data.roles.map(v => new Role(client, v))
|
||||
this.emojis = data.emojis.map(v => new Emoji(client, v))
|
||||
this.features = data.features
|
||||
this.mfaLevel = data.mfa_level
|
||||
this.systemChannelID = data.system_channel_id
|
||||
|
@ -90,9 +85,9 @@ export class Guild extends Base {
|
|||
this.large = data.large
|
||||
this.unavailable = data.unavailable
|
||||
this.memberCount = data.member_count
|
||||
this.voiceStates = data.voice_states
|
||||
this.members = data.members
|
||||
this.channels = data.channels
|
||||
this.voiceStates = data.voice_states?.map(v => new VoiceState(client, v))
|
||||
this.members = data.members?.map(v => new Member(client, v))
|
||||
this.channels = data.channels?.map(v => new Channel(client, v))
|
||||
this.presences = data.presences
|
||||
this.maxPresences = data.max_presences
|
||||
this.maxMembers = data.max_members
|
||||
|
@ -107,5 +102,4 @@ export class Guild extends Base {
|
|||
this.approximateNumberCount = data.approximate_number_count
|
||||
this.approximatePresenceCount = data.approximate_presence_count
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { GuildChannelPayload, Overwrite } from '../types/channelTypes.ts'
|
||||
import { Channel } from './channel.ts'
|
||||
import * as cache from '../models/cache.ts'
|
||||
import { Guild } from './guild.ts'
|
||||
|
||||
export class GuildChannel extends Channel {
|
||||
guildID: string
|
||||
|
@ -21,5 +19,4 @@ export class GuildChannel extends Channel {
|
|||
this.nsfw = data.nsfw
|
||||
this.parentID = data.parent_id
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ export class GuildTextChannel extends GuildChannel {
|
|||
rateLimit: number
|
||||
topic?: string
|
||||
|
||||
get mention () {
|
||||
get mention (): string {
|
||||
return `<#${this.id}>`
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { GuildVoiceChannelPayload, Overwrite } from '../types/channelTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { Member } from './member.ts'
|
||||
import { Channel } from './channel.ts'
|
||||
|
||||
export class VoiceChannel extends Channel {
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { Channel } from './channel.ts'
|
||||
import { GuildNewsChannelPayload } from '../types/channelTypes.ts'
|
||||
import { Base } from "./base.ts"
|
||||
|
||||
export class NewsChannel extends Channel {
|
||||
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
|
||||
constructor (client: Client, data: GuildNewsChannelPayload) {
|
||||
super(client, data)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ export class Invite extends Base {
|
|||
approximatePresenceCount?: number
|
||||
approximateMemberCount?: number
|
||||
|
||||
get link () {
|
||||
get link (): string {
|
||||
return `https://discord.gg/${this.code}`
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { MemberPayload } from '../types/guildTypes.ts'
|
||||
import { RolePayload } from '../types/roleTypes.ts'
|
||||
import { UserPayload } from '../types/userTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { Guild } from './guild.ts'
|
||||
import { Role } from './role.ts'
|
||||
import { User } from './user.ts'
|
||||
|
||||
|
|
|
@ -2,33 +2,44 @@ import { Base } from './base.ts'
|
|||
import {
|
||||
Attachment,
|
||||
ChannelMention,
|
||||
EmbedPayload,
|
||||
MessageActivity,
|
||||
MessageApplication,
|
||||
MessageOption,
|
||||
MessagePayload,
|
||||
MessageReference,
|
||||
Reaction
|
||||
} from '../types/channelTypes.ts'
|
||||
import { Client } from '../models/client.ts'
|
||||
import { UserPayload } from '../types/userTypes.ts'
|
||||
import { RolePayload } from '../types/roleTypes.ts'
|
||||
import { User } from './user.ts'
|
||||
import { Member } from './member.ts'
|
||||
import { Embed } from './embed.ts'
|
||||
import { Role } from './role.ts'
|
||||
import { CHANNEL_MESSAGE } from '../types/endpoint.ts'
|
||||
|
||||
export class Message extends Base {
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-readonly
|
||||
private data: MessagePayload
|
||||
id: string
|
||||
channelID: string
|
||||
guildID?: string
|
||||
author: UserPayload
|
||||
member?: any
|
||||
author: User
|
||||
content: string
|
||||
timestamp: string
|
||||
editedTimestamp?: string
|
||||
tts: boolean
|
||||
|
||||
get member (): Member | undefined {
|
||||
if (this.data.member !== undefined) {
|
||||
return new Member(this.client, this.data.member)
|
||||
}
|
||||
}
|
||||
|
||||
mentionEveryone: boolean
|
||||
mentions: UserPayload[]
|
||||
mentionRoles: RolePayload[]
|
||||
mentions: Member[]
|
||||
mentionRoles: Role[]
|
||||
mentionChannels?: ChannelMention[]
|
||||
attachments: Attachment[]
|
||||
embeds: EmbedPayload[]
|
||||
embeds: Embed[]
|
||||
reactions?: Reaction[]
|
||||
nonce?: string | number
|
||||
pinned: boolean
|
||||
|
@ -41,20 +52,20 @@ export class Message extends Base {
|
|||
|
||||
constructor (client: Client, data: MessagePayload) {
|
||||
super(client)
|
||||
this.data = data
|
||||
this.id = data.id
|
||||
this.channelID = data.channel_id
|
||||
this.guildID = data.guild_id
|
||||
this.author = data.author
|
||||
this.member = data.member
|
||||
this.author = new User(client, data.author)
|
||||
this.content = data.content
|
||||
this.timestamp = data.timestamp
|
||||
this.editedTimestamp = data.edited_timestamp
|
||||
this.tts = data.tts
|
||||
this.mentionEveryone = data.mention_everyone
|
||||
this.mentions = data.mentions
|
||||
this.mentionRoles = data.mention_roles
|
||||
this.mentions = data.mentions.map(v => new Member(client, v))
|
||||
this.mentionRoles = data.mention_roles.map(v => new Role(client, v))
|
||||
this.attachments = data.attachments
|
||||
this.embeds = data.embeds
|
||||
this.embeds = data.embeds.map(v => new Embed(client, v))
|
||||
this.reactions = data.reactions
|
||||
this.nonce = data.nonce
|
||||
this.pinned = data.pinned
|
||||
|
@ -65,4 +76,26 @@ export class Message extends Base {
|
|||
this.messageReference = data.message_reference
|
||||
this.flags = data.flags
|
||||
}
|
||||
|
||||
async editMessage (text?: string, option?: MessageOption): Promise<Message> {
|
||||
if (text !== undefined && option !== undefined) {
|
||||
throw new Error('Either text or option is necessary.')
|
||||
}
|
||||
const resp = await fetch(CHANNEL_MESSAGE(this.channelID, this.id), {
|
||||
headers: {
|
||||
Authorization: `Bot ${this.client.token}`,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
method: 'PATCH',
|
||||
body: JSON.stringify({
|
||||
content: text,
|
||||
embed: option?.embed,
|
||||
file: option?.file,
|
||||
tts: option?.tts,
|
||||
allowed_mentions: option?.allowedMention
|
||||
})
|
||||
})
|
||||
|
||||
return new Message(this.client, await resp.json())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ export class Role extends Base {
|
|||
managed: boolean
|
||||
mentionable: boolean
|
||||
|
||||
get mention () {
|
||||
get mention (): string {
|
||||
return `<@&${this.id}>`
|
||||
}
|
||||
|
||||
|
|
|
@ -4,19 +4,19 @@ export class Snowflake {
|
|||
this.snowflake = BigInt.asUintN(64, BigInt(id))
|
||||
}
|
||||
|
||||
get timestamp () {
|
||||
return ((this.snowflake >> BigInt(22)) + BigInt(1420070400000)).toString()
|
||||
get timestamp (): string {
|
||||
return ((this.snowflake >> 22n) + 1420070400000n).toString()
|
||||
}
|
||||
|
||||
get workerID () {
|
||||
return ((this.snowflake & BigInt(0x3e0000)) >> BigInt(17)).toString()
|
||||
get workerID (): string {
|
||||
return ((this.snowflake & 0x3e0000n) >> 17n).toString()
|
||||
}
|
||||
|
||||
get processID () {
|
||||
return ((this.snowflake & BigInt(0x1f000)) >> BigInt(12)).toString()
|
||||
get processID (): string {
|
||||
return ((this.snowflake & 0x1f00n) >> 12n).toString()
|
||||
}
|
||||
|
||||
get increment () {
|
||||
return (this.snowflake & BigInt(0xfff)).toString()
|
||||
get increment (): string {
|
||||
return (this.snowflake & 0xfffn).toString()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,64 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { TextChannelPayload } from '../types/channelTypes.ts'
|
||||
import { Base } from "./base.ts"
|
||||
import { MessageOption, TextChannelPayload } from '../types/channelTypes.ts'
|
||||
import { CHANNEL_MESSAGE, CHANNEL_MESSAGES } from '../types/endpoint.ts'
|
||||
import { Channel } from './channel.ts'
|
||||
import { Embed } from './embed.ts'
|
||||
import { Message } from './message.ts'
|
||||
|
||||
export class TextChannel extends Channel {
|
||||
lastMessageId?: string
|
||||
lastMessageID?: string
|
||||
lastPinTimestamp?: string
|
||||
|
||||
constructor (client: Client, data: TextChannelPayload) {
|
||||
super(client, data)
|
||||
this.lastMessageId = data.last_message_id
|
||||
this.lastMessageID = data.last_message_id
|
||||
this.lastPinTimestamp = data.last_pin_timestamp
|
||||
}
|
||||
|
||||
send (content: string | Embed, option?: {}) {} //TODO: send function
|
||||
async send (text?: string, option?: MessageOption): Promise<Message> {
|
||||
if (text !== undefined && option !== undefined) {
|
||||
throw new Error('Either text or option is necessary.')
|
||||
}
|
||||
const resp = await fetch(CHANNEL_MESSAGES(this.id), {
|
||||
headers: {
|
||||
Authorization: `Bot ${this.client.token}`,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
content: text,
|
||||
embed: option?.embed,
|
||||
file: option?.file,
|
||||
tts: option?.tts,
|
||||
allowed_mentions: option?.allowedMention
|
||||
})
|
||||
})
|
||||
|
||||
return new Message(this.client, await resp.json())
|
||||
}
|
||||
|
||||
async editMessage (
|
||||
messageID: string,
|
||||
text?: string,
|
||||
option?: MessageOption
|
||||
): Promise<Message> {
|
||||
if (text !== undefined && option !== undefined) {
|
||||
throw new Error('Either text or option is necessary.')
|
||||
}
|
||||
const resp = await fetch(CHANNEL_MESSAGE(this.id, messageID), {
|
||||
headers: {
|
||||
Authorization: `Bot ${this.client.token}`,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
method: 'PATCH',
|
||||
body: JSON.stringify({
|
||||
content: text,
|
||||
embed: option?.embed,
|
||||
file: option?.file,
|
||||
tts: option?.tts,
|
||||
allowed_mentions: option?.allowedMention
|
||||
})
|
||||
})
|
||||
|
||||
return new Message(this.client, await resp.json())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { UserPayload } from '../types/userTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import * as cache from '../models/cache.ts'
|
||||
|
||||
export class User extends Base {
|
||||
id: string
|
||||
|
@ -18,11 +17,11 @@ export class User extends Base {
|
|||
premiumType?: 0 | 1 | 2
|
||||
publicFlags?: number
|
||||
|
||||
get nickMention () {
|
||||
get nickMention (): string {
|
||||
return `<@!${this.id}>`
|
||||
}
|
||||
|
||||
get mention () {
|
||||
get mention (): string {
|
||||
return `<@${this.id}>`
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ import { Client } from '../models/client.ts'
|
|||
import { MemberPayload } from '../types/guildTypes.ts'
|
||||
import { VoiceStatePayload } from '../types/voiceTypes.ts'
|
||||
import { Base } from './base.ts'
|
||||
import { Member } from './member.ts'
|
||||
|
||||
export class VoiceState extends Base {
|
||||
guildID?: string
|
||||
|
|
|
@ -1,34 +1,26 @@
|
|||
import { Client } from '../models/client.ts'
|
||||
import { Guild } from '../structures/guild.ts'
|
||||
import { GatewayIntents } from '../types/gatewayTypes.ts'
|
||||
import { TOKEN } from './config.ts'
|
||||
import * as cache from '../models/cache.ts'
|
||||
import { Member } from '../structures/member.ts'
|
||||
import { Channel } from '../structures/channel.ts'
|
||||
import { GuildTextChannel } from '../structures/guildTextChannel.ts'
|
||||
|
||||
const bot = new Client()
|
||||
|
||||
bot.connect(TOKEN, [GatewayIntents.GUILD_MEMBERS, GatewayIntents.GUILD_PRESENCES, GatewayIntents.GUILD_MESSAGES])
|
||||
|
||||
|
||||
const member = <Member> await Member.autoInit(bot, {
|
||||
cacheName: 'member',
|
||||
endpoint: 'GUILD_MEMBER',
|
||||
restURLfuncArgs: ['', '']
|
||||
bot.on('ready', () => {
|
||||
console.log('READY!')
|
||||
})
|
||||
console.log('getted (cached) ' + member.nick)
|
||||
setInterval(async () => {
|
||||
//refreshed check
|
||||
console.log('refreshed check: ' + member.nick)
|
||||
//cached
|
||||
console.log('cache: '+(<Member> cache.get('member', '')).nick)
|
||||
}, 10000)
|
||||
|
||||
setInterval(async() => {
|
||||
member.refresh(bot, {
|
||||
cacheName: 'member',
|
||||
endpoint: 'GUILD_MEMBER',
|
||||
restURLfuncArgs: ['', '']
|
||||
})
|
||||
//refreshed
|
||||
console.log('refreshed: ' + member.nick)
|
||||
}, 20000)
|
||||
bot.on('channelUpdate', (before: Channel, after: Channel) => {
|
||||
if (before instanceof GuildTextChannel && after instanceof GuildTextChannel) {
|
||||
console.log(before.name)
|
||||
console.log(after.name)
|
||||
}
|
||||
})
|
||||
|
||||
bot.connect(TOKEN, [
|
||||
GatewayIntents.GUILD_MEMBERS,
|
||||
GatewayIntents.GUILD_PRESENCES,
|
||||
GatewayIntents.GUILD_MESSAGES
|
||||
])
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { Embed } from '../structures/embed.ts'
|
||||
import { EmojiPayload } from './emojiTypes.ts'
|
||||
import { MemberPayload } from './guildTypes.ts'
|
||||
import { RolePayload } from './roleTypes.ts'
|
||||
|
@ -82,7 +83,7 @@ interface MessagePayload {
|
|||
edited_timestamp?: string
|
||||
tts: boolean
|
||||
mention_everyone: boolean
|
||||
mentions: UserPayload[]
|
||||
mentions: MemberPayload[]
|
||||
mention_roles: RolePayload[]
|
||||
mention_channels?: ChannelMention[]
|
||||
attachments: Attachment[]
|
||||
|
@ -98,6 +99,17 @@ interface MessagePayload {
|
|||
flags?: number
|
||||
}
|
||||
|
||||
interface MessageOption {
|
||||
tts: boolean
|
||||
embed: Embed
|
||||
file: Attachment
|
||||
allowedMention?: {
|
||||
parse: ['everyone', 'users', 'roles']
|
||||
roles: string[]
|
||||
users: string[]
|
||||
}
|
||||
}
|
||||
|
||||
interface ChannelMention {
|
||||
id: string
|
||||
guild_id: string
|
||||
|
@ -272,6 +284,7 @@ export {
|
|||
MessageApplication,
|
||||
MessageReference,
|
||||
MessagePayload,
|
||||
MessageOption,
|
||||
EmbedPayload,
|
||||
EmbedTypes,
|
||||
EmbedFooter,
|
||||
|
|
|
@ -1,185 +1,190 @@
|
|||
//Written by Choi Donghan, Catry
|
||||
|
||||
import {
|
||||
DISCORD_API_URL,
|
||||
DISCORD_API_VERSION,
|
||||
DISCORD_CDN_URL
|
||||
} from '../consts/urlsAndVersions.ts'
|
||||
|
||||
//Guild Endpoints
|
||||
const GUILDS = () => `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds`
|
||||
const GUILD = (guildID: string) =>
|
||||
// Guild Endpoints
|
||||
const GUILDS = (): string => `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds`
|
||||
const GUILD = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}`
|
||||
const GUILD_AUDIT_LOGS = (guildID: string) =>
|
||||
const GUILD_AUDIT_LOGS = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/audit-logs`
|
||||
const GUILD_WIDGET = (guildID: string) =>
|
||||
const GUILD_WIDGET = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/widget`
|
||||
const GUILD_EMOJI = (guildID: string, emoji_id: string) =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emoji_id}`
|
||||
const GUILD_ROLE = (guildID: string, roleID: string) =>
|
||||
const GUILD_EMOJI = (guildID: string, emojiID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emojiID}`
|
||||
const GUILD_ROLE = (guildID: string, roleID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/roles/${roleID}`
|
||||
const GUILD_ROLES = (guildID: string) =>
|
||||
const GUILD_ROLES = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/roles`
|
||||
const GUILD_INTEGRATION = (guildID: string, integrationID: string) =>
|
||||
const GUILD_INTEGRATION = (guildID: string, integrationID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/integrations/${integrationID}`
|
||||
const GUILD_INTEGRATIONS = (guildID: string) =>
|
||||
const GUILD_INTEGRATIONS = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/integrations`
|
||||
const GUILD_INTEGARTION_SYNC = (guildID: string) =>
|
||||
const GUILD_INTEGARTION_SYNC = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/integrations?include_appilications=true`
|
||||
const GUILD_BAN = (guildID: string, userID: string) =>
|
||||
const GUILD_BAN = (guildID: string, userID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/bans/${userID}`
|
||||
const GUILD_BANS = (guildID: string) =>
|
||||
const GUILD_BANS = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/bans`
|
||||
const GUILD_CHANNEL = (channelID: string) =>
|
||||
const GUILD_CHANNEL = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}`
|
||||
const GUILD_CHANNELS = (guildID: string, channelID: string) =>
|
||||
const GUILD_CHANNELS = (guildID: string, channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/channels`
|
||||
const GUILD_MEMBER = (guildID: string, memberID: string) =>
|
||||
const GUILD_MEMBER = (guildID: string, memberID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}`
|
||||
const GUILD_MEMBERS = (guildID: string) =>
|
||||
const GUILD_MEMBERS = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members`
|
||||
const GUILD_MEMBER_ROLE = (guildID: string, memberID: string, roleID: string) =>
|
||||
const GUILD_MEMBER_ROLE = (
|
||||
guildID: string,
|
||||
memberID: string,
|
||||
roleID: string
|
||||
): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/${memberID}/roles/${roleID}`
|
||||
const GUILD_INVITES = (guildID: string) =>
|
||||
const GUILD_INVITES = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/invites`
|
||||
const GUILD_LEAVE = (guildID: string) =>
|
||||
const GUILD_LEAVE = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/guilds/${guildID}`
|
||||
const GUILD_PRUNE = (guildID: string) =>
|
||||
const GUILD_PRUNE = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/prune`
|
||||
const GUILD_VANITY_URL = (guildID: string) =>
|
||||
const GUILD_VANITY_URL = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/vanity-url`
|
||||
const GUILD_NICK = (guildID: string) =>
|
||||
const GUILD_NICK = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/members/@me/nick`
|
||||
const GUILD_WIDGET_IMAGE = (guildID: string) =>
|
||||
const GUILD_WIDGET_IMAGE = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/widget.png`
|
||||
const GUILD_PREVIEW = (guildID: string) =>
|
||||
const GUILD_PREVIEW = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/preview`
|
||||
|
||||
//Channel Endpoints
|
||||
const CHANNEL = (channelID: string) =>
|
||||
// Channel Endpoints
|
||||
const CHANNEL = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}`
|
||||
const CHANNELS = (channelID: string) =>
|
||||
const CHANNELS = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${channelID}/channels`
|
||||
const CHANNEL_MESSAGE = (channelID: string, messageID: string) =>
|
||||
const CHANNEL_MESSAGE = (channelID: string, messageID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}`
|
||||
const CHANNEL_MESSAGES = (channelID: string) =>
|
||||
const CHANNEL_MESSAGES = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages`
|
||||
const CHANNEL_CROSSPOST = (channelID: string, messageID: string) =>
|
||||
const CHANNEL_CROSSPOST = (channelID: string, messageID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/crosspost`
|
||||
const MESSAGE_REACTIONS = (channelID: string, messageID: string) =>
|
||||
const MESSAGE_REACTIONS = (channelID: string, messageID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions`
|
||||
const MESSAGE_REACTION = (
|
||||
channelID: string,
|
||||
messageID: string,
|
||||
emoji: string
|
||||
) =>
|
||||
): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emoji}`
|
||||
const MESSAGE_REACTION_ME = (
|
||||
channelID: string,
|
||||
messageID: string,
|
||||
emojiID: string
|
||||
) =>
|
||||
): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/@me`
|
||||
const MESSAGE_REACTION_USER = (
|
||||
channelID: string,
|
||||
messageID: string,
|
||||
emojiID: string,
|
||||
userID: string
|
||||
) =>
|
||||
): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/${messageID}/reactions/${emojiID}/${userID}`
|
||||
const CHANNEL_BULK_DELETE = (channelID: string) =>
|
||||
const CHANNEL_BULK_DELETE = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/messages/bulk-delete`
|
||||
const CHANNEL_FOLLOW = (channelID: string) =>
|
||||
const CHANNEL_FOLLOW = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/followers`
|
||||
const CHANNEL_INVITES = (channelID: string) =>
|
||||
const CHANNEL_INVITES = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/invites`
|
||||
const CHANNEL_PIN = (channelID: string, messageID: string) =>
|
||||
const CHANNEL_PIN = (channelID: string, messageID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/pins/${messageID}`
|
||||
const CHANNEL_PINS = (channelID: string) =>
|
||||
const CHANNEL_PINS = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/pins`
|
||||
const CHANNEL_PERMISSION = (channelID: string, overrideID: string) =>
|
||||
const CHANNEL_PERMISSION = (channelID: string, overrideID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/permissions/${overrideID}`
|
||||
const CHANNEL_TYPING = (channelID: string) =>
|
||||
const CHANNEL_TYPING = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/typing`
|
||||
const GROUP_RECIPIENT = (channelID: string, userID: string) =>
|
||||
const GROUP_RECIPIENT = (channelID: string, userID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/recipient/${userID}`
|
||||
|
||||
//User Endpoints
|
||||
const CURRENT_USER = () =>
|
||||
// User Endpoints
|
||||
const CURRENT_USER = (): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me`
|
||||
const CURRENT_USER_GUILDS = () =>
|
||||
const CURRENT_USER_GUILDS = (): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/guilds`
|
||||
const USER_DM = () =>
|
||||
const USER_DM = (): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/channels`
|
||||
const USER_CONNECTIONS = () =>
|
||||
const USER_CONNECTIONS = (): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/connections`
|
||||
const LEAVE_GUILD = (guildID: string) =>
|
||||
const LEAVE_GUILD = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/@me/guilds/${guildID}`
|
||||
const USER = (userID: string) =>
|
||||
const USER = (userID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/users/${userID}`
|
||||
|
||||
//Webhook Endpoints
|
||||
const CHANNEL_WEBHOOKS = (channelID: string) =>
|
||||
// Webhook Endpoints
|
||||
const CHANNEL_WEBHOOKS = (channelID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/channels/${channelID}/webhooks`
|
||||
const GUILD_WEBHOOK = (guildID: string) =>
|
||||
const GUILD_WEBHOOK = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/webhooks`
|
||||
const WEBHOOK = (webhookID: string) =>
|
||||
const WEBHOOK = (webhookID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/webhooks/${webhookID}`
|
||||
const WEBHOOK_WITH_TOKEN = (webhookID: string, webhookTOKEN: string) =>
|
||||
const WEBHOOK_WITH_TOKEN = (webhookID: string, webhookTOKEN: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/webhooks/${webhookID}/${webhookTOKEN}`
|
||||
const SLACK_WEBHOOK = (webhookID: string, webhookTOKEN: string) =>
|
||||
const SLACK_WEBHOOK = (webhookID: string, webhookTOKEN: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/webhooks/${webhookID}/${webhookTOKEN}/slack`
|
||||
const GITHUB_WEBHOOK = (webhookID: string, webhookTOKEN: string) =>
|
||||
const GITHUB_WEBHOOK = (webhookID: string, webhookTOKEN: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/webhooks/${webhookID}/${webhookTOKEN}/github`
|
||||
|
||||
//Gateway Endpoints
|
||||
const GATEWAY = () => `${DISCORD_API_URL}/v${DISCORD_API_VERSION}/gateway`
|
||||
const GATEWAY_BOT = () =>
|
||||
// Gateway Endpoints
|
||||
const GATEWAY = (): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/gateway`
|
||||
const GATEWAY_BOT = (): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/gateway/bot`
|
||||
|
||||
//CDN Endpoints
|
||||
const CUSTOM_EMOJI = (emojiID: string) => `${DISCORD_CDN_URL}/emojis/${emojiID}`
|
||||
const GUILD_ICON = (guildID: string, iconID: string) =>
|
||||
// CDN Endpoints
|
||||
const CUSTOM_EMOJI = (emojiID: string): string =>
|
||||
`${DISCORD_CDN_URL}/emojis/${emojiID}`
|
||||
const GUILD_ICON = (guildID: string, iconID: string): string =>
|
||||
`${DISCORD_CDN_URL}/icons/${guildID}/${iconID}`
|
||||
const GUILD_SPLASH = (guildID: string, guildSPLASH: string) =>
|
||||
const GUILD_SPLASH = (guildID: string, guildSPLASH: string): string =>
|
||||
`${DISCORD_CDN_URL}/splashes/${guildID}/${guildSPLASH}`
|
||||
const GUILD_DISCOVERY_SPLASH = (
|
||||
guildID: string,
|
||||
guildDiscoverySplash: string
|
||||
) => `${DISCORD_CDN_URL}/discovery-splashes/${guildID}/${guildDiscoverySplash}`
|
||||
const GUILD_BANNER = (guildID: string, guildBANNER: string) =>
|
||||
): string =>
|
||||
`${DISCORD_CDN_URL}/discovery-splashes/${guildID}/${guildDiscoverySplash}`
|
||||
const GUILD_BANNER = (guildID: string, guildBANNER: string): string =>
|
||||
`${DISCORD_CDN_URL}/banners/${guildID}/${guildBANNER}`
|
||||
const DEFAULT_USER_AVATAR = (iconID: string) =>
|
||||
const DEFAULT_USER_AVATAR = (iconID: string): string =>
|
||||
`${DISCORD_CDN_URL}/embed/avatars/${iconID}`
|
||||
const USER_AVATAR = (userID: string, iconID: string) =>
|
||||
const USER_AVATAR = (userID: string, iconID: string): string =>
|
||||
`${DISCORD_CDN_URL}/avatars/${userID}/${iconID}`
|
||||
const APPLICATION_ASSET = (applicationID: string, assetID: string) =>
|
||||
const APPLICATION_ASSET = (applicationID: string, assetID: string): string =>
|
||||
`${DISCORD_CDN_URL}/app-icons/${applicationID}/${assetID}`
|
||||
const ACHIEVEMENT_ICON = (
|
||||
applicationID: string,
|
||||
achievementID: string,
|
||||
iconHASH: string
|
||||
) =>
|
||||
): string =>
|
||||
`${DISCORD_CDN_URL}/app-assets/${applicationID}/achievements/${achievementID}/icons/${iconHASH}`
|
||||
const TEAM_ICON = (teamID: string, iconID: string) =>
|
||||
const TEAM_ICON = (teamID: string, iconID: string): string =>
|
||||
`${DISCORD_CDN_URL}/team-icons/${teamID}/${iconID}`
|
||||
|
||||
//Emoji Endpoints
|
||||
const EMOJI = (guildID: string, emojiID: string) =>
|
||||
// Emoji Endpoints
|
||||
const EMOJI = (guildID: string, emojiID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis/${emojiID}`
|
||||
const EMOJIS = (guildID: string) =>
|
||||
const EMOJIS = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/emojis`
|
||||
|
||||
//Template Endpoint
|
||||
const TEMPLATE = (templateCODE: string) =>
|
||||
// Template Endpoint
|
||||
const TEMPLATE = (templateCODE: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/templates/${templateCODE}`
|
||||
|
||||
//Invite Endpoint
|
||||
const INVITE = (inviteCODE: string) =>
|
||||
// Invite Endpoint
|
||||
const INVITE = (inviteCODE: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/invites/${inviteCODE}`
|
||||
|
||||
//Voice Endpoint
|
||||
const VOICE_REGIONS = (guildID: string) =>
|
||||
// Voice Endpoint
|
||||
const VOICE_REGIONS = (guildID: string): string =>
|
||||
`${DISCORD_API_URL}/v${DISCORD_API_VERSION}/guilds/${guildID}/regions`
|
||||
|
||||
export default [
|
||||
|
@ -254,3 +259,76 @@ export default [
|
|||
INVITE,
|
||||
VOICE_REGIONS
|
||||
]
|
||||
|
||||
export {
|
||||
GUILDS,
|
||||
GUILD,
|
||||
GUILD_AUDIT_LOGS,
|
||||
GUILD_WIDGET,
|
||||
GUILD_EMOJI,
|
||||
GUILD_ROLE,
|
||||
GUILD_ROLES,
|
||||
GUILD_INTEGRATION,
|
||||
GUILD_INTEGRATIONS,
|
||||
GUILD_INTEGARTION_SYNC,
|
||||
GUILD_WIDGET_IMAGE,
|
||||
GUILD_BAN,
|
||||
GUILD_BANS,
|
||||
GUILD_CHANNEL,
|
||||
GUILD_CHANNELS,
|
||||
GUILD_MEMBER,
|
||||
GUILD_MEMBERS,
|
||||
GUILD_MEMBER_ROLE,
|
||||
GUILD_INVITES,
|
||||
GUILD_LEAVE,
|
||||
GUILD_PRUNE,
|
||||
GUILD_VANITY_URL,
|
||||
GUILD_NICK,
|
||||
GUILD_PREVIEW,
|
||||
CHANNEL,
|
||||
CHANNELS,
|
||||
CHANNEL_MESSAGE,
|
||||
CHANNEL_MESSAGES,
|
||||
CHANNEL_CROSSPOST,
|
||||
MESSAGE_REACTIONS,
|
||||
MESSAGE_REACTION,
|
||||
MESSAGE_REACTION_ME,
|
||||
MESSAGE_REACTION_USER,
|
||||
CHANNEL_BULK_DELETE,
|
||||
CHANNEL_FOLLOW,
|
||||
CHANNEL_INVITES,
|
||||
CHANNEL_PIN,
|
||||
CHANNEL_PINS,
|
||||
CHANNEL_PERMISSION,
|
||||
CHANNEL_TYPING,
|
||||
GROUP_RECIPIENT,
|
||||
CURRENT_USER,
|
||||
CURRENT_USER_GUILDS,
|
||||
USER_DM,
|
||||
USER_CONNECTIONS,
|
||||
LEAVE_GUILD,
|
||||
USER,
|
||||
CHANNEL_WEBHOOKS,
|
||||
GUILD_WEBHOOK,
|
||||
WEBHOOK,
|
||||
WEBHOOK_WITH_TOKEN,
|
||||
SLACK_WEBHOOK,
|
||||
GITHUB_WEBHOOK,
|
||||
GATEWAY,
|
||||
GATEWAY_BOT,
|
||||
CUSTOM_EMOJI,
|
||||
GUILD_ICON,
|
||||
GUILD_SPLASH,
|
||||
GUILD_DISCOVERY_SPLASH,
|
||||
GUILD_BANNER,
|
||||
DEFAULT_USER_AVATAR,
|
||||
USER_AVATAR,
|
||||
APPLICATION_ASSET,
|
||||
ACHIEVEMENT_ICON,
|
||||
TEAM_ICON,
|
||||
EMOJI,
|
||||
EMOJIS,
|
||||
TEMPLATE,
|
||||
INVITE,
|
||||
VOICE_REGIONS
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue