From 4fc5734ccc5e526964574cb3a4109b3abd6712ae Mon Sep 17 00:00:00 2001 From: CyberKnight007 Date: Tue, 1 Dec 2020 22:08:15 +0530 Subject: [PATCH] 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']))