mirror of
https://github.com/discordjs/discord.js.git
synced 2026-05-23 12:00:09 +00:00
Compare commits
20 Commits
@discordjs
...
@discordjs
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
270d9f1047 | ||
|
|
9ae737708b | ||
|
|
e382d60421 | ||
|
|
68aa202cd6 | ||
|
|
d8ad181c19 | ||
|
|
0dff969e16 | ||
|
|
79d999e4c1 | ||
|
|
215f8dc5e0 | ||
|
|
b6089e585e | ||
|
|
fe025c0a9f | ||
|
|
4a8aeb6aee | ||
|
|
3dd57c2eaf | ||
|
|
740da4ce5e | ||
|
|
6fb0b1cef6 | ||
|
|
ac6ff15b7d | ||
|
|
a294b47db0 | ||
|
|
ecef7bdf22 | ||
|
|
40578393c3 | ||
|
|
86ecb37c9e | ||
|
|
311e826b12 |
@@ -1270,7 +1270,7 @@ export class ApiModelGenerator {
|
||||
const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
|
||||
const docComment: tsdoc.DocComment | undefined = jsDoc
|
||||
? this._tsDocParser.parseString(
|
||||
`/**\n * ${this._fixLinkTags(jsDoc.description) ?? ''}${jsDoc.default ? ` (default: ${this._escapeSpecialChars(jsDoc.default)})` : ''}\n${
|
||||
`/**\n * ${this._fixLinkTags(jsDoc.description) ?? ''}${jsDoc.default === undefined ? '' : ` (default: ${this._escapeSpecialChars(jsDoc.default)})`}\n${
|
||||
'see' in jsDoc ? jsDoc.see.map((see) => ` * @see ${see}\n`).join('') : ''
|
||||
}${'readonly' in jsDoc && jsDoc.readonly ? ' * @readonly\n' : ''}${
|
||||
'deprecated' in jsDoc && jsDoc.deprecated
|
||||
@@ -1348,7 +1348,7 @@ export class ApiModelGenerator {
|
||||
const apiItemMetadata: ApiItemMetadata = this._collector.fetchApiItemMetadata(astDeclaration);
|
||||
const docComment: tsdoc.DocComment | undefined = jsDoc
|
||||
? this._tsDocParser.parseString(
|
||||
`/**\n * ${this._fixLinkTags(jsDoc.description) ?? ''}${jsDoc.default ? `\n * @defaultValue ${this._escapeSpecialChars(jsDoc.default)}` : ''}\n${
|
||||
`/**\n * ${this._fixLinkTags(jsDoc.description) ?? ''}${jsDoc.default === undefined ? '' : `\n * @defaultValue ${this._escapeSpecialChars(jsDoc.default)}`}\n${
|
||||
'see' in jsDoc ? jsDoc.see.map((see) => ` * @see ${see}\n`).join('') : ''
|
||||
}${'readonly' in jsDoc && jsDoc.readonly ? ' * @readonly\n' : ''}${
|
||||
'deprecated' in jsDoc && jsDoc.deprecated
|
||||
|
||||
@@ -2,6 +2,17 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
# [@discordjs/core@2.2.2](https://github.com/discordjs/discord.js/compare/@discordjs/core@2.2.1...@discordjs/core@2.2.2) - (2025-09-10)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **users:** Correct type for editing current guild member (#11098) ([9ae7377](https://github.com/discordjs/discord.js/commit/9ae737708b24400320a2da4a85a6c977475a05a5))
|
||||
- **guild:** Creating a template actually creates a template (#11030) ([ac6ff15](https://github.com/discordjs/discord.js/commit/ac6ff15b7dc4a88753b7cfdf1bca1b4bcc1cc260))
|
||||
|
||||
## Documentation
|
||||
|
||||
- **guild:** Deprecate API related to guild ownership ([6fb0b1c](https://github.com/discordjs/discord.js/commit/6fb0b1cef6e479be3d47370438d8a588a7c2b850))
|
||||
|
||||
# [@discordjs/core@2.2.1](https://github.com/discordjs/discord.js/compare/@discordjs/core@2.2.0...@discordjs/core@2.2.1) - (2025-08-20)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@discordjs/core",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.2",
|
||||
"description": "A thinly abstracted wrapper around the rest API, and gateway.",
|
||||
"scripts": {
|
||||
"test": "vitest run",
|
||||
@@ -70,7 +70,7 @@
|
||||
"@discordjs/ws": "workspace:^",
|
||||
"@sapphire/snowflake": "^3.5.3",
|
||||
"@vladfrangu/async_event_emitter": "^2.4.6",
|
||||
"discord-api-types": "^0.38.16"
|
||||
"discord-api-types": "^0.38.24"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@discordjs/api-extractor": "workspace:^",
|
||||
|
||||
@@ -166,6 +166,7 @@ export class GuildsAPI {
|
||||
* @see {@link https://discord.com/developers/docs/resources/guild#create-guild}
|
||||
* @param body - The guild to create
|
||||
* @param options - The options for creating the guild
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
*/
|
||||
public async create(body: RESTPostAPIGuildsJSONBody, { signal }: Pick<RequestData, 'signal'> = {}) {
|
||||
return this.rest.post(Routes.guilds(), { body, signal }) as Promise<RESTPostAPIGuildsResult>;
|
||||
@@ -197,6 +198,7 @@ export class GuildsAPI {
|
||||
* @see {@link https://discord.com/developers/docs/resources/guild#delete-guild}
|
||||
* @param guildId - The id of the guild to delete
|
||||
* @param options - The options for deleting this guild
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
*/
|
||||
public async delete(guildId: Snowflake, { signal }: Pick<RequestData, 'signal'> = {}) {
|
||||
await this.rest.delete(Routes.guild(guildId), { signal });
|
||||
@@ -491,6 +493,7 @@ export class GuildsAPI {
|
||||
* @param guildId - The id of the guild to edit the MFA level for
|
||||
* @param level - The new MFA level
|
||||
* @param options - The options for editing the MFA level
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
*/
|
||||
public async editMFALevel(
|
||||
guildId: Snowflake,
|
||||
@@ -1287,16 +1290,16 @@ export class GuildsAPI {
|
||||
* Creates a new template
|
||||
*
|
||||
* @see {@link https://discord.com/developers/docs/resources/guild-template#create-guild-template}
|
||||
* @param templateCode - The code of the template
|
||||
* @param guildId - The id of the guild
|
||||
* @param body - The data for creating the template
|
||||
* @param options - The options for creating the template
|
||||
*/
|
||||
public async createTemplate(
|
||||
templateCode: string,
|
||||
guildId: Snowflake,
|
||||
body: RESTPostAPIGuildTemplatesJSONBody,
|
||||
{ signal }: Pick<RequestData, 'signal'> = {},
|
||||
) {
|
||||
return this.rest.post(Routes.template(templateCode), { body, signal }) as Promise<RESTPostAPIGuildTemplatesResult>;
|
||||
return this.rest.post(Routes.guildTemplates(guildId), { body, signal }) as Promise<RESTPostAPIGuildTemplatesResult>;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,9 +10,9 @@ import {
|
||||
type RESTGetAPICurrentUserResult,
|
||||
type RESTGetAPIUserResult,
|
||||
type RESTGetCurrentUserGuildMemberResult,
|
||||
type RESTPatchAPICurrentGuildMemberJSONBody,
|
||||
type RESTPatchAPICurrentUserJSONBody,
|
||||
type RESTPatchAPICurrentUserResult,
|
||||
type RESTPatchAPIGuildMemberJSONBody,
|
||||
type RESTPatchAPIGuildMemberResult,
|
||||
type RESTPostAPICurrentUserCreateDMChannelResult,
|
||||
type RESTPutAPICurrentUserApplicationRoleConnectionJSONBody,
|
||||
@@ -101,7 +101,7 @@ export class UsersAPI {
|
||||
*/
|
||||
public async editCurrentGuildMember(
|
||||
guildId: Snowflake,
|
||||
body: RESTPatchAPIGuildMemberJSONBody = {},
|
||||
body: RESTPatchAPICurrentGuildMemberJSONBody = {},
|
||||
{ reason, signal }: Pick<RequestData, 'reason' | 'signal'> = {},
|
||||
) {
|
||||
return this.rest.patch(Routes.guildMember(guildId, '@me'), {
|
||||
|
||||
@@ -2,6 +2,48 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
# [14.22.1](https://github.com/discordjs/discord.js/compare/14.22.0...14.22.1) - (2025-08-22)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **GuildChannel:** Account for everyone base permissions (#11053) ([ecef7bd](https://github.com/discordjs/discord.js/commit/ecef7bdf22cc3e7c1fc47d828a55f6139672b2a8))
|
||||
|
||||
# [14.22.0](https://github.com/discordjs/discord.js/compare/14.21.0...14.22.0) - (2025-08-20)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- Remove trailing `color` references (#11007) ([b532df6](https://github.com/discordjs/discord.js/commit/b532df61ed346e2289831f2905984583a53d3fa5))
|
||||
- **Emoji:** Remove incorrect nullables, add `ApplicationEmoji#available` (#10990) ([90d3b28](https://github.com/discordjs/discord.js/commit/90d3b282684f5a4bbf9ce2672fa5efd5ec802e95))
|
||||
- **GuildChannelManager:** Properly resolve avatar for createWebhook (#10772) ([63f5261](https://github.com/discordjs/discord.js/commit/63f5261f4c351cd1b6befca1163254300f7424f4))
|
||||
- **Message:** Forwarded messages are not `crosspostable` (#10821) ([b36b751](https://github.com/discordjs/discord.js/commit/b36b751bde5f5de286d748465619147619959d4f))
|
||||
- **DirectoryChannel:** Export class (#10985) ([51ceb20](https://github.com/discordjs/discord.js/commit/51ceb203fa218accab47f604f91f74b49af7e51f))
|
||||
- **Events:** `WebhooksUpdate` enum value (#10970) ([1404e32](https://github.com/discordjs/discord.js/commit/1404e328492549f4a17ab997eb648f3263e8ec25))
|
||||
|
||||
## Documentation
|
||||
|
||||
- Remove hardcoded locale from links (#10794) ([5be774d](https://github.com/discordjs/discord.js/commit/5be774db641b60669505645861d721200d335a7b))
|
||||
- **ApplicationCommand:** Incorrect method in example (#10837) ([040c66a](https://github.com/discordjs/discord.js/commit/040c66ae15fd3cc7cb40bdbb5384ede445c40973))
|
||||
|
||||
## Features
|
||||
|
||||
- Support user guilds (#10995) ([baa08b8](https://github.com/discordjs/discord.js/commit/baa08b8fbb64abd8265890413c95f81e2c61303f))
|
||||
- **MessageManager:** New pinned messages routes (#10993) ([f469f74](https://github.com/discordjs/discord.js/commit/f469f74acaa14f126fd02af4a032ca8e56dbb534))
|
||||
- `fetchPinned()` has been renamed to `fetchPins()`, which is a paginated endpoint to fetch pinned messages.
|
||||
- **User:** Add `collectibles` (#10939) ([8ac0e1e](https://github.com/discordjs/discord.js/commit/8ac0e1e5d6df9c51fd3a41d9f8c9dbe8f786229a))
|
||||
- Role gradient colours (#10986) ([9d6fdf8](https://github.com/discordjs/discord.js/commit/9d6fdf8979d29787a13912cfa55f1ff3961c6b68))
|
||||
- Support animated WebP (#10987) ([cafe58b](https://github.com/discordjs/discord.js/commit/cafe58b3bd9defb5050a7a90bd07568f3b509c89))
|
||||
|
||||
## Refactor
|
||||
|
||||
- Deprecate `ready` event in favor of `clientReady` (#10969) ([82378fc](https://github.com/discordjs/discord.js/commit/82378fc2e8f4fd7e56b5a80eb6a6d3a8315e388e))
|
||||
- **ThreadChannel:** Remove trimming of name (#10984) ([d4f742e](https://github.com/discordjs/discord.js/commit/d4f742e99e31b4eb9e84afce3bab48ed549f8ae3))
|
||||
|
||||
## Typings
|
||||
|
||||
- **Invite:** Approximate fields should be nullable (#10997) ([d60e0bf](https://github.com/discordjs/discord.js/commit/d60e0bf30bac05921063d010fab253ca829ae3bb))
|
||||
- **ModalSubmitFields:** Fix `fields` type (#10816) ([500712d](https://github.com/discordjs/discord.js/commit/500712d5eaef1a75133e088e0f260842d12f3419))
|
||||
- **InteractionCallbackResponse:** Add missing InGuild generic (#10963) ([19e74b1](https://github.com/discordjs/discord.js/commit/19e74b153317cf8b910317c56beb95a698acc00c))
|
||||
|
||||
# [14.21.0](https://github.com/discordjs/discord.js/compare/14.20.0...14.21.0) - (2025-06-25)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"mainEntryPointFilePath": "<projectFolder>/typings/index.d.ts",
|
||||
"bundledPackages": [
|
||||
"discord-api-types",
|
||||
"@discordjs/collection",
|
||||
"@discordjs/builders",
|
||||
"@discordjs/formatters",
|
||||
"@discordjs/rest",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "discord.js",
|
||||
"version": "14.21.0",
|
||||
"version": "14.22.1",
|
||||
"description": "A powerful library for interacting with the Discord API",
|
||||
"scripts": {
|
||||
"test": "pnpm run docs:test && pnpm run test:typescript",
|
||||
@@ -73,7 +73,7 @@
|
||||
"@discordjs/util": "workspace:^",
|
||||
"@discordjs/ws": "^1.2.3",
|
||||
"@sapphire/snowflake": "3.5.3",
|
||||
"discord-api-types": "^0.38.16",
|
||||
"discord-api-types": "^0.38.24",
|
||||
"fast-deep-equal": "3.1.3",
|
||||
"lodash.snakecase": "4.1.1",
|
||||
"magic-bytes.js": "^1.10.0",
|
||||
|
||||
@@ -36,12 +36,14 @@ async function writeClientActionImports() {
|
||||
for (const file of (await readdir(actionsDirectory)).sort()) {
|
||||
if (file === 'Action.js' || file === 'ActionsManager.js') continue;
|
||||
|
||||
lines.push(` this.register(require('./${file.slice(0, -3)}'));`);
|
||||
const actionName = file.slice(0, -3);
|
||||
|
||||
lines.push(` this.${actionName} = this.load(require('./${file}'));`);
|
||||
}
|
||||
|
||||
lines.push(' }\n');
|
||||
lines.push(' register(Action) {');
|
||||
lines.push(" this[Action.name.replace(/Action$/, '')] = new Action(this.client);");
|
||||
lines.push(' load(Action) {');
|
||||
lines.push(' return new Action(this.client);');
|
||||
lines.push(' }');
|
||||
lines.push('}\n');
|
||||
lines.push('module.exports = ActionsManager;\n');
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
const Partials = require('../../util/Partials');
|
||||
const { Poll } = require('../../structures/Poll.js');
|
||||
const { PollAnswer } = require('../../structures/PollAnswer.js');
|
||||
const Partials = require('../../util/Partials.js');
|
||||
|
||||
/*
|
||||
|
||||
@@ -63,6 +65,23 @@ class GenericAction {
|
||||
);
|
||||
}
|
||||
|
||||
getPoll(data, message, channel) {
|
||||
const includePollPartial = this.client.options.partials.includes(Partials.Poll);
|
||||
const includePollAnswerPartial = this.client.options.partials.includes(Partials.PollAnswer);
|
||||
if (message.partial && (!includePollPartial || !includePollAnswerPartial)) return null;
|
||||
|
||||
if (!message.poll && includePollPartial) {
|
||||
message.poll = new Poll(this.client, data, message, channel);
|
||||
}
|
||||
|
||||
if (message.poll && !message.poll.answers.has(data.answer_id) && includePollAnswerPartial) {
|
||||
const pollAnswer = new PollAnswer(this.client, data, message.poll);
|
||||
message.poll.answers.set(data.answer_id, pollAnswer);
|
||||
}
|
||||
|
||||
return message.poll;
|
||||
}
|
||||
|
||||
getReaction(data, message, user) {
|
||||
const id = data.emoji.id ?? decodeURIComponent(data.emoji.name);
|
||||
return this.getPayload(
|
||||
|
||||
@@ -11,74 +11,74 @@ class ActionsManager {
|
||||
constructor(client) {
|
||||
this.client = client;
|
||||
|
||||
this.register(require('./ApplicationCommandPermissionsUpdate'));
|
||||
this.register(require('./AutoModerationActionExecution'));
|
||||
this.register(require('./AutoModerationRuleCreate'));
|
||||
this.register(require('./AutoModerationRuleDelete'));
|
||||
this.register(require('./AutoModerationRuleUpdate'));
|
||||
this.register(require('./ChannelCreate'));
|
||||
this.register(require('./ChannelDelete'));
|
||||
this.register(require('./ChannelUpdate'));
|
||||
this.register(require('./EntitlementCreate'));
|
||||
this.register(require('./EntitlementDelete'));
|
||||
this.register(require('./EntitlementUpdate'));
|
||||
this.register(require('./GuildAuditLogEntryCreate'));
|
||||
this.register(require('./GuildBanAdd'));
|
||||
this.register(require('./GuildBanRemove'));
|
||||
this.register(require('./GuildChannelsPositionUpdate'));
|
||||
this.register(require('./GuildDelete'));
|
||||
this.register(require('./GuildEmojiCreate'));
|
||||
this.register(require('./GuildEmojiDelete'));
|
||||
this.register(require('./GuildEmojiUpdate'));
|
||||
this.register(require('./GuildEmojisUpdate'));
|
||||
this.register(require('./GuildIntegrationsUpdate'));
|
||||
this.register(require('./GuildMemberRemove'));
|
||||
this.register(require('./GuildMemberUpdate'));
|
||||
this.register(require('./GuildRoleCreate'));
|
||||
this.register(require('./GuildRoleDelete'));
|
||||
this.register(require('./GuildRoleUpdate'));
|
||||
this.register(require('./GuildRolesPositionUpdate'));
|
||||
this.register(require('./GuildScheduledEventCreate'));
|
||||
this.register(require('./GuildScheduledEventDelete'));
|
||||
this.register(require('./GuildScheduledEventUpdate'));
|
||||
this.register(require('./GuildScheduledEventUserAdd'));
|
||||
this.register(require('./GuildScheduledEventUserRemove'));
|
||||
this.register(require('./GuildSoundboardSoundDelete.js'));
|
||||
this.register(require('./GuildStickerCreate'));
|
||||
this.register(require('./GuildStickerDelete'));
|
||||
this.register(require('./GuildStickerUpdate'));
|
||||
this.register(require('./GuildStickersUpdate'));
|
||||
this.register(require('./GuildUpdate'));
|
||||
this.register(require('./InteractionCreate'));
|
||||
this.register(require('./InviteCreate'));
|
||||
this.register(require('./InviteDelete'));
|
||||
this.register(require('./MessageCreate'));
|
||||
this.register(require('./MessageDelete'));
|
||||
this.register(require('./MessageDeleteBulk'));
|
||||
this.register(require('./MessagePollVoteAdd'));
|
||||
this.register(require('./MessagePollVoteRemove'));
|
||||
this.register(require('./MessageReactionAdd'));
|
||||
this.register(require('./MessageReactionRemove'));
|
||||
this.register(require('./MessageReactionRemoveAll'));
|
||||
this.register(require('./MessageReactionRemoveEmoji'));
|
||||
this.register(require('./MessageUpdate'));
|
||||
this.register(require('./PresenceUpdate'));
|
||||
this.register(require('./StageInstanceCreate'));
|
||||
this.register(require('./StageInstanceDelete'));
|
||||
this.register(require('./StageInstanceUpdate'));
|
||||
this.register(require('./ThreadCreate'));
|
||||
this.register(require('./ThreadDelete'));
|
||||
this.register(require('./ThreadListSync'));
|
||||
this.register(require('./ThreadMemberUpdate'));
|
||||
this.register(require('./ThreadMembersUpdate'));
|
||||
this.register(require('./TypingStart'));
|
||||
this.register(require('./UserUpdate'));
|
||||
this.register(require('./VoiceStateUpdate'));
|
||||
this.register(require('./WebhooksUpdate'));
|
||||
this.ApplicationCommandPermissionsUpdate = this.load(require('./ApplicationCommandPermissionsUpdate.js'));
|
||||
this.AutoModerationActionExecution = this.load(require('./AutoModerationActionExecution.js'));
|
||||
this.AutoModerationRuleCreate = this.load(require('./AutoModerationRuleCreate.js'));
|
||||
this.AutoModerationRuleDelete = this.load(require('./AutoModerationRuleDelete.js'));
|
||||
this.AutoModerationRuleUpdate = this.load(require('./AutoModerationRuleUpdate.js'));
|
||||
this.ChannelCreate = this.load(require('./ChannelCreate.js'));
|
||||
this.ChannelDelete = this.load(require('./ChannelDelete.js'));
|
||||
this.ChannelUpdate = this.load(require('./ChannelUpdate.js'));
|
||||
this.EntitlementCreate = this.load(require('./EntitlementCreate.js'));
|
||||
this.EntitlementDelete = this.load(require('./EntitlementDelete.js'));
|
||||
this.EntitlementUpdate = this.load(require('./EntitlementUpdate.js'));
|
||||
this.GuildAuditLogEntryCreate = this.load(require('./GuildAuditLogEntryCreate.js'));
|
||||
this.GuildBanAdd = this.load(require('./GuildBanAdd.js'));
|
||||
this.GuildBanRemove = this.load(require('./GuildBanRemove.js'));
|
||||
this.GuildChannelsPositionUpdate = this.load(require('./GuildChannelsPositionUpdate.js'));
|
||||
this.GuildDelete = this.load(require('./GuildDelete.js'));
|
||||
this.GuildEmojiCreate = this.load(require('./GuildEmojiCreate.js'));
|
||||
this.GuildEmojiDelete = this.load(require('./GuildEmojiDelete.js'));
|
||||
this.GuildEmojiUpdate = this.load(require('./GuildEmojiUpdate.js'));
|
||||
this.GuildEmojisUpdate = this.load(require('./GuildEmojisUpdate.js'));
|
||||
this.GuildIntegrationsUpdate = this.load(require('./GuildIntegrationsUpdate.js'));
|
||||
this.GuildMemberRemove = this.load(require('./GuildMemberRemove.js'));
|
||||
this.GuildMemberUpdate = this.load(require('./GuildMemberUpdate.js'));
|
||||
this.GuildRoleCreate = this.load(require('./GuildRoleCreate.js'));
|
||||
this.GuildRoleDelete = this.load(require('./GuildRoleDelete.js'));
|
||||
this.GuildRoleUpdate = this.load(require('./GuildRoleUpdate.js'));
|
||||
this.GuildRolesPositionUpdate = this.load(require('./GuildRolesPositionUpdate.js'));
|
||||
this.GuildScheduledEventCreate = this.load(require('./GuildScheduledEventCreate.js'));
|
||||
this.GuildScheduledEventDelete = this.load(require('./GuildScheduledEventDelete.js'));
|
||||
this.GuildScheduledEventUpdate = this.load(require('./GuildScheduledEventUpdate.js'));
|
||||
this.GuildScheduledEventUserAdd = this.load(require('./GuildScheduledEventUserAdd.js'));
|
||||
this.GuildScheduledEventUserRemove = this.load(require('./GuildScheduledEventUserRemove.js'));
|
||||
this.GuildSoundboardSoundDelete = this.load(require('./GuildSoundboardSoundDelete.js'));
|
||||
this.GuildStickerCreate = this.load(require('./GuildStickerCreate.js'));
|
||||
this.GuildStickerDelete = this.load(require('./GuildStickerDelete.js'));
|
||||
this.GuildStickerUpdate = this.load(require('./GuildStickerUpdate.js'));
|
||||
this.GuildStickersUpdate = this.load(require('./GuildStickersUpdate.js'));
|
||||
this.GuildUpdate = this.load(require('./GuildUpdate.js'));
|
||||
this.InteractionCreate = this.load(require('./InteractionCreate.js'));
|
||||
this.InviteCreate = this.load(require('./InviteCreate.js'));
|
||||
this.InviteDelete = this.load(require('./InviteDelete.js'));
|
||||
this.MessageCreate = this.load(require('./MessageCreate.js'));
|
||||
this.MessageDelete = this.load(require('./MessageDelete.js'));
|
||||
this.MessageDeleteBulk = this.load(require('./MessageDeleteBulk.js'));
|
||||
this.MessagePollVoteAdd = this.load(require('./MessagePollVoteAdd.js'));
|
||||
this.MessagePollVoteRemove = this.load(require('./MessagePollVoteRemove.js'));
|
||||
this.MessageReactionAdd = this.load(require('./MessageReactionAdd.js'));
|
||||
this.MessageReactionRemove = this.load(require('./MessageReactionRemove.js'));
|
||||
this.MessageReactionRemoveAll = this.load(require('./MessageReactionRemoveAll.js'));
|
||||
this.MessageReactionRemoveEmoji = this.load(require('./MessageReactionRemoveEmoji.js'));
|
||||
this.MessageUpdate = this.load(require('./MessageUpdate.js'));
|
||||
this.PresenceUpdate = this.load(require('./PresenceUpdate.js'));
|
||||
this.StageInstanceCreate = this.load(require('./StageInstanceCreate.js'));
|
||||
this.StageInstanceDelete = this.load(require('./StageInstanceDelete.js'));
|
||||
this.StageInstanceUpdate = this.load(require('./StageInstanceUpdate.js'));
|
||||
this.ThreadCreate = this.load(require('./ThreadCreate.js'));
|
||||
this.ThreadDelete = this.load(require('./ThreadDelete.js'));
|
||||
this.ThreadListSync = this.load(require('./ThreadListSync.js'));
|
||||
this.ThreadMemberUpdate = this.load(require('./ThreadMemberUpdate.js'));
|
||||
this.ThreadMembersUpdate = this.load(require('./ThreadMembersUpdate.js'));
|
||||
this.TypingStart = this.load(require('./TypingStart.js'));
|
||||
this.UserUpdate = this.load(require('./UserUpdate.js'));
|
||||
this.VoiceStateUpdate = this.load(require('./VoiceStateUpdate.js'));
|
||||
this.WebhooksUpdate = this.load(require('./WebhooksUpdate.js'));
|
||||
}
|
||||
|
||||
register(Action) {
|
||||
this[Action.name.replace(/Action$/, '')] = new Action(this.client);
|
||||
load(Action) {
|
||||
return new Action(this.client);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,11 +11,18 @@ class MessagePollVoteAddAction extends Action {
|
||||
const message = this.getMessage(data, channel);
|
||||
if (!message) return false;
|
||||
|
||||
const { poll } = message;
|
||||
const poll = this.getPoll(data, message, channel);
|
||||
if (!poll) return false;
|
||||
|
||||
const answer = poll?.answers.get(data.answer_id);
|
||||
const answer = poll.answers.get(data.answer_id);
|
||||
if (!answer) return false;
|
||||
|
||||
const user = this.getUser(data);
|
||||
|
||||
if (user) {
|
||||
answer.voters._add(user);
|
||||
}
|
||||
|
||||
answer.voteCount++;
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,12 +11,17 @@ class MessagePollVoteRemoveAction extends Action {
|
||||
const message = this.getMessage(data, channel);
|
||||
if (!message) return false;
|
||||
|
||||
const { poll } = message;
|
||||
const poll = this.getPoll(data, message, channel);
|
||||
if (!poll) return false;
|
||||
|
||||
const answer = poll?.answers.get(data.answer_id);
|
||||
const answer = poll.answers.get(data.answer_id);
|
||||
if (!answer) return false;
|
||||
|
||||
answer.voteCount--;
|
||||
answer.voters.cache.delete(data.user_id);
|
||||
|
||||
if (answer.voteCount > 0) {
|
||||
answer.voteCount--;
|
||||
}
|
||||
|
||||
/**
|
||||
* Emitted whenever a user removes their vote in a poll.
|
||||
|
||||
@@ -32,10 +32,10 @@ const handlers = Object.fromEntries([
|
||||
['GUILD_SCHEDULED_EVENT_UPDATE', require('./GUILD_SCHEDULED_EVENT_UPDATE')],
|
||||
['GUILD_SCHEDULED_EVENT_USER_ADD', require('./GUILD_SCHEDULED_EVENT_USER_ADD')],
|
||||
['GUILD_SCHEDULED_EVENT_USER_REMOVE', require('./GUILD_SCHEDULED_EVENT_USER_REMOVE')],
|
||||
['GUILD_SOUNDBOARD_SOUNDS_UPDATE', require('./GUILD_SOUNDBOARD_SOUNDS_UPDATE.js')],
|
||||
['GUILD_SOUNDBOARD_SOUND_CREATE', require('./GUILD_SOUNDBOARD_SOUND_CREATE.js')],
|
||||
['GUILD_SOUNDBOARD_SOUND_DELETE', require('./GUILD_SOUNDBOARD_SOUND_DELETE.js')],
|
||||
['GUILD_SOUNDBOARD_SOUND_UPDATE', require('./GUILD_SOUNDBOARD_SOUND_UPDATE.js')],
|
||||
['GUILD_SOUNDBOARD_SOUNDS_UPDATE', require('./GUILD_SOUNDBOARD_SOUNDS_UPDATE')],
|
||||
['GUILD_SOUNDBOARD_SOUND_CREATE', require('./GUILD_SOUNDBOARD_SOUND_CREATE')],
|
||||
['GUILD_SOUNDBOARD_SOUND_DELETE', require('./GUILD_SOUNDBOARD_SOUND_DELETE')],
|
||||
['GUILD_SOUNDBOARD_SOUND_UPDATE', require('./GUILD_SOUNDBOARD_SOUND_UPDATE')],
|
||||
['GUILD_STICKERS_UPDATE', require('./GUILD_STICKERS_UPDATE')],
|
||||
['GUILD_UPDATE', require('./GUILD_UPDATE')],
|
||||
['INTERACTION_CREATE', require('./INTERACTION_CREATE')],
|
||||
@@ -54,7 +54,7 @@ const handlers = Object.fromEntries([
|
||||
['PRESENCE_UPDATE', require('./PRESENCE_UPDATE')],
|
||||
['READY', require('./READY')],
|
||||
['RESUMED', require('./RESUMED')],
|
||||
['SOUNDBOARD_SOUNDS', require('./SOUNDBOARD_SOUNDS.js')],
|
||||
['SOUNDBOARD_SOUNDS', require('./SOUNDBOARD_SOUNDS')],
|
||||
['STAGE_INSTANCE_CREATE', require('./STAGE_INSTANCE_CREATE')],
|
||||
['STAGE_INSTANCE_DELETE', require('./STAGE_INSTANCE_DELETE')],
|
||||
['STAGE_INSTANCE_UPDATE', require('./STAGE_INSTANCE_UPDATE')],
|
||||
|
||||
@@ -33,6 +33,7 @@ exports.Events = require('./util/Events');
|
||||
exports.Formatters = require('./util/Formatters');
|
||||
exports.GuildMemberFlagsBitField = require('./util/GuildMemberFlagsBitField').GuildMemberFlagsBitField;
|
||||
exports.IntentsBitField = require('./util/IntentsBitField');
|
||||
exports.InviteFlagsBitField = require('./util/InviteFlagsBitField.js').InviteFlagsBitField;
|
||||
exports.LimitedCollection = require('./util/LimitedCollection');
|
||||
exports.MessageFlagsBitField = require('./util/MessageFlagsBitField');
|
||||
exports.Options = require('./util/Options');
|
||||
@@ -80,6 +81,7 @@ exports.GuildStickerManager = require('./managers/GuildStickerManager');
|
||||
exports.GuildTextThreadManager = require('./managers/GuildTextThreadManager');
|
||||
exports.MessageManager = require('./managers/MessageManager');
|
||||
exports.PermissionOverwriteManager = require('./managers/PermissionOverwriteManager');
|
||||
exports.PollAnswerVoterManager = require('./managers/PollAnswerVoterManager.js').PollAnswerVoterManager;
|
||||
exports.PresenceManager = require('./managers/PresenceManager');
|
||||
exports.ReactionManager = require('./managers/ReactionManager');
|
||||
exports.ReactionUserManager = require('./managers/ReactionUserManager');
|
||||
|
||||
@@ -163,6 +163,7 @@ class GuildManager extends CachedManager {
|
||||
* Creates a guild.
|
||||
* <warn>This is only available to bots in fewer than 10 guilds.</warn>
|
||||
* @param {GuildCreateOptions} options Options for creating the guild
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
* @returns {Promise<Guild>} The guild that was created
|
||||
*/
|
||||
async create({
|
||||
|
||||
50
packages/discord.js/src/managers/PollAnswerVoterManager.js
Normal file
50
packages/discord.js/src/managers/PollAnswerVoterManager.js
Normal file
@@ -0,0 +1,50 @@
|
||||
'use strict';
|
||||
|
||||
const { Collection } = require('@discordjs/collection');
|
||||
const { makeURLSearchParams } = require('@discordjs/rest');
|
||||
const { Routes } = require('discord-api-types/v10');
|
||||
const CachedManager = require('./CachedManager.js');
|
||||
const User = require('../structures/User.js');
|
||||
|
||||
/**
|
||||
* Manages API methods for users who voted on a poll and stores their cache.
|
||||
* @extends {CachedManager}
|
||||
*/
|
||||
class PollAnswerVoterManager extends CachedManager {
|
||||
constructor(answer) {
|
||||
super(answer.client, User);
|
||||
|
||||
/**
|
||||
* The poll answer that this manager belongs to
|
||||
* @type {PollAnswer}
|
||||
*/
|
||||
this.answer = answer;
|
||||
}
|
||||
|
||||
/**
|
||||
* The cache of this manager
|
||||
* @type {Collection<Snowflake, User>}
|
||||
* @name PollAnswerVoterManager#cache
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fetches the users that voted on this poll answer. Resolves with a collection of users, mapped by their ids.
|
||||
* @param {BaseFetchPollAnswerVotersOptions} [options={}] Options for fetching the users
|
||||
* @returns {Promise<Collection<Snowflake, User>>}
|
||||
*/
|
||||
async fetch({ after, limit } = {}) {
|
||||
const poll = this.answer.poll;
|
||||
const query = makeURLSearchParams({ limit, after });
|
||||
const data = await this.client.rest.get(Routes.pollAnswerVoters(poll.channelId, poll.messageId, this.answer.id), {
|
||||
query,
|
||||
});
|
||||
|
||||
return data.users.reduce((coll, rawUser) => {
|
||||
const user = this.client.users._add(rawUser);
|
||||
this.cache.set(user.id, user);
|
||||
return coll.set(user.id, user);
|
||||
}, new Collection());
|
||||
}
|
||||
}
|
||||
|
||||
exports.PollAnswerVoterManager = PollAnswerVoterManager;
|
||||
@@ -832,6 +832,7 @@ class Guild extends AnonymousGuild {
|
||||
* @property {number} [afkTimeout] The AFK timeout of the guild
|
||||
* @property {?(BufferResolvable|Base64Resolvable)} [icon] The icon of the guild
|
||||
* @property {GuildMemberResolvable} [owner] The owner of the guild
|
||||
* <warn>This property is **deprecated** as API related to guild ownership may no longer be used.</warn>
|
||||
* @property {?(BufferResolvable|Base64Resolvable)} [splash] The invite splash image of the guild
|
||||
* @property {?(BufferResolvable|Base64Resolvable)} [discoverySplash] The discovery splash image of the guild
|
||||
* @property {?(BufferResolvable|Base64Resolvable)} [banner] The banner of the guild
|
||||
@@ -1197,12 +1198,7 @@ class Guild extends AnonymousGuild {
|
||||
* @param {GuildMemberResolvable} owner The new owner of the guild
|
||||
* @param {string} [reason] Reason for setting the new owner
|
||||
* @returns {Promise<Guild>}
|
||||
* @example
|
||||
* // Edit the guild owner
|
||||
* guild.setOwner(guild.members.cache.first())
|
||||
* .then(guild => guild.fetchOwner())
|
||||
* .then(owner => console.log(`Updated the guild owner to ${owner.displayName}`))
|
||||
* .catch(console.error);
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
*/
|
||||
setOwner(owner, reason) {
|
||||
return this.edit({ owner, reason });
|
||||
@@ -1345,11 +1341,7 @@ class Guild extends AnonymousGuild {
|
||||
* @param {GuildMFALevel} level The MFA level
|
||||
* @param {string} [reason] Reason for changing the guild's MFA level
|
||||
* @returns {Promise<Guild>}
|
||||
* @example
|
||||
* // Set the MFA level of the guild to Elevated
|
||||
* guild.setMFALevel(GuildMFALevel.Elevated)
|
||||
* .then(guild => console.log("Set guild's MFA level to Elevated"))
|
||||
* .catch(console.error);
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
*/
|
||||
async setMFALevel(level, reason) {
|
||||
await this.client.rest.post(Routes.guildMFA(this.id), {
|
||||
@@ -1379,6 +1371,7 @@ class Guild extends AnonymousGuild {
|
||||
/**
|
||||
* Deletes the guild.
|
||||
* @returns {Promise<Guild>}
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
* @example
|
||||
* // Delete a guild
|
||||
* guild.delete()
|
||||
|
||||
@@ -250,10 +250,11 @@ class GuildChannel extends BaseChannel {
|
||||
return new PermissionsBitField(PermissionsBitField.All).freeze();
|
||||
}
|
||||
|
||||
const basePermissions = new PermissionsBitField([role.permissions, role.guild.roles.everyone.permissions]);
|
||||
const everyoneOverwrites = this.permissionOverwrites.cache.get(this.guild.id);
|
||||
const roleOverwrites = this.permissionOverwrites.cache.get(role.id);
|
||||
|
||||
return role.permissions
|
||||
return basePermissions
|
||||
.remove(everyoneOverwrites?.deny ?? PermissionsBitField.DefaultBit)
|
||||
.add(everyoneOverwrites?.allow ?? PermissionsBitField.DefaultBit)
|
||||
.remove(roleOverwrites?.deny ?? PermissionsBitField.DefaultBit)
|
||||
|
||||
@@ -120,6 +120,7 @@ class GuildTemplate extends Base {
|
||||
* @param {string} name The name of the guild
|
||||
* @param {BufferResolvable|Base64Resolvable} [icon] The icon for the guild
|
||||
* @returns {Promise<Guild>}
|
||||
* @deprecated API related to guild ownership may no longer be used.
|
||||
*/
|
||||
async createGuild(name, icon) {
|
||||
const { client } = this;
|
||||
|
||||
@@ -6,6 +6,7 @@ const { GuildScheduledEvent } = require('./GuildScheduledEvent');
|
||||
const IntegrationApplication = require('./IntegrationApplication');
|
||||
const InviteStageInstance = require('./InviteStageInstance');
|
||||
const { DiscordjsError, ErrorCodes } = require('../errors');
|
||||
const { InviteFlagsBitField } = require('../util/InviteFlagsBitField.js');
|
||||
|
||||
/**
|
||||
* Represents an invitation to a guild channel.
|
||||
@@ -222,6 +223,17 @@ class Invite extends Base {
|
||||
} else {
|
||||
this.guildScheduledEvent ??= null;
|
||||
}
|
||||
|
||||
if ('flags' in data) {
|
||||
/**
|
||||
* The flags of this invite.
|
||||
*
|
||||
* @type {Readonly<InviteFlagsBitField>}
|
||||
*/
|
||||
this.flags = new InviteFlagsBitField(data.flags).freeze();
|
||||
} else {
|
||||
this.flags ??= new InviteFlagsBitField().freeze();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -442,11 +442,15 @@ class Message extends Base {
|
||||
}
|
||||
|
||||
if (data.poll) {
|
||||
/**
|
||||
* The poll that was sent with the message
|
||||
* @type {?Poll}
|
||||
*/
|
||||
this.poll = new Poll(this.client, data.poll, this);
|
||||
if (this.poll) {
|
||||
this.poll._patch(data.poll);
|
||||
} else {
|
||||
/**
|
||||
* The poll that was sent with the message
|
||||
* @type {?Poll}
|
||||
*/
|
||||
this.poll = new Poll(this.client, data.poll, this, this.channel);
|
||||
}
|
||||
} else {
|
||||
this.poll ??= null;
|
||||
}
|
||||
|
||||
@@ -11,9 +11,30 @@ const { ErrorCodes } = require('../errors/index');
|
||||
* @extends {Base}
|
||||
*/
|
||||
class Poll extends Base {
|
||||
constructor(client, data, message) {
|
||||
constructor(client, data, message, channel) {
|
||||
super(client);
|
||||
|
||||
/**
|
||||
* The id of the channel that this poll is in
|
||||
* @type {Snowflake}
|
||||
*/
|
||||
this.channelId = data.channel_id ?? channel.id;
|
||||
|
||||
/**
|
||||
* The channel that this poll is in
|
||||
* @name Poll#channel
|
||||
* @type {TextBasedChannel}
|
||||
* @readonly
|
||||
*/
|
||||
|
||||
Object.defineProperty(this, 'channel', { value: channel });
|
||||
|
||||
/**
|
||||
* The id of the message that started this poll
|
||||
* @type {Snowflake}
|
||||
*/
|
||||
this.messageId = data.message_id ?? message.id;
|
||||
|
||||
/**
|
||||
* The message that started this poll
|
||||
* @name Poll#message
|
||||
@@ -23,51 +44,27 @@ class Poll extends Base {
|
||||
|
||||
Object.defineProperty(this, 'message', { value: message });
|
||||
|
||||
/**
|
||||
* The media for a poll's question
|
||||
* @typedef {Object} PollQuestionMedia
|
||||
* @property {string} text The text of this question
|
||||
*/
|
||||
|
||||
/**
|
||||
* The media for this poll's question
|
||||
* @type {PollQuestionMedia}
|
||||
*/
|
||||
this.question = {
|
||||
text: data.question.text,
|
||||
};
|
||||
|
||||
/**
|
||||
* The answers of this poll
|
||||
* @type {Collection<number, PollAnswer>}
|
||||
* @type {Collection<number, PollAnswer|PartialPollAnswer>}
|
||||
*/
|
||||
this.answers = data.answers.reduce(
|
||||
(acc, answer) => acc.set(answer.answer_id, new PollAnswer(this.client, answer, this)),
|
||||
new Collection(),
|
||||
);
|
||||
|
||||
/**
|
||||
* The timestamp when this poll expires
|
||||
* @type {number}
|
||||
*/
|
||||
this.expiresTimestamp = Date.parse(data.expiry);
|
||||
|
||||
/**
|
||||
* Whether this poll allows multiple answers
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.allowMultiselect = data.allow_multiselect;
|
||||
|
||||
/**
|
||||
* The layout type of this poll
|
||||
* @type {PollLayoutType}
|
||||
*/
|
||||
this.layoutType = data.layout_type;
|
||||
this.answers = new Collection();
|
||||
|
||||
this._patch(data);
|
||||
}
|
||||
|
||||
_patch(data) {
|
||||
if (data.answers) {
|
||||
for (const answer of data.answers) {
|
||||
const existing = this.answers.get(answer.answer_id);
|
||||
if (existing) {
|
||||
existing._patch(answer);
|
||||
} else {
|
||||
this.answers.set(answer.answer_id, new PollAnswer(this.client, answer, this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (data.results) {
|
||||
/**
|
||||
* Whether this poll's results have been precisely counted
|
||||
@@ -82,15 +79,84 @@ class Poll extends Base {
|
||||
} else {
|
||||
this.resultsFinalized ??= false;
|
||||
}
|
||||
|
||||
if ('allow_multiselect' in data) {
|
||||
/**
|
||||
* Whether this poll allows multiple answers
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.allowMultiselect = data.allow_multiselect;
|
||||
} else {
|
||||
this.allowMultiselect ??= null;
|
||||
}
|
||||
|
||||
if ('layout_type' in data) {
|
||||
/**
|
||||
* The layout type of this poll
|
||||
* @type {PollLayoutType}
|
||||
*/
|
||||
this.layoutType = data.layout_type;
|
||||
} else {
|
||||
this.layoutType ??= null;
|
||||
}
|
||||
|
||||
if ('expiry' in data) {
|
||||
/**
|
||||
* The timestamp when this poll expires
|
||||
* @type {?number}
|
||||
*/
|
||||
this.expiresTimestamp = data.expiry && Date.parse(data.expiry);
|
||||
} else {
|
||||
this.expiresTimestamp ??= null;
|
||||
}
|
||||
|
||||
if (data.question) {
|
||||
/**
|
||||
* The media for a poll's question
|
||||
* @typedef {Object} PollQuestionMedia
|
||||
* @property {?string} text The text of this question
|
||||
*/
|
||||
|
||||
/**
|
||||
* The media for this poll's question
|
||||
* @type {PollQuestionMedia}
|
||||
*/
|
||||
this.question = {
|
||||
text: data.question.text,
|
||||
};
|
||||
} else {
|
||||
this.question ??= {
|
||||
text: null,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The date when this poll expires
|
||||
* @type {Date}
|
||||
* @type {?Date}
|
||||
* @readonly
|
||||
*/
|
||||
get expiresAt() {
|
||||
return new Date(this.expiresTimestamp);
|
||||
return this.expiresTimestamp && new Date(this.expiresTimestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether this poll is a partial
|
||||
* @type {boolean}
|
||||
* @readonly
|
||||
*/
|
||||
get partial() {
|
||||
return this.allowMultiselect === null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the message that started this poll, then updates the poll from the fetched message.
|
||||
* @returns {Promise<Poll>}
|
||||
*/
|
||||
async fetch() {
|
||||
await this.channel.messages.fetch(this.messageId);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,7 +168,7 @@ class Poll extends Base {
|
||||
throw new DiscordjsError(ErrorCodes.PollAlreadyExpired);
|
||||
}
|
||||
|
||||
return this.message.channel.messages.endPoll(this.message.id);
|
||||
return this.channel.messages.endPoll(this.messageId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
'use strict';
|
||||
|
||||
const Base = require('./Base');
|
||||
const { Emoji } = require('./Emoji');
|
||||
const process = require('node:process');
|
||||
const Base = require('./Base.js');
|
||||
const { Emoji } = require('./Emoji.js');
|
||||
const { PollAnswerVoterManager } = require('../managers/PollAnswerVoterManager.js');
|
||||
|
||||
let deprecationEmittedForFetchVoters = false;
|
||||
|
||||
/**
|
||||
* Represents an answer to a {@link Poll}
|
||||
@@ -14,7 +18,7 @@ class PollAnswer extends Base {
|
||||
/**
|
||||
* The {@link Poll} this answer is part of
|
||||
* @name PollAnswer#poll
|
||||
* @type {Poll}
|
||||
* @type {Poll|PartialPoll}
|
||||
* @readonly
|
||||
*/
|
||||
Object.defineProperty(this, 'poll', { value: poll });
|
||||
@@ -26,10 +30,10 @@ class PollAnswer extends Base {
|
||||
this.id = data.answer_id;
|
||||
|
||||
/**
|
||||
* The text of this answer
|
||||
* @type {?string}
|
||||
* The manager of the voters for this answer
|
||||
* @type {PollAnswerVoterManager}
|
||||
*/
|
||||
this.text = data.poll_media.text ?? null;
|
||||
this.voters = new PollAnswerVoterManager(this);
|
||||
|
||||
/**
|
||||
* The raw emoji of this answer
|
||||
@@ -37,7 +41,7 @@ class PollAnswer extends Base {
|
||||
* @type {?APIPartialEmoji}
|
||||
* @private
|
||||
*/
|
||||
Object.defineProperty(this, '_emoji', { value: data.poll_media.emoji ?? null });
|
||||
Object.defineProperty(this, '_emoji', { value: null, writable: true });
|
||||
|
||||
this._patch(data);
|
||||
}
|
||||
@@ -51,7 +55,17 @@ class PollAnswer extends Base {
|
||||
*/
|
||||
this.voteCount = data.count;
|
||||
} else {
|
||||
this.voteCount ??= 0;
|
||||
this.voteCount ??= this.voters.cache.size;
|
||||
}
|
||||
|
||||
/**
|
||||
* The text of this answer
|
||||
* @type {?string}
|
||||
*/
|
||||
this.text ??= data.poll_media?.text ?? null;
|
||||
|
||||
if (data.poll_media?.emoji) {
|
||||
this._emoji = data.poll_media.emoji;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +78,15 @@ class PollAnswer extends Base {
|
||||
return this.client.emojis.cache.get(this._emoji.id) ?? new Emoji(this.client, this._emoji);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether this poll answer is a partial.
|
||||
* @type {boolean}
|
||||
* @readonly
|
||||
*/
|
||||
get partial() {
|
||||
return this.poll.partial || (this.text === null && this.emoji === null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Options used for fetching voters of a poll answer.
|
||||
* @typedef {Object} BaseFetchPollAnswerVotersOptions
|
||||
@@ -75,14 +98,16 @@ class PollAnswer extends Base {
|
||||
* Fetches the users that voted for this answer.
|
||||
* @param {BaseFetchPollAnswerVotersOptions} [options={}] The options for fetching voters
|
||||
* @returns {Promise<Collection<Snowflake, User>>}
|
||||
* @deprecated Use {@link PollAnswerVoterManager#fetch} instead
|
||||
*/
|
||||
fetchVoters({ after, limit } = {}) {
|
||||
return this.poll.message.channel.messages.fetchPollAnswerVoters({
|
||||
messageId: this.poll.message.id,
|
||||
answerId: this.id,
|
||||
after,
|
||||
limit,
|
||||
});
|
||||
if (!deprecationEmittedForFetchVoters) {
|
||||
process.emitWarning('PollAnswer#fetchVoters is deprecated. Use PollAnswer#voters#fetch instead.');
|
||||
|
||||
deprecationEmittedForFetchVoters = true;
|
||||
}
|
||||
|
||||
return this.voters.fetch({ after, limit });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -267,7 +267,11 @@ class User extends Base {
|
||||
* @readonly
|
||||
*/
|
||||
get defaultAvatarURL() {
|
||||
const index = this.discriminator === '0' ? calculateUserDefaultAvatarIndex(this.id) : this.discriminator % 5;
|
||||
const index =
|
||||
this.discriminator === '0' || this.discriminator === '0000'
|
||||
? calculateUserDefaultAvatarIndex(this.id)
|
||||
: this.discriminator % 5;
|
||||
|
||||
return this.client.rest.cdn.defaultAvatar(index);
|
||||
}
|
||||
|
||||
@@ -322,7 +326,7 @@ class User extends Base {
|
||||
*/
|
||||
get tag() {
|
||||
return typeof this.username === 'string'
|
||||
? this.discriminator === '0'
|
||||
? this.discriminator === '0' || this.discriminator === '0000'
|
||||
? this.username
|
||||
: `${this.username}#${this.discriminator}`
|
||||
: null;
|
||||
|
||||
@@ -515,6 +515,11 @@
|
||||
* @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/InteractionResponseType}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @external InviteFlags
|
||||
* @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/InviteFlags}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @external InviteType
|
||||
* @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/InviteType}
|
||||
|
||||
28
packages/discord.js/src/util/InviteFlagsBitField.js
Normal file
28
packages/discord.js/src/util/InviteFlagsBitField.js
Normal file
@@ -0,0 +1,28 @@
|
||||
'use strict';
|
||||
|
||||
const { InviteFlags } = require('discord-api-types/v10');
|
||||
const { BitField } = require('./BitField.js');
|
||||
|
||||
/**
|
||||
* Data structure that makes it easy to interact with a {@link GuildInvite#flags} bit field.
|
||||
*
|
||||
* @extends {BitField}
|
||||
*/
|
||||
class InviteFlagsBitField extends BitField {
|
||||
/**
|
||||
* Numeric invite flags.
|
||||
*
|
||||
* @type {InviteFlags}
|
||||
* @memberof InviteFlagsBitField
|
||||
*/
|
||||
static Flags = InviteFlags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @name InviteFlagsBitField
|
||||
* @kind constructor
|
||||
* @memberof InviteFlagsBitField
|
||||
* @param {BitFieldResolvable} [bits=0] Bit(s) to read from
|
||||
*/
|
||||
|
||||
exports.InviteFlagsBitField = InviteFlagsBitField;
|
||||
@@ -27,6 +27,8 @@ const { createEnum } = require('./Enums');
|
||||
* @property {number} GuildScheduledEvent The partial to receive uncached guild scheduled events.
|
||||
* @property {number} ThreadMember The partial to receive uncached thread members.
|
||||
* @property {number} SoundboardSound The partial to receive uncached soundboard sounds.
|
||||
* @property {number} Poll The partial to receive uncached polls.
|
||||
* @property {number} PollAnswer The partial to receive uncached poll answers.
|
||||
*/
|
||||
|
||||
// JSDoc for IntelliSense purposes
|
||||
@@ -43,4 +45,6 @@ module.exports = createEnum([
|
||||
'GuildScheduledEvent',
|
||||
'ThreadMember',
|
||||
'SoundboardSound',
|
||||
'Poll',
|
||||
'PollAnswer',
|
||||
]);
|
||||
|
||||
71
packages/discord.js/typings/index.d.ts
vendored
71
packages/discord.js/typings/index.d.ts
vendored
@@ -215,6 +215,7 @@ import {
|
||||
APIFileComponent,
|
||||
APIMessageTopLevelComponent,
|
||||
EntryPointCommandHandlerType,
|
||||
InviteFlags,
|
||||
} from 'discord-api-types/v10';
|
||||
import { ChildProcess } from 'node:child_process';
|
||||
import { EventEmitter } from 'node:events';
|
||||
@@ -1671,6 +1672,7 @@ export class Guild extends AnonymousGuild {
|
||||
): Promise<Guild>;
|
||||
public setIcon(icon: BufferResolvable | Base64Resolvable | null, reason?: string): Promise<Guild>;
|
||||
public setName(name: string, reason?: string): Promise<Guild>;
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
public setOwner(owner: GuildMemberResolvable, reason?: string): Promise<Guild>;
|
||||
public setPreferredLocale(preferredLocale: Locale | null, reason?: string): Promise<Guild>;
|
||||
public setPublicUpdatesChannel(publicUpdatesChannel: TextChannelResolvable | null, reason?: string): Promise<Guild>;
|
||||
@@ -1682,6 +1684,7 @@ export class Guild extends AnonymousGuild {
|
||||
public setVerificationLevel(verificationLevel: GuildVerificationLevel | null, reason?: string): Promise<Guild>;
|
||||
public setPremiumProgressBarEnabled(enabled?: boolean, reason?: string): Promise<Guild>;
|
||||
public setWidgetSettings(settings: GuildWidgetSettingsData, reason?: string): Promise<Guild>;
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
public setMFALevel(level: GuildMFALevel, reason?: string): Promise<Guild>;
|
||||
public toJSON(): unknown;
|
||||
}
|
||||
@@ -2020,6 +2023,7 @@ export class GuildTemplate extends Base {
|
||||
public guildId: Snowflake;
|
||||
public serializedGuild: APITemplateSerializedSourceGuild;
|
||||
public unSynced: boolean | null;
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
public createGuild(name: string, icon?: BufferResolvable | Base64Resolvable): Promise<Guild>;
|
||||
public delete(): Promise<GuildTemplate>;
|
||||
public edit(options?: GuildTemplateEditOptions): Promise<GuildTemplate>;
|
||||
@@ -2271,6 +2275,7 @@ export class Invite extends Base {
|
||||
/** @deprecated Public Stage Instances don't exist anymore */
|
||||
public stageInstance: InviteStageInstance | null;
|
||||
public guildScheduledEvent: GuildScheduledEvent | null;
|
||||
public flags: Readonly<InviteFlagsBitField>;
|
||||
}
|
||||
|
||||
/** @deprecated Public Stage Instances don't exist anymore */
|
||||
@@ -2291,6 +2296,13 @@ export class InviteGuild extends AnonymousGuild {
|
||||
public welcomeScreen: WelcomeScreen | null;
|
||||
}
|
||||
|
||||
export type InviteFlagsString = keyof typeof InviteFlags;
|
||||
|
||||
export class InviteFlagsBitField extends BitField<InviteFlagsString> {
|
||||
public static Flags: typeof InviteFlags;
|
||||
public static resolve(bit?: BitFieldResolvable<InviteFlagsString, number>): number;
|
||||
}
|
||||
|
||||
export class LimitedCollection<Key, Value> extends Collection<Key, Value> {
|
||||
public constructor(options?: LimitedCollectionOptions<Key, Value>, iterable?: Iterable<readonly [Key, Value]>);
|
||||
public maxSize: number;
|
||||
@@ -3002,19 +3014,30 @@ export class Presence extends Base {
|
||||
}
|
||||
|
||||
export interface PollQuestionMedia {
|
||||
text: string;
|
||||
text: string | null;
|
||||
}
|
||||
|
||||
export class PollAnswerVoterManager extends CachedManager<Snowflake, User, UserResolvable> {
|
||||
private constructor(answer: PollAnswer);
|
||||
public answer: PollAnswer;
|
||||
public fetch(options?: BaseFetchPollAnswerVotersOptions): Promise<Collection<Snowflake, User>>;
|
||||
}
|
||||
|
||||
export class Poll extends Base {
|
||||
private constructor(client: Client<true>, data: APIPoll, message: Message);
|
||||
private constructor(client: Client<true>, data: APIPoll, message: Message, channel: TextBasedChannel);
|
||||
public readonly channel: TextBasedChannel;
|
||||
public channelId: Snowflake;
|
||||
public readonly message: Message;
|
||||
public messageId: Snowflake;
|
||||
public question: PollQuestionMedia;
|
||||
public answers: Collection<number, PollAnswer>;
|
||||
public expiresTimestamp: number;
|
||||
public get expiresAt(): Date;
|
||||
public answers: Collection<number, PollAnswer | PartialPollAnswer>;
|
||||
public expiresTimestamp: number | null;
|
||||
public get expiresAt(): Date | null;
|
||||
public allowMultiselect: boolean;
|
||||
public layoutType: PollLayoutType;
|
||||
public resultsFinalized: boolean;
|
||||
public get partial(): false;
|
||||
public fetch(): Promise<this>;
|
||||
public end(): Promise<Message>;
|
||||
}
|
||||
|
||||
@@ -3026,11 +3049,14 @@ export interface BaseFetchPollAnswerVotersOptions {
|
||||
export class PollAnswer extends Base {
|
||||
private constructor(client: Client<true>, data: APIPollAnswer & { count?: number }, poll: Poll);
|
||||
private _emoji: APIPartialEmoji | null;
|
||||
public readonly poll: Poll;
|
||||
public readonly poll: Poll | PartialPoll;
|
||||
public id: number;
|
||||
public text: string | null;
|
||||
public voteCount: number;
|
||||
public voters: PollAnswerVoterManager;
|
||||
public get emoji(): GuildEmoji | Emoji | null;
|
||||
public get partial(): false;
|
||||
/** @deprecated Use {@link PollAnswerVoterManager.fetch} instead */
|
||||
public fetchVoters(options?: BaseFetchPollAnswerVotersOptions): Promise<Collection<Snowflake, User>>;
|
||||
}
|
||||
|
||||
@@ -4845,6 +4871,7 @@ export interface FetchSoundboardSoundsOptions {
|
||||
|
||||
export class GuildManager extends CachedManager<Snowflake, Guild, GuildResolvable> {
|
||||
private constructor(client: Client<true>, iterable?: Iterable<RawGuildData>);
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
public create(options: GuildCreateOptions): Promise<Guild>;
|
||||
public fetch(options: Snowflake | FetchGuildOptions): Promise<Guild>;
|
||||
public fetch(options?: FetchGuildsOptions): Promise<Collection<Snowflake, OAuth2Guild>>;
|
||||
@@ -5306,7 +5333,9 @@ export type AllowedPartial =
|
||||
| MessageReaction
|
||||
| GuildScheduledEvent
|
||||
| ThreadMember
|
||||
| SoundboardSound;
|
||||
| SoundboardSound
|
||||
| Poll
|
||||
| PollAnswer;
|
||||
|
||||
export type AllowedThreadTypeForNewsChannel = ChannelType.AnnouncementThread;
|
||||
|
||||
@@ -5878,8 +5907,8 @@ export interface ClientEvents {
|
||||
inviteDelete: [invite: Invite];
|
||||
messageCreate: [message: OmitPartialGroupDMChannel<Message>];
|
||||
messageDelete: [message: OmitPartialGroupDMChannel<Message | PartialMessage>];
|
||||
messagePollVoteAdd: [pollAnswer: PollAnswer, userId: Snowflake];
|
||||
messagePollVoteRemove: [pollAnswer: PollAnswer, userId: Snowflake];
|
||||
messagePollVoteAdd: [pollAnswer: PollAnswer | PartialPollAnswer, userId: Snowflake];
|
||||
messagePollVoteRemove: [pollAnswer: PollAnswer | PartialPollAnswer, userId: Snowflake];
|
||||
messageReactionRemoveAll: [
|
||||
message: OmitPartialGroupDMChannel<Message | PartialMessage>,
|
||||
reactions: ReadonlyCollection<string | Snowflake, MessageReaction>,
|
||||
@@ -6645,6 +6674,7 @@ export interface GuildChannelOverwriteOptions {
|
||||
type?: OverwriteType;
|
||||
}
|
||||
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
export interface GuildCreateOptions {
|
||||
name: string;
|
||||
icon?: BufferResolvable | Base64Resolvable | null;
|
||||
@@ -6672,6 +6702,7 @@ export interface GuildEditOptions {
|
||||
afkTimeout?: number;
|
||||
afkChannel?: VoiceChannelResolvable | null;
|
||||
icon?: BufferResolvable | Base64Resolvable | null;
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
owner?: GuildMemberResolvable;
|
||||
splash?: BufferResolvable | Base64Resolvable | null;
|
||||
discoverySplash?: BufferResolvable | Base64Resolvable | null;
|
||||
@@ -7320,6 +7351,7 @@ export interface PresenceData {
|
||||
|
||||
export type PresenceResolvable = Presence | UserResolvable | Snowflake;
|
||||
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
export interface PartialChannelData {
|
||||
id?: Snowflake | number;
|
||||
parentId?: Snowflake | number;
|
||||
@@ -7371,6 +7403,23 @@ export interface PartialMessage
|
||||
|
||||
export interface PartialMessageReaction extends Partialize<MessageReaction, 'count'> {}
|
||||
|
||||
export interface PartialPoll
|
||||
extends Partialize<
|
||||
Poll,
|
||||
'allowMultiselect' | 'layoutType' | 'expiresTimestamp',
|
||||
null,
|
||||
'question' | 'message' | 'answers'
|
||||
> {
|
||||
question: { text: null };
|
||||
message: PartialMessage;
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
answers: Collection<number, PartialPollAnswer>;
|
||||
}
|
||||
|
||||
export interface PartialPollAnswer extends Partialize<PollAnswer, 'emoji' | 'text', null, 'poll'> {
|
||||
readonly poll: PartialPoll;
|
||||
}
|
||||
|
||||
export interface PartialGuildScheduledEvent
|
||||
extends Partialize<GuildScheduledEvent, 'userCount', 'status' | 'privacyLevel' | 'name' | 'entityType'> {}
|
||||
|
||||
@@ -7378,6 +7427,7 @@ export interface PartialThreadMember extends Partialize<ThreadMember, 'flags' |
|
||||
|
||||
export interface PartialSoundboardSound extends Partialize<SoundboardSound, 'available' | 'name' | 'volume'> {}
|
||||
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
export interface PartialOverwriteData {
|
||||
id: Snowflake | number;
|
||||
type?: OverwriteType;
|
||||
@@ -7385,6 +7435,7 @@ export interface PartialOverwriteData {
|
||||
deny?: PermissionResolvable;
|
||||
}
|
||||
|
||||
/** @deprecated API related to guild ownership may no longer be used. */
|
||||
export interface PartialRoleData extends RoleData {
|
||||
id?: Snowflake | number;
|
||||
}
|
||||
@@ -7398,6 +7449,8 @@ export enum Partials {
|
||||
GuildScheduledEvent,
|
||||
ThreadMember,
|
||||
SoundboardSound,
|
||||
Poll,
|
||||
PollAnswer,
|
||||
}
|
||||
|
||||
export interface PartialUser extends Partialize<User, 'username' | 'tag' | 'discriminator'> {}
|
||||
|
||||
@@ -232,7 +232,11 @@ import {
|
||||
ContainerComponentData,
|
||||
InteractionResponse,
|
||||
FetchPinnedMessagesResponse,
|
||||
} from '.';
|
||||
PartialPoll,
|
||||
PartialPollAnswer,
|
||||
PollAnswer,
|
||||
PollAnswerVoterManager,
|
||||
} from './index.js';
|
||||
import {
|
||||
expectAssignable,
|
||||
expectDeprecated,
|
||||
@@ -715,6 +719,48 @@ client.on('messageDeleteBulk', (messages, { client }) => {
|
||||
expectType<Client<true>>(client);
|
||||
});
|
||||
|
||||
client.on('messagePollVoteAdd', async (answer, userId) => {
|
||||
expectType<Client<true>>(answer.client);
|
||||
expectType<Snowflake>(userId);
|
||||
|
||||
if (answer.partial) {
|
||||
expectType<null>(answer.emoji);
|
||||
expectType<null>(answer.text);
|
||||
expectNotType<null>(answer.id);
|
||||
expectNotType<null>(answer.poll);
|
||||
|
||||
await answer.poll.fetch();
|
||||
answer = answer.poll.answers?.get(answer.id) ?? answer;
|
||||
|
||||
expectType<User>(answer.voters.cache.get(userId)!);
|
||||
}
|
||||
|
||||
expectType<string | null>(answer.text);
|
||||
expectType<GuildEmoji | Emoji | null>(answer.emoji);
|
||||
expectType<number>(answer.id);
|
||||
expectType<number>(answer.voteCount!);
|
||||
});
|
||||
|
||||
client.on('messagePollVoteRemove', async (answer, userId) => {
|
||||
expectType<Client<true>>(answer.client);
|
||||
expectType<Snowflake>(userId);
|
||||
|
||||
if (answer.partial) {
|
||||
expectType<null>(answer.emoji);
|
||||
expectType<null>(answer.text);
|
||||
expectNotType<null>(answer.id);
|
||||
expectNotType<null>(answer.poll);
|
||||
|
||||
await answer.poll.fetch();
|
||||
answer = answer.poll.answers?.get(answer.id) ?? answer;
|
||||
}
|
||||
|
||||
expectType<string | null>(answer.text);
|
||||
expectType<GuildEmoji | Emoji | null>(answer.emoji);
|
||||
expectType<number>(answer.id);
|
||||
expectType<number>(answer.voteCount!);
|
||||
});
|
||||
|
||||
client.on('messageReactionAdd', async (reaction, { client }) => {
|
||||
expectType<Client<true>>(reaction.client);
|
||||
expectType<Client<true>>(client);
|
||||
@@ -1780,6 +1826,12 @@ declare const messageManager: MessageManager;
|
||||
messageManager.fetch({ message: '1234567890', after: '1234567890', cache: true, force: false });
|
||||
}
|
||||
|
||||
declare const pollAnswerVoterManager: PollAnswerVoterManager;
|
||||
{
|
||||
expectType<Promise<Collection<Snowflake, User>>>(pollAnswerVoterManager.fetch());
|
||||
expectType<PollAnswer>(pollAnswerVoterManager.answer);
|
||||
}
|
||||
|
||||
declare const roleManager: RoleManager;
|
||||
expectType<Promise<Collection<Snowflake, Role>>>(roleManager.fetch());
|
||||
expectType<Promise<Collection<Snowflake, Role>>>(roleManager.fetch(undefined, {}));
|
||||
@@ -2802,16 +2854,42 @@ await textChannel.send({
|
||||
},
|
||||
});
|
||||
|
||||
declare const partialPoll: PartialPoll;
|
||||
{
|
||||
if (partialPoll.partial) {
|
||||
expectType<null>(partialPoll.question.text);
|
||||
expectType<PartialMessage>(partialPoll.message);
|
||||
expectType<null>(partialPoll.allowMultiselect);
|
||||
expectType<null>(partialPoll.layoutType);
|
||||
expectType<null>(partialPoll.expiresTimestamp);
|
||||
expectType<Collection<number, PartialPollAnswer>>(partialPoll.answers);
|
||||
}
|
||||
}
|
||||
|
||||
declare const partialPollAnswer: PartialPollAnswer;
|
||||
{
|
||||
if (partialPollAnswer.partial) {
|
||||
expectType<PartialPoll>(partialPollAnswer.poll);
|
||||
expectType<null>(partialPollAnswer.emoji);
|
||||
expectType<null>(partialPollAnswer.text);
|
||||
}
|
||||
}
|
||||
declare const poll: Poll;
|
||||
declare const message: Message;
|
||||
declare const pollData: PollData;
|
||||
{
|
||||
expectType<Message>(await poll.end());
|
||||
expectType<false>(poll.partial);
|
||||
expectNotType<Collection<number, PartialPollAnswer>>(poll.answers);
|
||||
|
||||
const answer = poll.answers.first()!;
|
||||
expectType<number>(answer.voteCount);
|
||||
|
||||
expectType<Collection<Snowflake, User>>(await answer.fetchVoters({ after: snowflake, limit: 10 }));
|
||||
if (!answer.partial) {
|
||||
expectType<number>(answer.voteCount);
|
||||
expectType<number>(answer.id);
|
||||
expectType<PollAnswerVoterManager>(answer.voters);
|
||||
expectType<Collection<Snowflake, User>>(await answer.voters.fetch({ after: snowflake, limit: 10 }));
|
||||
}
|
||||
|
||||
await messageManager.endPoll(snowflake);
|
||||
await messageManager.fetchPollAnswerVoters({
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
"homepage": "https://discord.js.org",
|
||||
"funding": "https://github.com/discordjs/discord.js?sponsor",
|
||||
"dependencies": {
|
||||
"discord-api-types": "^0.38.16"
|
||||
"discord-api-types": "^0.38.24"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@discordjs/api-extractor": "workspace:^",
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
"@discordjs/rest": "workspace:^",
|
||||
"@discordjs/util": "workspace:^",
|
||||
"@discordjs/ws": "workspace:^",
|
||||
"discord-api-types": "^0.38.16"
|
||||
"discord-api-types": "^0.38.24"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@discordjs/api-extractor": "workspace:^",
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
"@sapphire/async-queue": "^1.5.3",
|
||||
"@sapphire/snowflake": "^3.5.3",
|
||||
"@vladfrangu/async_event_emitter": "^2.4.6",
|
||||
"discord-api-types": "^0.38.16",
|
||||
"discord-api-types": "^0.38.24",
|
||||
"magic-bytes.js": "^1.10.0",
|
||||
"tslib": "^2.6.3",
|
||||
"undici": "6.21.3"
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
"funding": "https://github.com/discordjs/discord.js?sponsor",
|
||||
"dependencies": {
|
||||
"@types/ws": "^8.5.12",
|
||||
"discord-api-types": "^0.38.16",
|
||||
"discord-api-types": "^0.38.24",
|
||||
"prism-media": "^1.3.5",
|
||||
"tslib": "^2.6.3",
|
||||
"ws": "^8.18.0"
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
"@sapphire/async-queue": "^1.5.3",
|
||||
"@types/ws": "^8.5.12",
|
||||
"@vladfrangu/async_event_emitter": "^2.4.6",
|
||||
"discord-api-types": "^0.38.16",
|
||||
"discord-api-types": "^0.38.24",
|
||||
"tslib": "^2.6.3",
|
||||
"ws": "^8.18.0"
|
||||
},
|
||||
|
||||
62
pnpm-lock.yaml
generated
62
pnpm-lock.yaml
generated
@@ -816,8 +816,8 @@ importers:
|
||||
specifier: ^2.4.6
|
||||
version: 2.4.6
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
devDependencies:
|
||||
'@discordjs/api-extractor':
|
||||
specifier: workspace:^
|
||||
@@ -953,8 +953,8 @@ importers:
|
||||
specifier: 3.5.3
|
||||
version: 3.5.3
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
fast-deep-equal:
|
||||
specifier: 3.1.3
|
||||
version: 3.1.3
|
||||
@@ -1075,8 +1075,8 @@ importers:
|
||||
packages/formatters:
|
||||
dependencies:
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
devDependencies:
|
||||
'@discordjs/api-extractor':
|
||||
specifier: workspace:^
|
||||
@@ -1148,8 +1148,8 @@ importers:
|
||||
specifier: workspace:^
|
||||
version: link:../ws
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
devDependencies:
|
||||
'@discordjs/api-extractor':
|
||||
specifier: workspace:^
|
||||
@@ -1322,8 +1322,8 @@ importers:
|
||||
specifier: ^2.4.6
|
||||
version: 2.4.6
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
magic-bytes.js:
|
||||
specifier: ^1.10.0
|
||||
version: 1.10.0
|
||||
@@ -1619,8 +1619,8 @@ importers:
|
||||
specifier: ^8.5.12
|
||||
version: 8.5.12
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
prism-media:
|
||||
specifier: ^1.3.5
|
||||
version: 1.3.5
|
||||
@@ -1716,8 +1716,8 @@ importers:
|
||||
specifier: ^2.4.6
|
||||
version: 2.4.6
|
||||
discord-api-types:
|
||||
specifier: ^0.38.16
|
||||
version: 0.38.16
|
||||
specifier: ^0.38.24
|
||||
version: 0.38.24
|
||||
tslib:
|
||||
specifier: ^2.6.3
|
||||
version: 2.6.3
|
||||
@@ -2777,12 +2777,12 @@ packages:
|
||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@definitelytyped/header-parser@0.2.19':
|
||||
resolution: {integrity: sha512-zu+RxQpUCgorYUQZoyyrRIn9CljL1CeM4qak3NDeMO1r7tjAkodfpAGnVzx/6JR2OUk0tAgwmZxNMSwd9LVgxw==}
|
||||
'@definitelytyped/header-parser@0.2.20':
|
||||
resolution: {integrity: sha512-97YPAlUo8XjWNtZ+6k+My+50/ljE2iX6KEPjOZ1Az1RsZdKwJ6taAX3F5g6SY1SJr50bzdm2RZzyQNdRmHcs4w==}
|
||||
engines: {node: '>=18.18.0'}
|
||||
|
||||
'@definitelytyped/typescript-versions@0.1.8':
|
||||
resolution: {integrity: sha512-iz6q9aTwWW7CzN2g8jFQfZ955D63LA+wdIAKz4+2pCc/7kokmEHie1/jVWSczqLFOlmH+69bWQxIurryBP/sig==}
|
||||
'@definitelytyped/typescript-versions@0.1.9':
|
||||
resolution: {integrity: sha512-Qjalw9eNlcTjXhzx0Q6kHKuRCOUt/M5RGGRGKsiYlm/nveGvPX9liZSQlGXZVwyQ5I9qvq/GdaWiPchQ+ZXOrQ==}
|
||||
engines: {node: '>=18.18.0'}
|
||||
|
||||
'@definitelytyped/utils@0.1.8':
|
||||
@@ -8357,8 +8357,8 @@ packages:
|
||||
discord-api-types@0.37.119:
|
||||
resolution: {integrity: sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==}
|
||||
|
||||
discord-api-types@0.38.16:
|
||||
resolution: {integrity: sha512-Cz42dC5WqJD17Yk0bRy7YLTJmh3NKo4FGpxZuA8MHqT0RPxKSrll5YhlODZ2z5DiEV/gpHMeTSrTFTWpSXjT1Q==}
|
||||
discord-api-types@0.38.24:
|
||||
resolution: {integrity: sha512-P7/DkcFIiIoaBogStnhhcGRX7KR+gIFp0SpmwsZUIM0bgDkYMEUx+8l+t3quYc/KSgg92wvE9w/4mabO57EMug==}
|
||||
|
||||
dlv@1.1.3:
|
||||
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
|
||||
@@ -16299,13 +16299,13 @@ snapshots:
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.9
|
||||
|
||||
'@definitelytyped/header-parser@0.2.19':
|
||||
'@definitelytyped/header-parser@0.2.20':
|
||||
dependencies:
|
||||
'@definitelytyped/typescript-versions': 0.1.8
|
||||
'@definitelytyped/typescript-versions': 0.1.9
|
||||
'@definitelytyped/utils': 0.1.8
|
||||
semver: 7.7.1
|
||||
|
||||
'@definitelytyped/typescript-versions@0.1.8': {}
|
||||
'@definitelytyped/typescript-versions@0.1.9': {}
|
||||
|
||||
'@definitelytyped/utils@0.1.8':
|
||||
dependencies:
|
||||
@@ -16323,7 +16323,7 @@ snapshots:
|
||||
'@discordjs/formatters': 0.6.1
|
||||
'@discordjs/util': 1.1.1
|
||||
'@sapphire/shapeshift': 4.0.0
|
||||
discord-api-types: 0.38.16
|
||||
discord-api-types: 0.38.24
|
||||
fast-deep-equal: 3.1.3
|
||||
ts-mixer: 6.0.4
|
||||
tslib: 2.8.1
|
||||
@@ -16334,7 +16334,7 @@ snapshots:
|
||||
|
||||
'@discordjs/formatters@0.6.1':
|
||||
dependencies:
|
||||
discord-api-types: 0.38.16
|
||||
discord-api-types: 0.38.24
|
||||
|
||||
'@discordjs/rest@2.5.1':
|
||||
dependencies:
|
||||
@@ -16343,7 +16343,7 @@ snapshots:
|
||||
'@sapphire/async-queue': 1.5.3
|
||||
'@sapphire/snowflake': 3.5.3
|
||||
'@vladfrangu/async_event_emitter': 2.4.6
|
||||
discord-api-types: 0.38.16
|
||||
discord-api-types: 0.38.24
|
||||
magic-bytes.js: 1.10.0
|
||||
tslib: 2.8.1
|
||||
undici: 6.21.3
|
||||
@@ -16358,7 +16358,7 @@ snapshots:
|
||||
'@sapphire/async-queue': 1.5.3
|
||||
'@types/ws': 8.5.12
|
||||
'@vladfrangu/async_event_emitter': 2.4.6
|
||||
discord-api-types: 0.38.16
|
||||
discord-api-types: 0.38.24
|
||||
tslib: 2.8.1
|
||||
ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
|
||||
transitivePeerDependencies:
|
||||
@@ -23711,7 +23711,7 @@ snapshots:
|
||||
|
||||
discord-api-types@0.37.119: {}
|
||||
|
||||
discord-api-types@0.38.16: {}
|
||||
discord-api-types@0.38.24: {}
|
||||
|
||||
dlv@1.1.3: {}
|
||||
|
||||
@@ -23762,7 +23762,7 @@ snapshots:
|
||||
|
||||
dts-critic@3.3.11(typescript@5.5.4):
|
||||
dependencies:
|
||||
'@definitelytyped/header-parser': 0.2.19
|
||||
'@definitelytyped/header-parser': 0.2.20
|
||||
command-exists: 1.2.9
|
||||
rimraf: 3.0.2
|
||||
semver: 6.3.1
|
||||
@@ -23772,8 +23772,8 @@ snapshots:
|
||||
|
||||
dtslint@4.2.1(typescript@5.5.4):
|
||||
dependencies:
|
||||
'@definitelytyped/header-parser': 0.2.19
|
||||
'@definitelytyped/typescript-versions': 0.1.8
|
||||
'@definitelytyped/header-parser': 0.2.20
|
||||
'@definitelytyped/typescript-versions': 0.1.9
|
||||
'@definitelytyped/utils': 0.1.8
|
||||
dts-critic: 3.3.11(typescript@5.5.4)
|
||||
fs-extra: 6.0.1
|
||||
|
||||
Reference in New Issue
Block a user