diff --git a/handlers/guilds/GUILD_CREATE.ts b/handlers/guilds/GUILD_CREATE.ts index 52d4764e5..95728e445 100644 --- a/handlers/guilds/GUILD_CREATE.ts +++ b/handlers/guilds/GUILD_CREATE.ts @@ -1,7 +1,8 @@ import type { Bot } from "../../bot.ts"; +import type { Guild } from "../../transformers/guild.ts"; import { DiscordGatewayPayload, DiscordGuild } from "../../types/discord.ts"; export function handleGuildCreate(bot: Bot, data: DiscordGatewayPayload, shardId: number) { const payload = data.d as DiscordGuild; - bot.events.guildCreate(bot, bot.transformers.guild(bot, { guild: payload, shardId })); + bot.events.guildCreate(bot, bot.transformers.guild(bot, { guild: payload, shardId }) as Guild); } diff --git a/handlers/guilds/GUILD_LOADED_DD.ts b/handlers/guilds/GUILD_LOADED_DD.ts index 7ae89e5d2..2ccb44dfb 100644 --- a/handlers/guilds/GUILD_LOADED_DD.ts +++ b/handlers/guilds/GUILD_LOADED_DD.ts @@ -1,9 +1,10 @@ import type { Bot } from "../../bot.ts"; +import type { Guild } from "../../transformers/guild.ts"; import { DiscordGatewayPayload, DiscordGuild } from "../../types/discord.ts"; export function handleGuildLoaded(bot: Bot, data: DiscordGatewayPayload, shardId: number) { const payload = data.d as DiscordGuild; const guild = bot.transformers.guild(bot, { guild: payload, shardId }); - bot.events.guildLoaded(bot, guild); + bot.events.guildLoaded(bot, guild as Guild); } diff --git a/handlers/guilds/GUILD_UPDATE.ts b/handlers/guilds/GUILD_UPDATE.ts index 9f457be70..d360ae7c7 100644 --- a/handlers/guilds/GUILD_UPDATE.ts +++ b/handlers/guilds/GUILD_UPDATE.ts @@ -1,8 +1,9 @@ import type { Bot } from "../../bot.ts"; +import type { Guild } from "../../transformers/guild.ts"; import { DiscordGatewayPayload, DiscordGuild } from "../../types/discord.ts"; -export async function handleGuildUpdate(bot: Bot, data: DiscordGatewayPayload, shardId: number) { +export function handleGuildUpdate(bot: Bot, data: DiscordGatewayPayload, shardId: number) { const payload = data.d as DiscordGuild; - bot.events.guildUpdate(bot, bot.transformers.guild(bot, { guild: payload, shardId })); + bot.events.guildUpdate(bot, bot.transformers.guild(bot, { guild: payload, shardId }) as Guild); } diff --git a/helpers/guilds/scheduledEvents/getScheduledEventUsers.ts b/helpers/guilds/scheduledEvents/getScheduledEventUsers.ts index e25d9e389..10ef6d0a9 100644 --- a/helpers/guilds/scheduledEvents/getScheduledEventUsers.ts +++ b/helpers/guilds/scheduledEvents/getScheduledEventUsers.ts @@ -45,7 +45,7 @@ export async function getScheduledEventUsers( return new Collection( result.map((res) => { const user = bot.transformers.user(bot, res.user); - const member = bot.transformers.member(bot, res.member!, guildId, user.id); + const member: Member = bot.transformers.member(bot, res.member!, guildId, user.id); return [user.id, { member, user }]; }), diff --git a/plugins/cache/src/dispatchRequirements.ts b/plugins/cache/src/dispatchRequirements.ts index 870fe241a..722ca1459 100644 --- a/plugins/cache/src/dispatchRequirements.ts +++ b/plugins/cache/src/dispatchRequirements.ts @@ -1,3 +1,4 @@ +import type { Guild } from "../deps.ts"; import { Bot, DiscordGatewayPayload } from "../deps.ts"; import { BotWithCache } from "./addCacheCollections.ts"; @@ -55,7 +56,7 @@ export async function dispatchRequirements( .getGuild(id, { counts: true, }) - .catch(console.log)); + .catch(console.log)) as Guild; if (!guild) { processing.delete(id); diff --git a/plugins/cache/src/setupCacheRemovals.ts b/plugins/cache/src/setupCacheRemovals.ts index 838da345a..021ff3ac4 100644 --- a/plugins/cache/src/setupCacheRemovals.ts +++ b/plugins/cache/src/setupCacheRemovals.ts @@ -1,3 +1,5 @@ +import type { Emoji, Guild } from "../deps.ts"; +import type { BotWithCache } from "./addCacheCollections.ts"; import { Bot, Collection, @@ -10,7 +12,6 @@ import { DiscordMessageDeleteBulk, DiscordUnavailableGuild, } from "../deps.ts"; -import { BotWithCache } from "./addCacheCollections.ts"; export function setupCacheRemovals(bot: BotWithCache) { const { @@ -67,10 +68,11 @@ export function setupCacheRemovals(bot: BotWithCache) { bot.handlers.GUILD_EMOJIS_UPDATE = function (_, data, shardId) { const payload = data.d as DiscordGuildEmojisUpdate; - const guild = bot.guilds.get(bot.transformers.snowflake(payload.guild_id)); + const guild= bot.guilds.get(bot.transformers.snowflake(payload.guild_id)); + if (guild) { - guild.emojis = new Collection(payload.emojis.map((e) => { - const emoji = bot.transformers.emoji(bot, e); + guild.emojis! = new Collection(payload.emojis.map((e) => { + const emoji: Emoji = bot.transformers.emoji(bot, e); return [emoji.id!, emoji]; })); } diff --git a/transformers/guild.ts b/transformers/guild.ts index 41a57fdca..f02da4d97 100644 --- a/transformers/guild.ts +++ b/transformers/guild.ts @@ -1,3 +1,4 @@ +import type { Emoji } from "../transformers/emoji.ts"; import { Bot } from "../bot.ts"; import { Collection } from "../util/collection.ts"; import { DiscordGuild } from "../types/discord.ts"; @@ -69,7 +70,7 @@ export function transformGuild( ), emojis: new Collection( (payload.guild.emojis || []).map((emoji) => { - const em = bot.transformers.emoji(bot, emoji); + const em: Emoji = bot.transformers.emoji(bot, emoji); return [em.id!, em]; }), ), diff --git a/transformers/interaction.ts b/transformers/interaction.ts index 6a89a6b46..9f1cdf96a 100644 --- a/transformers/interaction.ts +++ b/transformers/interaction.ts @@ -66,7 +66,7 @@ export function transformInteractionDataResolved( if (resolved.messages) { transformed.messages = new Collection( Object.entries(resolved.messages).map(([id, value]) => { - const message = bot.transformers.message(bot, value); + const message: Message = bot.transformers.message(bot, value); return [message.id, message]; }), ); @@ -84,7 +84,7 @@ export function transformInteractionDataResolved( if (guildId && resolved.members) { transformed.members = new Collection( Object.entries(resolved.members).map(([id, value]) => { - const member = bot.transformers.member(bot, value, guildId, bot.transformers.snowflake(id)); + const member: Member = bot.transformers.member(bot, value, guildId, bot.transformers.snowflake(id)); return [member.id, member]; }), ); diff --git a/types/shared.ts b/types/shared.ts index 665aff980..562b8f569 100644 --- a/types/shared.ts +++ b/types/shared.ts @@ -1242,10 +1242,6 @@ export type Camelize = { : never; }; -export type KeysWithUndefined = { - [K in keyof T]-?: undefined extends T[K] ? K : never; -}[keyof T]; - // export type Optionalize = T extends object ? // & { // [K in KeysWithUndefined]?: Optionalize; @@ -1255,12 +1251,18 @@ export type KeysWithUndefined = { // } // : T; -export type Optionalize = { - [K in KeysWithUndefined]?: Optionalize -} & { - [K in Exclude>]: T[K] extends object - ? {} extends Pick - ? T[K] - : Optionalize - : T[K] -} +export type KeysWithUndefined = { + [K in keyof T]-?: (undefined | null) extends T[K] ? K : never; +}[keyof T]; + +export type Optionalize = ( + & { + [K in KeysWithUndefined]?: Optionalize; + } + & { + [K in Exclude>]: ( + // deno-lint-ignore ban-types + T[K] extends object ? Object extends Pick ? T[K] : Optionalize : T[K] + ); + } +); \ No newline at end of file diff --git a/util/collection.ts b/util/collection.ts index 2a98de938..26d28192b 100644 --- a/util/collection.ts +++ b/util/collection.ts @@ -1,8 +1,8 @@ import { Bot } from "../bot.ts"; export class Collection extends Map { - maxSize?: number; - sweeper?: CollectionSweeper & { intervalId?: number }; + maxSize: number | undefined; + sweeper: CollectionSweeper & { intervalId?: number } | undefined; constructor(entries?: (readonly (readonly [K, V])[] | null) | Map, options?: CollectionOptions) { super(entries ?? []);