From c1ec7a7353fc3054ba3373a7ba418184bb592ed1 Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Tue, 1 Dec 2020 19:45:43 +0530 Subject: [PATCH 01/14] feat invite events --- .prettierrc | 6 +++++ src/gateway/handlers/index.ts | 6 +++-- src/gateway/handlers/inviteCreate.ts | 34 ++++++++++++++++++++++++++++ src/gateway/handlers/inviteDelete.ts | 21 +++++++++++++++++ src/managers/invites.ts | 34 ++++++++++++++++++++++++++++ src/structures/guild.ts | 1 + 6 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 .prettierrc create mode 100644 src/gateway/handlers/inviteCreate.ts create mode 100644 src/gateway/handlers/inviteDelete.ts create mode 100644 src/managers/invites.ts diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..4dffe1d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true + } \ No newline at end of file diff --git a/src/gateway/handlers/index.ts b/src/gateway/handlers/index.ts index 319c3f9..a15baa2 100644 --- a/src/gateway/handlers/index.ts +++ b/src/gateway/handlers/index.ts @@ -36,6 +36,8 @@ import { Member } from "../../structures/member.ts" import { Role } from "../../structures/role.ts" import { Message } from "../../structures/message.ts" import { Collection } from "../../utils/collection.ts" +import { inviteCreate } from './inviteCreate' +import { inviteDelete } from './inviteDelete' export const gatewayHandlers: { [eventCode in GatewayEvents]: GatewayEventHandler | undefined @@ -61,8 +63,8 @@ export const gatewayHandlers: { GUILD_ROLE_CREATE: guildRoleCreate, GUILD_ROLE_UPDATE: guildRoleUpdate, GUILD_ROLE_DELETE: guildRoleDelete, - INVITE_CREATE: undefined, - INVITE_DELETE: undefined, + INVITE_CREATE: inviteCreate, + INVITE_DELETE: inviteDelete, MESSAGE_CREATE: messageCreate, MESSAGE_UPDATE: messageUpdate, MESSAGE_DELETE: messageDelete, diff --git a/src/gateway/handlers/inviteCreate.ts b/src/gateway/handlers/inviteCreate.ts new file mode 100644 index 0000000..80ab14c --- /dev/null +++ b/src/gateway/handlers/inviteCreate.ts @@ -0,0 +1,34 @@ +import { Gateway, GatewayEventHandler } from '../index.ts' +import { Guild } from '../../structures/guild.ts' +import { InviteCreatePayload } from '../../types/gateway.ts' +import { ChannelPayload, GuildPayload, InvitePayload } from '../../../mod.ts' + +export const inviteCreate: GatewayEventHandler = async ( + gateway: Gateway, + d: InviteCreatePayload +) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) + + // Weird case, shouldn't happen + if (guild === undefined) return + + const cachedChannel = await guild.channels.get(d.channel_id) + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + const cachedGuild: GuildPayload | undefined = + d.guild_id === undefined + ? undefined + : await guild.client.guilds._get(d.guild_id) + const dataConverted: InvitePayload = { + code: d.code, + guild: cachedGuild, + channel: cachedChannel as ChannelPayload, + inviter: d.inviter, + target_user: d.target_user, + target_user_type: d.target_user_type, + } + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + await guild.invites.set(d.code, dataConverted) + const invite = await guild.invites.get(d.code) + gateway.client.emit('inviteCreate', invite) +} diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts new file mode 100644 index 0000000..5f38e80 --- /dev/null +++ b/src/gateway/handlers/inviteDelete.ts @@ -0,0 +1,21 @@ +import { Gateway, GatewayEventHandler } from '../index.ts' +import { Guild } from '../../structures/guild.ts' +import { InviteDeletePayload } from '../../types/gateway.ts' + +export const inviteDelete: GatewayEventHandler = async ( + gateway: Gateway, + d: InviteDeletePayload +) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) + + // Weird case, shouldn't happen + if (guild === undefined) return + + const cachedInvite = await guild.invites.get(d.code) + + // Should not happen but here we go + if (cachedInvite === undefined) return + + gateway.client.emit('inviteDelete', cachedInvite) +} diff --git a/src/managers/invites.ts b/src/managers/invites.ts new file mode 100644 index 0000000..167cec6 --- /dev/null +++ b/src/managers/invites.ts @@ -0,0 +1,34 @@ +import { Client } from '../models/client.ts' +import { Guild } from '../structures/guild.ts' +import { Invite } from '../structures/invite.ts' +import { GUILD_INVITES } from '../types/endpoint.ts' +import { InvitePayload } from '../types/invite.ts' +import { BaseManager } from './base.ts' + +export class InviteManager extends BaseManager { + guild: Guild + + constructor(client: Client, guild: Guild) { + super(client, `invites:${guild.id}`, Invite) + this.guild = guild + } + + async fetch(id: string): Promise { + return await new Promise((resolve, reject) => { + this.client.rest + .get(GUILD_INVITES(this.guild.id)) + .then((data) => { + this.set(id, data as InvitePayload) + resolve(new Invite(this.client, data as InvitePayload)) + }) + .catch((e) => reject(e)) + }) + } + + async fromPayload(invites: InvitePayload[]): Promise { + for (const invite of invites) { + await this.set(invite.code, invite) + } + return true + } +} \ No newline at end of file diff --git a/src/structures/guild.ts b/src/structures/guild.ts index c8416b8..fe720a8 100644 --- a/src/structures/guild.ts +++ b/src/structures/guild.ts @@ -78,6 +78,7 @@ export class Guild extends Base { ) this.roles = new RolesManager(this.client, this) this.emojis = new GuildEmojisManager(this.client, this.client.emojis, this) + this.invites = new InviteManager(this.client, this) if (!this.unavailable) { this.name = data.name From 66c145676e5bfbb67ebf60d3d3f4a4ffc6f4a64a Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Tue, 1 Dec 2020 19:56:53 +0530 Subject: [PATCH 02/14] fixed some things --- src/gateway/handlers/index.ts | 121 ++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 56 deletions(-) diff --git a/src/gateway/handlers/index.ts b/src/gateway/handlers/index.ts index a15baa2..d31177a 100644 --- a/src/gateway/handlers/index.ts +++ b/src/gateway/handlers/index.ts @@ -13,31 +13,31 @@ import { guildBanRemove } from './guildBanRemove.ts' import { messageCreate } from './messageCreate.ts' import { resume } from './resume.ts' import { reconnect } from './reconnect.ts' -import { messageDelete } from "./messageDelete.ts" -import { messageUpdate } from "./messageUpdate.ts" -import { guildEmojiUpdate } from "./guildEmojiUpdate.ts" -import { guildMemberAdd } from "./guildMemberAdd.ts" -import { guildMemberRemove } from "./guildMemberRemove.ts" -import { guildMemberUpdate } from "./guildMemberUpdate.ts" -import { guildRoleCreate } from "./guildRoleCreate.ts" -import { guildRoleDelete } from "./guildRoleDelete.ts" -import { guildRoleUpdate } from "./guildRoleUpdate.ts" -import { guildIntegrationsUpdate } from "./guildIntegrationsUpdate.ts" -import { webhooksUpdate } from "./webhooksUpdate.ts" -import { messageDeleteBulk } from "./messageDeleteBulk.ts" -import { userUpdate } from "./userUpdate.ts" -import { typingStart } from "./typingStart.ts" -import { Channel } from "../../structures/channel.ts" -import { GuildTextChannel, TextChannel } from "../../structures/textChannel.ts" -import { Guild } from "../../structures/guild.ts" -import { User } from "../../structures/user.ts" -import { Emoji } from "../../structures/emoji.ts" -import { Member } from "../../structures/member.ts" -import { Role } from "../../structures/role.ts" -import { Message } from "../../structures/message.ts" -import { Collection } from "../../utils/collection.ts" -import { inviteCreate } from './inviteCreate' -import { inviteDelete } from './inviteDelete' +import { messageDelete } from './messageDelete.ts' +import { messageUpdate } from './messageUpdate.ts' +import { guildEmojiUpdate } from './guildEmojiUpdate.ts' +import { guildMemberAdd } from './guildMemberAdd.ts' +import { guildMemberRemove } from './guildMemberRemove.ts' +import { guildMemberUpdate } from './guildMemberUpdate.ts' +import { guildRoleCreate } from './guildRoleCreate.ts' +import { guildRoleDelete } from './guildRoleDelete.ts' +import { guildRoleUpdate } from './guildRoleUpdate.ts' +import { guildIntegrationsUpdate } from './guildIntegrationsUpdate.ts' +import { webhooksUpdate } from './webhooksUpdate.ts' +import { messageDeleteBulk } from './messageDeleteBulk.ts' +import { userUpdate } from './userUpdate.ts' +import { typingStart } from './typingStart.ts' +import { Channel } from '../../structures/channel.ts' +import { GuildTextChannel, TextChannel } from '../../structures/textChannel.ts' +import { Guild } from '../../structures/guild.ts' +import { User } from '../../structures/user.ts' +import { Emoji } from '../../structures/emoji.ts' +import { Member } from '../../structures/member.ts' +import { Role } from '../../structures/role.ts' +import { Message } from '../../structures/message.ts' +import { Collection } from '../../utils/collection.ts' +import { inviteCreate } from './inviteCreate.ts' +import { inviteDelete } from './inviteDelete.ts' export const gatewayHandlers: { [eventCode in GatewayEvents]: GatewayEventHandler | undefined @@ -77,7 +77,7 @@ export const gatewayHandlers: { TYPING_START: typingStart, USER_UPDATE: userUpdate, VOICE_SERVER_UPDATE: undefined, - WEBHOOKS_UPDATE: webhooksUpdate + WEBHOOKS_UPDATE: webhooksUpdate, } export interface EventTypes { @@ -85,33 +85,42 @@ export interface EventTypes { } export interface ClientEvents extends EventTypes { - 'ready': () => void - 'reconnect': () => void - 'resumed': () => void - 'channelCreate': (channel: Channel) => void - 'channelDelete': (channel: Channel) => void - 'channelPinsUpdate': (before: TextChannel, after: TextChannel) => void - 'channelUpdate': (before: Channel, after: Channel) => void - 'guildBanAdd': (guild: Guild, user: User) => void - 'guildBanRemove': (guild: Guild, user: User) => void - 'guildCreate': (guild: Guild) => void - 'guildDelete': (guild: Guild) => void - 'guildEmojiAdd': (guild: Guild, emoji: Emoji) => void - 'guildEmojiDelete': (guild: Guild, emoji: Emoji) => void - 'guildEmojiUpdate': (guild: Guild, before: Emoji, after: Emoji) => void - 'guildIntegrationsUpdate': (guild: Guild) => void - 'guildMemberAdd': (member: Member) => void - 'guildMemberRemove': (member: Member) => void - 'guildMemberUpdate': (before: Member, after: Member) => void - 'guildRoleCreate': (role: Role) => void - 'guildRoleDelete': (role: Role) => void - 'guildRoleUpdate': (before: Role, after: Role) => void - 'guildUpdate': (before: Guild, after: Guild) => void - 'messageCreate': (message: Message) => void - 'messageDelete': (message: Message) => void - 'messageDeleteBulk': (channel: GuildTextChannel, messages: Collection, uncached: Set) => void - 'messageUpdate': (before: Message, after: Message) => void - 'typingStart': (user: User, channel: TextChannel, at: Date, guildData?: TypingStartGuildData) => void - 'userUpdate': (before: User, after: User) => void - 'webhooksUpdate': (guild: Guild, channel: GuildTextChannel) => void -} \ No newline at end of file + ready: () => void + reconnect: () => void + resumed: () => void + channelCreate: (channel: Channel) => void + channelDelete: (channel: Channel) => void + channelPinsUpdate: (before: TextChannel, after: TextChannel) => void + channelUpdate: (before: Channel, after: Channel) => void + guildBanAdd: (guild: Guild, user: User) => void + guildBanRemove: (guild: Guild, user: User) => void + guildCreate: (guild: Guild) => void + guildDelete: (guild: Guild) => void + guildEmojiAdd: (guild: Guild, emoji: Emoji) => void + guildEmojiDelete: (guild: Guild, emoji: Emoji) => void + guildEmojiUpdate: (guild: Guild, before: Emoji, after: Emoji) => void + guildIntegrationsUpdate: (guild: Guild) => void + guildMemberAdd: (member: Member) => void + guildMemberRemove: (member: Member) => void + guildMemberUpdate: (before: Member, after: Member) => void + guildRoleCreate: (role: Role) => void + guildRoleDelete: (role: Role) => void + guildRoleUpdate: (before: Role, after: Role) => void + guildUpdate: (before: Guild, after: Guild) => void + messageCreate: (message: Message) => void + messageDelete: (message: Message) => void + messageDeleteBulk: ( + channel: GuildTextChannel, + messages: Collection, + uncached: Set + ) => void + messageUpdate: (before: Message, after: Message) => void + typingStart: ( + user: User, + channel: TextChannel, + at: Date, + guildData?: TypingStartGuildData + ) => void + userUpdate: (before: User, after: User) => void + webhooksUpdate: (guild: Guild, channel: GuildTextChannel) => void +} From 62c18886caf9f83afe1ef26753916dcee7143453 Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Tue, 1 Dec 2020 19:59:48 +0530 Subject: [PATCH 03/14] vsc acting weird -_- --- src/structures/guild.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/structures/guild.ts b/src/structures/guild.ts index fe720a8..580f7b1 100644 --- a/src/structures/guild.ts +++ b/src/structures/guild.ts @@ -4,12 +4,13 @@ import { GuildIntegrationPayload, GuildPayload, IntegrationAccountPayload, - IntegrationExpireBehavior + IntegrationExpireBehavior, } from '../types/guild.ts' import { PresenceUpdatePayload } from '../types/gateway.ts' import { Base } from './base.ts' import { VoiceState } from './voiceState.ts' import { RolesManager } from '../managers/roles.ts' +import { InviteManager } from '../managers/inviteManager.ts' import { GuildChannelsManager } from '../managers/guildChannels.ts' import { MembersManager } from '../managers/members.ts' import { Role } from './role.ts' @@ -66,7 +67,7 @@ export class Guild extends Base { approximateNumberCount?: number approximatePresenceCount?: number - constructor (client: Client, data: GuildPayload) { + constructor(client: Client, data: GuildPayload) { super(client, data) this.id = data.id this.unavailable = data.unavailable @@ -144,7 +145,7 @@ export class Guild extends Base { } } - protected readFromData (data: GuildPayload): void { + protected readFromData(data: GuildPayload): void { super.readFromData(data) this.id = data.id ?? this.id this.unavailable = data.unavailable ?? this.unavailable @@ -222,22 +223,22 @@ export class Guild extends Base { } } - async getEveryoneRole (): Promise { + async getEveryoneRole(): Promise { // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion return (await this.roles.get(this.id)) as Role } - async me (): Promise { + async me(): Promise { const get = await this.members.get(this.client.user?.id as string) if (get === undefined) throw new Error('Guild#me is not cached') return get } - async fetchIntegrations (): Promise { + async fetchIntegrations(): Promise { const raw = (await this.client.rest.get( GUILD_INTEGRATIONS(this.id) )) as GuildIntegrationPayload[] - return raw.map(e => new GuildIntegration(this.client, e)) + return raw.map((e) => new GuildIntegration(this.client, e)) } } @@ -258,7 +259,7 @@ export class GuildIntegration extends Base { revoked?: boolean application?: Application - constructor (client: Client, data: GuildIntegrationPayload) { + constructor(client: Client, data: GuildIntegrationPayload) { super(client, data) this.id = data.id From 620299462e6bd1abfc34c4fa0e5ea890190c65b1 Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Tue, 1 Dec 2020 20:03:05 +0530 Subject: [PATCH 04/14] fixed some weird sheez --- src/structures/guild.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/structures/guild.ts b/src/structures/guild.ts index 580f7b1..cb40208 100644 --- a/src/structures/guild.ts +++ b/src/structures/guild.ts @@ -10,7 +10,7 @@ import { PresenceUpdatePayload } from '../types/gateway.ts' import { Base } from './base.ts' import { VoiceState } from './voiceState.ts' import { RolesManager } from '../managers/roles.ts' -import { InviteManager } from '../managers/inviteManager.ts' +import { InviteManager } from '../managers/invites.ts' import { GuildChannelsManager } from '../managers/guildChannels.ts' import { MembersManager } from '../managers/members.ts' import { Role } from './role.ts' @@ -40,6 +40,7 @@ export class Guild extends Base { explicitContentFilter?: string roles: RolesManager emojis: GuildEmojisManager + invites: InviteManager features?: GuildFeatures[] mfaLevel?: string applicationID?: string From 07d62007424daec07e419b4ae2ab9e84c24ee4e2 Mon Sep 17 00:00:00 2001 From: DjDeveloper <43033058+DjDeveloperr@users.noreply.github.com> Date: Tue, 1 Dec 2020 20:58:01 +0530 Subject: [PATCH 05/14] feat(README) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 52f1bc9..ef03605 100644 --- a/README.md +++ b/README.md @@ -106,4 +106,4 @@ Small note: If editing the README, please conform to the [standard-readme](https ## License -[MIT © 2020 Helloyunho](LICENSE) +[MIT © 2020 Harmony Org](LICENSE) From 4fc5734ccc5e526964574cb3a4109b3abd6712ae Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Tue, 1 Dec 2020 22:08:15 +0530 Subject: [PATCH 06/14] added changes requested by Dj --- src/gateway/handlers/inviteCreate.ts | 10 +++++- src/gateway/handlers/inviteDelete.ts | 9 +++-- src/managers/invites.ts | 8 ++++- src/test/cmd.ts | 49 +++++++++++++++++++++++----- 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/src/gateway/handlers/inviteCreate.ts b/src/gateway/handlers/inviteCreate.ts index 80ab14c..ee4eaed 100644 --- a/src/gateway/handlers/inviteCreate.ts +++ b/src/gateway/handlers/inviteCreate.ts @@ -2,6 +2,7 @@ import { Gateway, GatewayEventHandler } from '../index.ts' import { Guild } from '../../structures/guild.ts' import { InviteCreatePayload } from '../../types/gateway.ts' import { ChannelPayload, GuildPayload, InvitePayload } from '../../../mod.ts' +import getChannelByType from '../../utils/getChannelByType.ts' export const inviteCreate: GatewayEventHandler = async ( gateway: Gateway, @@ -13,20 +14,27 @@ export const inviteCreate: GatewayEventHandler = async ( // Weird case, shouldn't happen if (guild === undefined) return - const cachedChannel = await guild.channels.get(d.channel_id) + /** + * TODO(DjDeveloperr): Add _get method in BaseChildManager + */ + const cachedChannel = await gateway.client.channels._get(d.channel_id) + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion const cachedGuild: GuildPayload | undefined = d.guild_id === undefined ? undefined : await guild.client.guilds._get(d.guild_id) + const dataConverted: InvitePayload = { code: d.code, guild: cachedGuild, + // had to use `as ChannelPayload` because the _get method returned `ChannelPayload | undefined` which errored channel: cachedChannel as ChannelPayload, inviter: d.inviter, target_user: d.target_user, target_user_type: d.target_user_type, } + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion await guild.invites.set(d.code, dataConverted) const invite = await guild.invites.get(d.code) diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts index 5f38e80..8540bd0 100644 --- a/src/gateway/handlers/inviteDelete.ts +++ b/src/gateway/handlers/inviteDelete.ts @@ -15,7 +15,10 @@ export const inviteDelete: GatewayEventHandler = async ( const cachedInvite = await guild.invites.get(d.code) // Should not happen but here we go - if (cachedInvite === undefined) return - - gateway.client.emit('inviteDelete', cachedInvite) + if (cachedInvite === undefined) { + return gateway.client.emit('inviteDeleteUncached', cachedInvite) + } else { + await guild.invites.delete(d.code) + gateway.client.emit('inviteDelete', cachedInvite) + } } diff --git a/src/managers/invites.ts b/src/managers/invites.ts index 167cec6..979ee46 100644 --- a/src/managers/invites.ts +++ b/src/managers/invites.ts @@ -13,6 +13,12 @@ export class InviteManager extends BaseManager { this.guild = guild } + async get(key: string): Promise { + const raw = await this._get(key) + if (raw === undefined) return + return new Invite(this.client, raw) + } + async fetch(id: string): Promise { return await new Promise((resolve, reject) => { this.client.rest @@ -31,4 +37,4 @@ export class InviteManager extends BaseManager { } return true } -} \ No newline at end of file +} diff --git a/src/test/cmd.ts b/src/test/cmd.ts index 85efd56..e8056a4 100644 --- a/src/test/cmd.ts +++ b/src/test/cmd.ts @@ -1,10 +1,18 @@ -import { Command, CommandClient, Intents, GuildChannel, CommandContext, Extension } from '../../mod.ts' +import { + Command, + CommandClient, + Intents, + GuildChannel, + CommandContext, + Extension, +} from '../../mod.ts' +import { Invite } from '../structures/invite.ts' import { TOKEN } from './config.ts' const client = new CommandClient({ - prefix: ["pls", "!"], + prefix: ['pls', '!'], spacesAfterPrefix: true, - mentionPrefix: true + mentionPrefix: true, }) client.on('debug', console.log) @@ -55,10 +63,21 @@ client.on('webhooksUpdate', (guild, channel) => { console.log(`Webhooks Updated in #${channel.name} from ${guild.name}`) }) -client.on("commandError", console.error) +client.on('inviteCreate', (invite: Invite) => { + console.log(`Invite Create: ${invite.code}`) +}) + +client.on('inviteDelete', (invite: Invite) => { + console.log(`Invite Delete: ${invite.code}`) +}) + +client.on('inviteDeleteUncached', (invite: Invite) => { + console.log(`Invite deleted uncached: ${invite}`) +}) + +client.on('commandError', console.error) class ChannelLog extends Extension { - onChannelCreate(ext: Extension, channel: GuildChannel): void { console.log(`Channel Created: ${channel.name}`) } @@ -81,15 +100,27 @@ class ChannelLog extends Extension { client.extensions.load(ChannelLog) client.on('messageDeleteBulk', (channel, messages, uncached) => { - console.log(`=== Message Delete Bulk ===\nMessages: ${messages.map(m => m.id).join(', ')}\nUncached: ${[...uncached.values()].join(', ')}`) + console.log( + `=== Message Delete Bulk ===\nMessages: ${messages + .map((m) => m.id) + .join(', ')}\nUncached: ${[...uncached.values()].join(', ')}` + ) }) client.on('channelUpdate', (before, after) => { - console.log(`Channel Update: ${(before as GuildChannel).name}, ${(after as GuildChannel).name}`) + console.log( + `Channel Update: ${(before as GuildChannel).name}, ${ + (after as GuildChannel).name + }` + ) }) client.on('typingStart', (user, channel, at, guildData) => { - console.log(`${user.tag} started typing in ${channel.id} at ${at}${guildData !== undefined ? `\nGuild: ${guildData.guild.name}` : ''}`) + console.log( + `${user.tag} started typing in ${channel.id} at ${at}${ + guildData !== undefined ? `\nGuild: ${guildData.guild.name}` : '' + }` + ) }) // client.on('raw', (evt: string) => console.log(`EVENT: ${evt}`)) @@ -106,4 +137,4 @@ for (const file of files) { console.log(`Loaded ${client.commands.count} commands!`) -client.connect(TOKEN, Intents.create(['GUILD_MEMBERS', 'GUILD_PRESENCES'])) \ No newline at end of file +client.connect(TOKEN, Intents.create(['GUILD_MEMBERS', 'GUILD_PRESENCES'])) From ba053d4b858809ae2771443d006ead643de3606b Mon Sep 17 00:00:00 2001 From: Aki <71239005+AkiaCode@users.noreply.github.com> Date: Wed, 2 Dec 2020 10:42:42 +0900 Subject: [PATCH 07/14] feat(LICENSE) --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index c4a1919..c52f6d0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 Helloyunho +Copyright (c) 2020 Harmony Org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From a97a94f63fd499452bfc4f1550608b8ec56ef3e6 Mon Sep 17 00:00:00 2001 From: DjDeveloper <43033058+DjDeveloperr@users.noreply.github.com> Date: Wed, 2 Dec 2020 10:00:14 +0530 Subject: [PATCH 08/14] feat(README): Add Discord Server --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ef03605..90af8c8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![banner](banner.png) -[![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) +[![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) [![Discord](https://img.shields.io/discord/591914197219016707.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/WVN2JF2FRv) **An easy to use Discord API Library for Deno.** * Lightweight and easy to use. @@ -22,6 +22,7 @@ Note: Library is yet under development and not completely usable. You're still a - [Usage](#usage) - [Docs](#docs) +- [Discord](#discord) - [Maintainer](#maintainer) - [Contributing](#contributing) - [License](#license) @@ -92,6 +93,10 @@ client.connect('super secret token comes here', Intents.All) Not made yet. +## Discord + +[![Widget for the Discord Server](https://discord.com/api/guilds/783319033205751809/widget.png?style=banner1)](https://discord.gg/WVN2JF2FRv) + ## Maintainer [@Helloyunho](https://github.com/Helloyunho) From e01d10dd66b0d59ca922d1646228831eb811c821 Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Wed, 2 Dec 2020 12:50:45 +0530 Subject: [PATCH 09/14] made requested changes --- src/gateway/handlers/inviteCreate.ts | 4 +--- src/gateway/handlers/inviteDelete.ts | 13 +++++++++++-- src/managers/invites.ts | 5 +++-- src/test/cmd.ts | 2 +- src/types/invite.ts | 7 +++++++ 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/gateway/handlers/inviteCreate.ts b/src/gateway/handlers/inviteCreate.ts index ee4eaed..b1e0f5d 100644 --- a/src/gateway/handlers/inviteCreate.ts +++ b/src/gateway/handlers/inviteCreate.ts @@ -2,7 +2,6 @@ import { Gateway, GatewayEventHandler } from '../index.ts' import { Guild } from '../../structures/guild.ts' import { InviteCreatePayload } from '../../types/gateway.ts' import { ChannelPayload, GuildPayload, InvitePayload } from '../../../mod.ts' -import getChannelByType from '../../utils/getChannelByType.ts' export const inviteCreate: GatewayEventHandler = async ( gateway: Gateway, @@ -29,13 +28,12 @@ export const inviteCreate: GatewayEventHandler = async ( code: d.code, guild: cachedGuild, // had to use `as ChannelPayload` because the _get method returned `ChannelPayload | undefined` which errored - channel: cachedChannel as ChannelPayload, + channel: (cachedChannel as unknown) as ChannelPayload, inviter: d.inviter, target_user: d.target_user, target_user_type: d.target_user_type, } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion await guild.invites.set(d.code, dataConverted) const invite = await guild.invites.get(d.code) gateway.client.emit('inviteCreate', invite) diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts index 8540bd0..ad3bd8c 100644 --- a/src/gateway/handlers/inviteDelete.ts +++ b/src/gateway/handlers/inviteDelete.ts @@ -1,6 +1,8 @@ import { Gateway, GatewayEventHandler } from '../index.ts' import { Guild } from '../../structures/guild.ts' import { InviteDeletePayload } from '../../types/gateway.ts' +import { PartialInvitePayload } from '../../types/invite.ts' +import { Channel } from '../../../mod.ts' export const inviteDelete: GatewayEventHandler = async ( gateway: Gateway, @@ -13,10 +15,17 @@ export const inviteDelete: GatewayEventHandler = async ( if (guild === undefined) return const cachedInvite = await guild.invites.get(d.code) + const cachedChannel = await gateway.client.channels.get(d.channel_id) + const cachedGuild = await gateway.client.guilds.get(d.guild_id!) - // Should not happen but here we go + // TODO(DjDeveloperr): Make it support self-bots and make Guild not always defined if (cachedInvite === undefined) { - return gateway.client.emit('inviteDeleteUncached', cachedInvite) + const uncachedInvite: PartialInvitePayload = { + guild: (cachedGuild as unknown) as Guild, + channel: (cachedChannel as unknown) as Channel, + code: d.code, + } + return gateway.client.emit('inviteDeleteUncached', uncachedInvite) } else { await guild.invites.delete(d.code) gateway.client.emit('inviteDelete', cachedInvite) diff --git a/src/managers/invites.ts b/src/managers/invites.ts index 979ee46..4a58755 100644 --- a/src/managers/invites.ts +++ b/src/managers/invites.ts @@ -23,9 +23,10 @@ export class InviteManager extends BaseManager { return await new Promise((resolve, reject) => { this.client.rest .get(GUILD_INVITES(this.guild.id)) - .then((data) => { + .then(async (data) => { this.set(id, data as InvitePayload) - resolve(new Invite(this.client, data as InvitePayload)) + const newInvite = await this.get(data.code) + resolve(newInvite) }) .catch((e) => reject(e)) }) diff --git a/src/test/cmd.ts b/src/test/cmd.ts index e8056a4..0a2f04d 100644 --- a/src/test/cmd.ts +++ b/src/test/cmd.ts @@ -72,7 +72,7 @@ client.on('inviteDelete', (invite: Invite) => { }) client.on('inviteDeleteUncached', (invite: Invite) => { - console.log(`Invite deleted uncached: ${invite}`) + console.log(invite) }) client.on('commandError', console.error) diff --git a/src/types/invite.ts b/src/types/invite.ts index 6120980..8969897 100644 --- a/src/types/invite.ts +++ b/src/types/invite.ts @@ -1,3 +1,4 @@ +import { Channel, Guild } from "../../mod.ts" import { ChannelPayload } from './channel.ts' import { GuildPayload } from './guild.ts' import { UserPayload } from './user.ts' @@ -12,3 +13,9 @@ export interface InvitePayload { approximate_presence_count?: number approximate_member_count?: number } + +export interface PartialInvitePayload { + code: string + channel: Channel + guild?: Guild +} \ No newline at end of file From 2fbd6c99fcf5890ad9d9e5154823911dfdb9bdba Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Wed, 2 Dec 2020 12:59:13 +0530 Subject: [PATCH 10/14] feat(invite gateway events) --- src/gateway/handlers/inviteDelete.ts | 1 - src/managers/invites.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts index ad3bd8c..e1e38c8 100644 --- a/src/gateway/handlers/inviteDelete.ts +++ b/src/gateway/handlers/inviteDelete.ts @@ -8,7 +8,6 @@ export const inviteDelete: GatewayEventHandler = async ( gateway: Gateway, d: InviteDeletePayload ) => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) // Weird case, shouldn't happen diff --git a/src/managers/invites.ts b/src/managers/invites.ts index 4a58755..6af3896 100644 --- a/src/managers/invites.ts +++ b/src/managers/invites.ts @@ -19,7 +19,7 @@ export class InviteManager extends BaseManager { return new Invite(this.client, raw) } - async fetch(id: string): Promise { + async fetch(id: string): Promise { return await new Promise((resolve, reject) => { this.client.rest .get(GUILD_INVITES(this.guild.id)) From e25e1d34c1a68e82a959a5714d1dc2da0751b9f8 Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Wed, 2 Dec 2020 13:11:48 +0530 Subject: [PATCH 11/14] #boycottEslint xD --- src/gateway/handlers/inviteDelete.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts index e1e38c8..0726a88 100644 --- a/src/gateway/handlers/inviteDelete.ts +++ b/src/gateway/handlers/inviteDelete.ts @@ -8,6 +8,7 @@ export const inviteDelete: GatewayEventHandler = async ( gateway: Gateway, d: InviteDeletePayload ) => { + // @eslint-disable-next-line @typescript-eslint/no-non-null-assertion const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) // Weird case, shouldn't happen @@ -15,6 +16,7 @@ export const inviteDelete: GatewayEventHandler = async ( const cachedInvite = await guild.invites.get(d.code) const cachedChannel = await gateway.client.channels.get(d.channel_id) + // @eslint-disable-next-line @typescript-eslint/no-non-null-assertion const cachedGuild = await gateway.client.guilds.get(d.guild_id!) // TODO(DjDeveloperr): Make it support self-bots and make Guild not always defined From d4b6fad79e042c9f0726695ed8b946ce07989491 Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Wed, 2 Dec 2020 13:14:30 +0530 Subject: [PATCH 12/14] hahaha --- src/gateway/handlers/inviteDelete.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts index 0726a88..f4f6836 100644 --- a/src/gateway/handlers/inviteDelete.ts +++ b/src/gateway/handlers/inviteDelete.ts @@ -8,7 +8,7 @@ export const inviteDelete: GatewayEventHandler = async ( gateway: Gateway, d: InviteDeletePayload ) => { - // @eslint-disable-next-line @typescript-eslint/no-non-null-assertion + //eslint-disable-next-line @typescript-eslint/no-non-null-assertion const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) // Weird case, shouldn't happen @@ -16,7 +16,7 @@ export const inviteDelete: GatewayEventHandler = async ( const cachedInvite = await guild.invites.get(d.code) const cachedChannel = await gateway.client.channels.get(d.channel_id) - // @eslint-disable-next-line @typescript-eslint/no-non-null-assertion + //eslint-disable-next-line @typescript-eslint/no-non-null-assertion const cachedGuild = await gateway.client.guilds.get(d.guild_id!) // TODO(DjDeveloperr): Make it support self-bots and make Guild not always defined From afbf9c4d5f3e71681322b91316c08da0e60176ca Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Wed, 2 Dec 2020 13:19:58 +0530 Subject: [PATCH 13/14] -_- --- src/gateway/handlers/inviteDelete.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gateway/handlers/inviteDelete.ts b/src/gateway/handlers/inviteDelete.ts index f4f6836..8e77d13 100644 --- a/src/gateway/handlers/inviteDelete.ts +++ b/src/gateway/handlers/inviteDelete.ts @@ -8,7 +8,7 @@ export const inviteDelete: GatewayEventHandler = async ( gateway: Gateway, d: InviteDeletePayload ) => { - //eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const guild: Guild | undefined = await gateway.client.guilds.get(d.guild_id!) // Weird case, shouldn't happen @@ -16,7 +16,7 @@ export const inviteDelete: GatewayEventHandler = async ( const cachedInvite = await guild.invites.get(d.code) const cachedChannel = await gateway.client.channels.get(d.channel_id) - //eslint-disable-next-line @typescript-eslint/no-non-null-assertion + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const cachedGuild = await gateway.client.guilds.get(d.guild_id!) // TODO(DjDeveloperr): Make it support self-bots and make Guild not always defined From 385731cd91cf3442a9becc118b4324e0d8266b0e Mon Sep 17 00:00:00 2001 From: Helloyunho Date: Wed, 2 Dec 2020 16:58:54 +0900 Subject: [PATCH 14/14] Oops mistake --- src/gateway/handlers/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gateway/handlers/index.ts b/src/gateway/handlers/index.ts index ae913b0..87e014e 100644 --- a/src/gateway/handlers/index.ts +++ b/src/gateway/handlers/index.ts @@ -78,7 +78,7 @@ export const gatewayHandlers: { MESSAGE_REACTION_REMOVE_EMOJI: undefined, PRESENCE_UPDATE: undefined, TYPING_START: typingStart, - USER_UPDATE: userUpdate + USER_UPDATE: userUpdate, VOICE_STATE_UPDATE: voiceStateUpdate, VOICE_SERVER_UPDATE: voiceServerUpdate, WEBHOOKS_UPDATE: webhooksUpdate