From c7ed54ac3f0cf1de2cadc7368e3455debedc9713 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?T=C3=86MB=C3=98?= <69138346+TAEMBO@users.noreply.github.com>
Date: Tue, 17 Sep 2024 01:18:08 -0700
Subject: [PATCH] types(MessageEditOptions): Omit `poll` (#10509)
fix: creating poll from message edit
Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
---
packages/discord.js/src/structures/Webhook.js | 2 +-
.../interfaces/InteractionResponses.js | 2 +-
.../structures/interfaces/TextBasedChannel.js | 7 +-
packages/discord.js/typings/index.d.ts | 227 +++++++++---------
packages/discord.js/typings/index.test-d.ts | 10 +
5 files changed, 134 insertions(+), 114 deletions(-)
diff --git a/packages/discord.js/src/structures/Webhook.js b/packages/discord.js/src/structures/Webhook.js
index 9b2bad0d5467..e52ec14040ae 100644
--- a/packages/discord.js/src/structures/Webhook.js
+++ b/packages/discord.js/src/structures/Webhook.js
@@ -126,7 +126,7 @@ class Webhook {
/**
* Options that can be passed into send.
- * @typedef {BaseMessageOptions} WebhookMessageCreateOptions
+ * @typedef {BaseMessageOptionsWithPoll} WebhookMessageCreateOptions
* @property {boolean} [tts=false] Whether the message should be spoken aloud
* @property {MessageFlags} [flags] Which flags to set for the message.
* Only the {@link MessageFlags.SuppressEmbeds} flag can be set.
diff --git a/packages/discord.js/src/structures/interfaces/InteractionResponses.js b/packages/discord.js/src/structures/interfaces/InteractionResponses.js
index 5be435199cb1..ea0e7adebd90 100644
--- a/packages/discord.js/src/structures/interfaces/InteractionResponses.js
+++ b/packages/discord.js/src/structures/interfaces/InteractionResponses.js
@@ -44,7 +44,7 @@ class InteractionResponses {
/**
* Options for a reply to a {@link BaseInteraction}.
- * @typedef {BaseMessageOptions|SharedInteractionResponseOptions} InteractionReplyOptions
+ * @typedef {BaseMessageOptionsWithPoll} InteractionReplyOptions
* @property {boolean} [tts=false] Whether the message should be spoken aloud
* @property {boolean} [ephemeral] Whether the reply should be ephemeral
* @property {boolean} [fetchReply] Whether to fetch the reply
diff --git a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js
index c3f5a9e6c573..d2e408580253 100644
--- a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js
+++ b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js
@@ -80,6 +80,11 @@ class TextBasedChannel {
* The files to send with the message.
* @property {Array<(ActionRowBuilder|ActionRow|APIActionRowComponent)>} [components]
* Action rows containing interactive components for the message (buttons, select menus)
+ */
+
+ /**
+ * The base message options for messages including a poll.
+ * @typedef {BaseMessageOptions} BaseMessageOptionsWithPoll
* @property {PollData} [poll] The poll to send with the message
*/
@@ -93,7 +98,7 @@ class TextBasedChannel {
/**
* The options for sending a message.
- * @typedef {BaseMessageOptions} BaseMessageCreateOptions
+ * @typedef {BaseMessageOptionsWithPoll} BaseMessageCreateOptions
* @property {boolean} [tts=false] Whether the message should be spoken aloud
* @property {string} [nonce] The nonce for the message
* This property is required if `enforceNonce` set to `true`.
diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts
index 4d186b21b4c5..0d5f928ea603 100644
--- a/packages/discord.js/typings/index.d.ts
+++ b/packages/discord.js/typings/index.d.ts
@@ -670,7 +670,7 @@ export class BaseGuildEmoji extends Emoji {
}
// tslint:disable-next-line no-empty-interface
-export interface BaseGuildTextChannel extends TextBasedChannelFields {}
+export interface BaseGuildTextChannel extends TextBasedChannelFields { }
export class BaseGuildTextChannel extends GuildChannel {
protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean);
public defaultAutoArchiveDuration?: ThreadAutoArchiveDuration;
@@ -691,7 +691,7 @@ export class BaseGuildTextChannel extends GuildChannel {
}
// tslint:disable-next-line no-empty-interface
-export interface BaseGuildVoiceChannel extends Omit, 'lastPinTimestamp' | 'lastPinAt'> {}
+export interface BaseGuildVoiceChannel extends Omit, 'lastPinTimestamp' | 'lastPinAt'> { }
export class BaseGuildVoiceChannel extends GuildChannel {
public constructor(guild: Guild, data?: RawGuildChannelData);
public bitrate: number;
@@ -865,11 +865,11 @@ export {
StringSelectMenuComponent as SelectMenuComponent,
};
-export class UserSelectMenuComponent extends BaseSelectMenuComponent {}
+export class UserSelectMenuComponent extends BaseSelectMenuComponent { }
-export class RoleSelectMenuComponent extends BaseSelectMenuComponent {}
+export class RoleSelectMenuComponent extends BaseSelectMenuComponent { }
-export class MentionableSelectMenuComponent extends BaseSelectMenuComponent {}
+export class MentionableSelectMenuComponent extends BaseSelectMenuComponent { }
export class ChannelSelectMenuComponent extends BaseSelectMenuComponent {
public getChannelTypes(): ChannelType[] | null;
@@ -896,9 +896,9 @@ export interface IconData {
proxyIconURL?: string;
}
-export interface EmbedAuthorData extends Omit, IconData {}
+export interface EmbedAuthorData extends Omit, IconData { }
-export interface EmbedFooterData extends Omit, IconData {}
+export interface EmbedFooterData extends Omit, IconData { }
export interface EmbedAssetData extends Omit {
proxyURL?: string;
@@ -993,8 +993,8 @@ export abstract class BaseChannel extends Base {
export type If = Value extends true
? TrueResult
: Value extends false
- ? FalseResult
- : TrueResult | FalseResult;
+ ? FalseResult
+ : TrueResult | FalseResult;
export class Client extends BaseClient {
public constructor(options: ClientOptions);
@@ -1273,8 +1273,8 @@ export class CommandInteractionOptionResolver['channel']>,
{
type: Type extends ChannelType.PublicThread | ChannelType.AnnouncementThread
- ? ChannelType.PublicThread | ChannelType.AnnouncementThread
- : Type;
+ ? ChannelType.PublicThread | ChannelType.AnnouncementThread
+ : Type;
}
>;
/**
@@ -1291,8 +1291,8 @@ export class CommandInteractionOptionResolver['channel']>,
{
type: Type extends ChannelType.PublicThread | ChannelType.AnnouncementThread
- ? ChannelType.PublicThread | ChannelType.AnnouncementThread
- : Type;
+ ? ChannelType.PublicThread | ChannelType.AnnouncementThread
+ : Type;
}
> | null;
public getString(name: string, required: true): string;
@@ -1345,7 +1345,7 @@ export interface DMChannel
extends Omit<
TextBasedChannelFields,
'bulkDelete' | 'fetchWebhooks' | 'createWebhook' | 'setRateLimitPerUser' | 'setNSFW'
- > {}
+ > { }
export class DMChannel extends BaseChannel {
private constructor(client: Client, data?: RawDMChannelData);
public flags: Readonly;
@@ -1560,11 +1560,11 @@ export class GuildAuditLogs {
private constructor(guild: Guild, data: RawGuildAuditLogEntryData, logs?: GuildAuditLogs);
@@ -1662,7 +1662,7 @@ export class GuildMemberFlagsBitField extends BitField {
public static resolve(bit?: BitFieldResolvable): number;
}
-export interface GuildMember extends PartialTextBasedChannelFields {}
+export interface GuildMember extends PartialTextBasedChannelFields { }
export class GuildMember extends Base {
private constructor(client: Client, data: RawGuildMemberData, guild: Guild);
private _roles: Snowflake[];
@@ -1912,10 +1912,10 @@ export type CacheTypeReducer<
> = [State] extends ['cached']
? CachedType
: [State] extends ['raw']
- ? RawType
- : [State] extends ['raw' | 'cached']
- ? PresentType
- : Fallback;
+ ? RawType
+ : [State] extends ['raw' | 'cached']
+ ? PresentType
+ : Fallback;
export type Interaction =
| ChatInputCommandInteraction
@@ -2052,7 +2052,7 @@ export class InteractionCollector exte
}
// tslint:disable-next-line no-empty-interface
-export interface InteractionWebhook extends PartialWebhookFields {}
+export interface InteractionWebhook extends PartialWebhookFields { }
export class InteractionWebhook {
public constructor(client: Client, id: Snowflake, token: string);
public readonly client: Client;
@@ -2148,9 +2148,9 @@ export interface AwaitMessageCollectorOptionsParams<
ComponentType extends MessageComponentType,
Cached extends boolean = boolean,
> extends Pick<
- InteractionCollectorOptions[ComponentType]>,
- keyof AwaitMessageComponentOptions
- > {
+ InteractionCollectorOptions[ComponentType]>,
+ keyof AwaitMessageComponentOptions
+> {
componentType?: ComponentType;
}
@@ -2637,7 +2637,7 @@ export interface ThreadOnlyChannel
| 'awaitMessages'
| 'createMessageComponentCollector'
| 'awaitMessageComponent'
- > {}
+ > { }
export abstract class ThreadOnlyChannel extends GuildChannel {
public type: ChannelType.GuildForum | ChannelType.GuildMedia;
public threads: GuildForumThreadManager;
@@ -3338,7 +3338,7 @@ export interface PrivateThreadChannel extends ThreadChannel {
// tslint:disable-next-line no-empty-interface
export interface ThreadChannel
- extends Omit, 'fetchWebhooks' | 'createWebhook' | 'setNSFW'> {}
+ extends Omit, 'fetchWebhooks' | 'createWebhook' | 'setNSFW'> { }
export class ThreadChannel extends BaseChannel {
private constructor(guild: Guild, data?: RawThreadChannelData, client?: Client);
public archived: boolean | null;
@@ -3437,7 +3437,7 @@ export interface AvatarDecorationData {
}
// tslint:disable-next-line no-empty-interface
-export interface User extends PartialTextBasedChannelFields {}
+export interface User extends PartialTextBasedChannelFields { }
export class User extends Base {
protected constructor(client: Client, data: RawUserData);
private _equals(user: APIUser): boolean;
@@ -3701,7 +3701,7 @@ export class VoiceState extends Base {
}
// tslint:disable-next-line no-empty-interface
-export interface Webhook extends WebhookFields {}
+export interface Webhook extends WebhookFields { }
export class Webhook {
private constructor(client: Client, data?: RawWebhookData);
public avatar: string | null;
@@ -3716,8 +3716,8 @@ export class Webhook {
public token: Type extends WebhookType.Incoming
? string
: Type extends WebhookType.ChannelFollower
- ? null
- : string | null;
+ ? null
+ : string | null;
public type: Type;
public applicationId: Type extends WebhookType.Application ? Snowflake : null;
public get channel(): TextChannel | VoiceChannel | NewsChannel | StageChannel | ForumChannel | MediaChannel | null;
@@ -3737,7 +3737,7 @@ export class Webhook {
}
// tslint:disable-next-line no-empty-interface
-export interface WebhookClient extends WebhookFields, BaseClient {}
+export interface WebhookClient extends WebhookFields, BaseClient { }
export class WebhookClient extends BaseClient {
public constructor(data: WebhookClientData, options?: WebhookClientOptions);
public readonly client: this;
@@ -4224,23 +4224,23 @@ export class ApplicationCommandPermissionsManager<
public remove(
options:
| (FetchSingleOptions & {
- token: string;
- channels?: readonly (GuildChannelResolvable | ChannelPermissionConstant)[];
- roles?: readonly (RoleResolvable | RolePermissionConstant)[];
- users: readonly UserResolvable[];
- })
+ token: string;
+ channels?: readonly (GuildChannelResolvable | ChannelPermissionConstant)[];
+ roles?: readonly (RoleResolvable | RolePermissionConstant)[];
+ users: readonly UserResolvable[];
+ })
| (FetchSingleOptions & {
- token: string;
- channels?: readonly (GuildChannelResolvable | ChannelPermissionConstant)[];
- roles: readonly (RoleResolvable | RolePermissionConstant)[];
- users?: readonly UserResolvable[];
- })
+ token: string;
+ channels?: readonly (GuildChannelResolvable | ChannelPermissionConstant)[];
+ roles: readonly (RoleResolvable | RolePermissionConstant)[];
+ users?: readonly UserResolvable[];
+ })
| (FetchSingleOptions & {
- token: string;
- channels: readonly (GuildChannelResolvable | ChannelPermissionConstant)[];
- roles?: readonly (RoleResolvable | RolePermissionConstant)[];
- users?: readonly UserResolvable[];
- }),
+ token: string;
+ channels: readonly (GuildChannelResolvable | ChannelPermissionConstant)[];
+ roles?: readonly (RoleResolvable | RolePermissionConstant)[];
+ users?: readonly UserResolvable[];
+ }),
): Promise;
public set(
options: FetchSingleOptions & EditApplicationCommandPermissionsMixin,
@@ -4318,7 +4318,7 @@ export class EntitlementManager extends CachedManager;
}
-export interface FetchGuildApplicationCommandFetchOptions extends Omit {}
+export interface FetchGuildApplicationCommandFetchOptions extends Omit { }
export class GuildApplicationCommandManager extends ApplicationCommandManager {
private constructor(guild: Guild, iterable?: Iterable);
@@ -4781,7 +4781,7 @@ export interface WebhookFields extends PartialWebhookFields {
//#region Typedefs
-export interface ActivitiesOptions extends Omit {}
+export interface ActivitiesOptions extends Omit { }
export interface ActivityOptions {
name: string;
@@ -5141,10 +5141,10 @@ export interface AutoModerationTriggerMetadata {
}
export interface AwaitMessageComponentOptions
- extends Omit, 'max' | 'maxComponents' | 'maxUsers'> {}
+ extends Omit, 'max' | 'maxComponents' | 'maxUsers'> { }
export interface ModalSubmitInteractionCollectorOptions
- extends Omit, 'channel' | 'message' | 'guild' | 'interactionType'> {}
+ extends Omit, 'channel' | 'message' | 'guild' | 'interactionType'> { }
export interface AwaitModalSubmitOptions
extends Omit, 'max' | 'maxComponents' | 'maxUsers'> {
@@ -5166,7 +5166,7 @@ export interface BanOptions {
reason?: string;
}
-export interface BulkBanOptions extends Omit {}
+export interface BulkBanOptions extends Omit { }
export interface BulkBanResult {
bannedUsers: readonly Snowflake[];
@@ -5254,8 +5254,8 @@ export type CacheFactory = (
export type CacheWithLimitsOptions = {
[K in keyof Caches]?: Caches[K][0]['prototype'] extends DataManager
- ? LimitedCollectionOptions | number
- : never;
+ ? LimitedCollectionOptions | number
+ : never;
};
export interface CategoryCreateChannelOptions {
@@ -5520,9 +5520,9 @@ export interface CommandInteractionResolvedData {
focused: true;
type:
- | ApplicationCommandOptionType.String
- | ApplicationCommandOptionType.Integer
- | ApplicationCommandOptionType.Number;
+ | ApplicationCommandOptionType.String
+ | ApplicationCommandOptionType.Integer
+ | ApplicationCommandOptionType.Number;
value: string;
}
@@ -5942,20 +5942,20 @@ export interface GuildAuditLogsEntryExtraField {
[AuditLogEvent.MessageUnpin]: { channel: GuildTextBasedChannel | { id: Snowflake }; messageId: Snowflake };
[AuditLogEvent.MemberDisconnect]: { count: number };
[AuditLogEvent.ChannelOverwriteCreate]:
- | Role
- | GuildMember
- | { id: Snowflake; name: string; type: AuditLogOptionsType.Role }
- | { id: Snowflake; type: AuditLogOptionsType.Member };
+ | Role
+ | GuildMember
+ | { id: Snowflake; name: string; type: AuditLogOptionsType.Role }
+ | { id: Snowflake; type: AuditLogOptionsType.Member };
[AuditLogEvent.ChannelOverwriteUpdate]:
- | Role
- | GuildMember
- | { id: Snowflake; name: string; type: AuditLogOptionsType.Role }
- | { id: Snowflake; type: AuditLogOptionsType.Member };
+ | Role
+ | GuildMember
+ | { id: Snowflake; name: string; type: AuditLogOptionsType.Role }
+ | { id: Snowflake; type: AuditLogOptionsType.Member };
[AuditLogEvent.ChannelOverwriteDelete]:
- | Role
- | GuildMember
- | { id: Snowflake; name: string; type: AuditLogOptionsType.Role }
- | { id: Snowflake; type: AuditLogOptionsType.Member };
+ | Role
+ | GuildMember
+ | { id: Snowflake; name: string; type: AuditLogOptionsType.Role }
+ | { id: Snowflake; type: AuditLogOptionsType.Member };
[AuditLogEvent.StageInstanceCreate]: StageChannel | { id: Snowflake };
[AuditLogEvent.StageInstanceDelete]: StageChannel | { id: Snowflake };
[AuditLogEvent.StageInstanceUpdate]: StageChannel | { id: Snowflake };
@@ -5984,8 +5984,8 @@ export interface GuildAuditLogsEntryTargetField> {}
+export interface AutoModerationRuleEditOptions extends Partial> { }
-export interface AutoModerationTriggerMetadataOptions extends Partial {}
+export interface AutoModerationTriggerMetadataOptions extends Partial { }
export interface AutoModerationActionOptions {
type: AutoModerationActionType;
@@ -6241,10 +6241,10 @@ export type GuildScheduledEventResolvable = Snowflake | GuildScheduledEvent;
export type GuildScheduledEventSetStatusArg =
Status extends GuildScheduledEventStatus.Scheduled
- ? GuildScheduledEventStatus.Active | GuildScheduledEventStatus.Canceled
- : Status extends GuildScheduledEventStatus.Active
- ? GuildScheduledEventStatus.Completed
- : never;
+ ? GuildScheduledEventStatus.Active | GuildScheduledEventStatus.Canceled
+ : Status extends GuildScheduledEventStatus.Active
+ ? GuildScheduledEventStatus.Completed
+ : never;
export interface GuildScheduledEventUser {
guildScheduledEventId: Snowflake;
@@ -6331,9 +6331,9 @@ export interface InteractionDeferReplyOptions extends SharedInteractionResponseO
fetchReply?: boolean;
}
-export interface InteractionDeferUpdateOptions extends Omit {}
+export interface InteractionDeferUpdateOptions extends Omit { }
-export interface InteractionReplyOptions extends BaseMessageOptions, SharedInteractionResponseOptions {
+export interface InteractionReplyOptions extends BaseMessageOptionsWithPoll {
tts?: boolean;
ephemeral?: boolean;
fetchReply?: boolean;
@@ -6445,10 +6445,10 @@ export type CollectedMessageInteraction =
>;
export interface MessageComponentCollectorOptions
- extends Omit, 'channel' | 'message' | 'guild' | 'interactionType'> {}
+ extends Omit, 'channel' | 'message' | 'guild' | 'interactionType'> { }
export interface MessageChannelComponentCollectorOptions
- extends Omit, 'channel' | 'guild' | 'interactionType'> {}
+ extends Omit, 'channel' | 'guild' | 'interactionType'> { }
export interface MessageInteractionMetadata {
id: Snowflake;
@@ -6501,10 +6501,13 @@ export interface BaseMessageOptions {
| ActionRowData
| APIActionRowComponent
)[];
+}
+
+export interface BaseMessageOptionsWithPoll extends BaseMessageOptions {
poll?: PollData;
}
-export interface MessageCreateOptions extends BaseMessageOptions {
+export interface MessageCreateOptions extends BaseMessageOptionsWithPoll {
tts?: boolean;
nonce?: string | number;
enforceNonce?: boolean;
@@ -6517,8 +6520,8 @@ export interface MessageCreateOptions extends BaseMessageOptions {
}
export interface GuildForumThreadMessageCreateOptions
- extends Omit,
- Pick {}
+ extends BaseMessageOptions,
+ Pick { }
export interface MessageEditAttachmentData {
id: Snowflake;
@@ -6649,7 +6652,7 @@ export type PermissionResolvable = BitFieldResolvable extends ReadonlyArray> {}
+export interface RecursiveReadonlyArray extends ReadonlyArray> { }
export interface PartialRecipient {
username: string;
@@ -6695,30 +6698,30 @@ export type Partialize<
NullableKeys extends keyof PartialType | null = null,
OverridableKeys extends keyof PartialType | '' = '',
> = {
- [K in keyof Omit]: K extends 'partial'
+ [K in keyof Omit]: K extends 'partial'
? true
: K extends NulledKeys
- ? null
- : K extends NullableKeys
- ? PartialType[K] | null
- : PartialType[K];
-};
+ ? null
+ : K extends NullableKeys
+ ? PartialType[K] | null
+ : PartialType[K];
+ };
export interface PartialDMChannel extends Partialize {
lastMessageId: undefined;
}
-export interface PartialGuildMember extends Partialize {}
+export interface PartialGuildMember extends Partialize { }
export interface PartialMessage
- extends Partialize {}
+ extends Partialize { }
-export interface PartialMessageReaction extends Partialize {}
+export interface PartialMessageReaction extends Partialize { }
export interface PartialGuildScheduledEvent
- extends Partialize {}
+ extends Partialize { }
-export interface PartialThreadMember extends Partialize {}
+export interface PartialThreadMember extends Partialize { }
export interface PartialOverwriteData {
id: Snowflake | number;
@@ -6741,7 +6744,7 @@ export enum Partials {
ThreadMember,
}
-export interface PartialUser extends Partialize {}
+export interface PartialUser extends Partialize { }
export type PresenceStatusData = ClientPresenceStatus | 'invisible';
@@ -6904,8 +6907,8 @@ export interface SweeperDefinitions {
export type SweeperOptions = {
[Key in keyof SweeperDefinitions]?: SweeperDefinitions[Key][2] extends true
- ? SweepOptions | LifetimeSweepOptions
- : SweepOptions;
+ ? SweepOptions | LifetimeSweepOptions
+ : SweepOptions;
};
export interface LimitedCollectionOptions {
@@ -7011,7 +7014,7 @@ export interface WebhookClientDataURL {
url: string;
}
-export interface WebhookClientOptions extends Pick {}
+export interface WebhookClientOptions extends Pick { }
export interface WebhookDeleteOptions {
token?: string;
@@ -7029,7 +7032,9 @@ export interface WebhookMessageEditOptions extends Omit {
message?: MessageResolvable | '@original';
}
@@ -7094,14 +7099,14 @@ export interface ClientApplicationInstallParams {
export type Serialized = Value extends symbol | bigint | (() => any)
? never
: Value extends number | string | boolean | undefined
- ? Value
- : Value extends JSONEncodable
- ? JSONResult
- : Value extends ReadonlyArray
- ? Serialized[]
- : Value extends ReadonlyMap | ReadonlySet
- ? {}
- : { [K in keyof Value]: Serialized };
+ ? Value
+ : Value extends JSONEncodable
+ ? JSONResult
+ : Value extends ReadonlyArray
+ ? Serialized[]
+ : Value extends ReadonlyMap | ReadonlySet
+ ? {}
+ : { [K in keyof Value]: Serialized };
//#endregion
diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts
index 1f499be832d6..f23023f1acca 100644
--- a/packages/discord.js/typings/index.test-d.ts
+++ b/packages/discord.js/typings/index.test-d.ts
@@ -210,6 +210,7 @@ import {
ApplicationEmojiManager,
StickerPack,
SendableChannels,
+ PollData,
} from '.';
import { expectAssignable, expectDeprecated, expectNotAssignable, expectNotType, expectType } from 'tsd';
import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders';
@@ -2576,6 +2577,8 @@ await textChannel.send({
});
declare const poll: Poll;
+declare const message: Message;
+declare const pollData: PollData;
{
expectType(await poll.end());
@@ -2589,6 +2592,13 @@ declare const poll: Poll;
messageId: snowflake,
answerId: 1,
});
+
+ await message.edit({
+ // @ts-expect-error
+ poll: pollData,
+ });
+
+ await chatInputInteraction.editReply({ poll: pollData });
}
expectType>(await client.fetchStickerPacks());