discord-sb.js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +2 -0
- package/package.json +91 -0
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +86 -0
- package/src/client/Client.js +978 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +116 -0
- package/src/client/actions/ActionsManager.js +80 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +27 -0
- package/src/client/actions/AutoModerationRuleCreate.js +28 -0
- package/src/client/actions/AutoModerationRuleDelete.js +32 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +43 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -0
- package/src/client/actions/MessageReactionRemove.js +50 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +50 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +50 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +151 -0
- package/src/client/voice/VoiceConnection.js +1249 -0
- package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
- package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
- package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
- package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
- package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
- package/src/client/voice/networking/VoiceUDPClient.js +173 -0
- package/src/client/voice/networking/VoiceWebSocket.js +286 -0
- package/src/client/voice/player/MediaPlayer.js +321 -0
- package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
- package/src/client/voice/player/processing/IvfSplitter.js +106 -0
- package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
- package/src/client/voice/receiver/PacketHandler.js +260 -0
- package/src/client/voice/receiver/Receiver.js +96 -0
- package/src/client/voice/receiver/Recorder.js +173 -0
- package/src/client/voice/util/Function.js +116 -0
- package/src/client/voice/util/PlayInterface.js +122 -0
- package/src/client/voice/util/Secretbox.js +64 -0
- package/src/client/voice/util/Silence.js +16 -0
- package/src/client/voice/util/Socket.js +62 -0
- package/src/client/voice/util/VolumeInterface.js +104 -0
- package/src/client/websocket/WebSocketManager.js +392 -0
- package/src/client/websocket/WebSocketShard.js +907 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +121 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +84 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +217 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +172 -0
- package/src/managers/ApplicationCommandManager.js +264 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
- package/src/managers/AutoModerationRuleManager.js +296 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/BillingManager.js +66 -0
- package/src/managers/CachedManager.js +71 -0
- package/src/managers/ChannelManager.js +148 -0
- package/src/managers/ClientUserSettingManager.js +372 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperManager.js +254 -0
- package/src/managers/GuildBanManager.js +250 -0
- package/src/managers/GuildChannelManager.js +488 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +108 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +338 -0
- package/src/managers/GuildMemberManager.js +599 -0
- package/src/managers/GuildMemberRoleManager.js +195 -0
- package/src/managers/GuildScheduledEventManager.js +314 -0
- package/src/managers/GuildSettingManager.js +155 -0
- package/src/managers/GuildStickerManager.js +179 -0
- package/src/managers/GuildTextThreadManager.js +98 -0
- package/src/managers/InteractionManager.js +39 -0
- package/src/managers/MessageManager.js +423 -0
- package/src/managers/PermissionOverwriteManager.js +164 -0
- package/src/managers/PresenceManager.js +71 -0
- package/src/managers/QuestManager.js +353 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +73 -0
- package/src/managers/RelationshipManager.js +278 -0
- package/src/managers/RoleManager.js +448 -0
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +175 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +136 -0
- package/src/managers/UserNoteManager.js +53 -0
- package/src/managers/VoiceStateManager.js +59 -0
- package/src/rest/APIRequest.js +154 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/DiscordAPIError.js +119 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +67 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +466 -0
- package/src/sharding/Shard.js +444 -0
- package/src/sharding/ShardClientUtil.js +279 -0
- package/src/sharding/ShardingManager.js +319 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +593 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +107 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseCommandInteraction.js +211 -0
- package/src/structures/BaseGuild.js +116 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +191 -0
- package/src/structures/BaseGuildVoiceChannel.js +241 -0
- package/src/structures/BaseMessageComponent.js +181 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CallState.js +63 -0
- package/src/structures/CategoryChannel.js +85 -0
- package/src/structures/Channel.js +284 -0
- package/src/structures/ClientPresence.js +77 -0
- package/src/structures/ClientUser.js +655 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +219 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -0
- package/src/structures/GroupDMChannel.js +394 -0
- package/src/structures/Guild.js +1791 -0
- package/src/structures/GuildAuditLogs.js +746 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +470 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildMember.js +636 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +536 -0
- package/src/structures/GuildTemplate.js +236 -0
- package/src/structures/Integration.js +188 -0
- package/src/structures/IntegrationApplication.js +96 -0
- package/src/structures/Interaction.js +290 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +358 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/MediaChannel.js +11 -0
- package/src/structures/MediaGalleryComponent.js +41 -0
- package/src/structures/MediaGalleryItem.js +47 -0
- package/src/structures/Message.js +1252 -0
- package/src/structures/MessageActionRow.js +105 -0
- package/src/structures/MessageAttachment.js +216 -0
- package/src/structures/MessageButton.js +166 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +120 -0
- package/src/structures/MessageContextMenuInteraction.js +20 -0
- package/src/structures/MessageEmbed.js +596 -0
- package/src/structures/MessageMentions.js +273 -0
- package/src/structures/MessagePayload.js +354 -0
- package/src/structures/MessageReaction.js +181 -0
- package/src/structures/MessageSelectMenu.js +141 -0
- package/src/structures/Modal.js +161 -0
- package/src/structures/ModalSubmitFieldsResolver.js +53 -0
- package/src/structures/ModalSubmitInteraction.js +119 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PermissionOverwrites.js +198 -0
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1157 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +590 -0
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -0
- package/src/structures/SeparatorComponent.js +48 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -0
- package/src/structures/StageInstance.js +208 -0
- package/src/structures/Sticker.js +310 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StoreChannel.js +56 -0
- package/src/structures/Team.js +118 -0
- package/src/structures/TeamMember.js +80 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -0
- package/src/structures/ThreadChannel.js +605 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +640 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +354 -0
- package/src/structures/WebEmbed.js +373 -0
- package/src/structures/Webhook.js +478 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +48 -0
- package/src/structures/Widget.js +87 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +953 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +821 -0
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +76 -0
- package/src/util/AttachmentFlags.js +38 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1914 -0
- package/src/util/DataResolver.js +146 -0
- package/src/util/Formatters.js +228 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/InviteFlags.js +34 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +63 -0
- package/src/util/Options.js +358 -0
- package/src/util/Permissions.js +202 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +33 -0
- package/src/util/RemoteAuth.js +415 -0
- package/src/util/RoleFlags.js +37 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Speaking.js +33 -0
- package/src/util/Sweepers.js +466 -0
- package/src/util/SystemChannelFlags.js +55 -0
- package/src/util/ThreadMemberFlags.js +30 -0
- package/src/util/UserFlags.js +104 -0
- package/src/util/Util.js +1048 -0
- package/typings/enums.d.ts +439 -0
- package/typings/index.d.ts +8505 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +403 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
Credit: https://github.com/dank074/Discord-video-stream
|
|
5
|
+
The use of video streaming in this library is an incomplete implementation with many bugs, primarily aimed at lazy users.
|
|
6
|
+
The video streaming features in this library are sourced from https://github.com/dank074/Discord-video-stream.
|
|
7
|
+
|
|
8
|
+
Please use the @dank074/discord-video-stream library to access all advanced and professional features,
|
|
9
|
+
along with comprehensive support. I will not actively fix bugs related to streaming and encourage everyone to
|
|
10
|
+
use https://github.com/dank074/Discord-video-stream for stable and smooth streaming.
|
|
11
|
+
|
|
12
|
+
To reiterate: This is an incomplete implementation of the library https://github.com/dank074/Discord-video-stream.
|
|
13
|
+
|
|
14
|
+
Thanks to dank074 and longnguyen2004 for implementing new codecs (H264, H265).
|
|
15
|
+
Thanks to mrjvs for discovering how Discord transmits data and the VP8 codec.
|
|
16
|
+
|
|
17
|
+
Please use the @dank074/discord-video-stream library for the best support.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const { Buffer } = require('buffer');
|
|
21
|
+
const VideoDispatcher = require('./VideoDispatcher');
|
|
22
|
+
const Util = require('../../../util/Util');
|
|
23
|
+
const { H264Helpers, H265Helpers } = require('../player/processing/AnnexBNalSplitter');
|
|
24
|
+
|
|
25
|
+
class AnnexBDispatcher extends VideoDispatcher {
|
|
26
|
+
constructor(player, highWaterMark = 12, streams, fps, nalFunctions, payloadType) {
|
|
27
|
+
super(player, highWaterMark, streams, fps, payloadType);
|
|
28
|
+
this._nalFunctions = nalFunctions;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_codecCallback(frame) {
|
|
32
|
+
let accessUnit = frame;
|
|
33
|
+
let offset = 0;
|
|
34
|
+
|
|
35
|
+
// Extract NALUs from the access unit
|
|
36
|
+
while (offset < accessUnit.length) {
|
|
37
|
+
const naluSize = accessUnit.readUInt32BE(offset);
|
|
38
|
+
offset += 4;
|
|
39
|
+
const nalu = accessUnit.subarray(offset, offset + naluSize);
|
|
40
|
+
const isLastNal = offset + naluSize >= accessUnit.length;
|
|
41
|
+
if (nalu.length <= this.mtu) {
|
|
42
|
+
// Send as Single NAL Unit Packet.
|
|
43
|
+
this._playChunk(Buffer.concat([this.createPayloadExtension(), nalu]), isLastNal);
|
|
44
|
+
} else {
|
|
45
|
+
const [naluHeader, naluData] = this._nalFunctions.splitHeader(nalu);
|
|
46
|
+
const dataFragments = this.partitionMtu(naluData);
|
|
47
|
+
// Send as Fragmentation Unit A (FU-A):
|
|
48
|
+
for (let fragmentIndex = 0; fragmentIndex < dataFragments.length; fragmentIndex++) {
|
|
49
|
+
const data = dataFragments[fragmentIndex];
|
|
50
|
+
const isFirstPacket = fragmentIndex === 0;
|
|
51
|
+
const isFinalPacket = fragmentIndex === dataFragments.length - 1;
|
|
52
|
+
|
|
53
|
+
this._playChunk(
|
|
54
|
+
Buffer.concat([
|
|
55
|
+
this.createPayloadExtension(),
|
|
56
|
+
this.makeFragmentationUnitHeader(isFirstPacket, isFinalPacket, naluHeader),
|
|
57
|
+
data,
|
|
58
|
+
]),
|
|
59
|
+
isLastNal && isFinalPacket,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
offset += naluSize;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
class H264Dispatcher extends AnnexBDispatcher {
|
|
69
|
+
constructor(player, highWaterMark = 12, streams, fps) {
|
|
70
|
+
super(player, highWaterMark, streams, fps, H264Helpers, Util.getPayloadType('H264'));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
makeFragmentationUnitHeader(isFirstPacket, isLastPacket, naluHeader) {
|
|
74
|
+
const nal0 = naluHeader[0];
|
|
75
|
+
const fuPayloadHeader = Buffer.alloc(2);
|
|
76
|
+
const nalType = H264Helpers.getUnitType(naluHeader);
|
|
77
|
+
const fnri = nal0 & 0xe0;
|
|
78
|
+
|
|
79
|
+
fuPayloadHeader[0] = 0x1c | fnri;
|
|
80
|
+
|
|
81
|
+
if (isFirstPacket) {
|
|
82
|
+
fuPayloadHeader[1] = 0x80 | nalType;
|
|
83
|
+
} else if (isLastPacket) {
|
|
84
|
+
fuPayloadHeader[1] = 0x40 | nalType;
|
|
85
|
+
} else {
|
|
86
|
+
fuPayloadHeader[1] = nalType;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return fuPayloadHeader;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
class H265Dispatcher extends AnnexBDispatcher {
|
|
94
|
+
constructor(player, highWaterMark = 12, streams, fps) {
|
|
95
|
+
super(player, highWaterMark, streams, fps, H265Helpers, Util.getPayloadType('H265'));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
makeFragmentationUnitHeader(isFirstPacket, isLastPacket, naluHeader) {
|
|
99
|
+
const fuIndicatorHeader = Buffer.allocUnsafe(3);
|
|
100
|
+
naluHeader.copy(fuIndicatorHeader);
|
|
101
|
+
const nalType = H265Helpers.getUnitType(naluHeader);
|
|
102
|
+
|
|
103
|
+
fuIndicatorHeader[0] = (fuIndicatorHeader[0] & 0b10000001) | (49 << 1);
|
|
104
|
+
|
|
105
|
+
if (isFirstPacket) {
|
|
106
|
+
fuIndicatorHeader[2] = 0x80 | nalType;
|
|
107
|
+
} else if (isLastPacket) {
|
|
108
|
+
fuIndicatorHeader[2] = 0x40 | nalType;
|
|
109
|
+
} else {
|
|
110
|
+
fuIndicatorHeader[2] = nalType;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return fuIndicatorHeader;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
module.exports = {
|
|
118
|
+
H264Dispatcher,
|
|
119
|
+
H265Dispatcher,
|
|
120
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BaseDispatcher = require('./BaseDispatcher');
|
|
4
|
+
const Util = require('../../../util/Util');
|
|
5
|
+
const Silence = require('../util/Silence');
|
|
6
|
+
const VolumeInterface = require('../util/VolumeInterface');
|
|
7
|
+
|
|
8
|
+
const CHANNELS = 2;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @external WritableStream
|
|
12
|
+
* @see {@link https://nodejs.org/api/stream.html#stream_class_stream_writable}
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The class that sends voice packet data to the voice connection.
|
|
17
|
+
* ```js
|
|
18
|
+
* // Obtained using:
|
|
19
|
+
* client.voice.joinChannel(channel).then(connection => {
|
|
20
|
+
* // You can play a file or a stream here:
|
|
21
|
+
* const dispatcher = connection.playAudio('/home/hydrabolt/audio.mp3');
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
* @implements {VolumeInterface}
|
|
25
|
+
* @extends {BaseDispatcher}
|
|
26
|
+
*/
|
|
27
|
+
class AudioDispatcher extends BaseDispatcher {
|
|
28
|
+
constructor(player, { seek = 0, volume = 1, fec, plp, bitrate = 96, highWaterMark = 12 } = {}, streams) {
|
|
29
|
+
const streamOptions = { seek, volume, fec, plp, bitrate, highWaterMark };
|
|
30
|
+
super(player, highWaterMark, Util.getPayloadType('opus'), false, streams);
|
|
31
|
+
|
|
32
|
+
this.streamOptions = streamOptions;
|
|
33
|
+
|
|
34
|
+
this.streams.silence = new Silence();
|
|
35
|
+
|
|
36
|
+
this.setVolume(volume);
|
|
37
|
+
this.setBitrate(bitrate);
|
|
38
|
+
if (typeof fec !== 'undefined') this.setFEC(fec);
|
|
39
|
+
if (typeof plp !== 'undefined') this.setPLP(plp);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
get TIMESTAMP_INC() {
|
|
43
|
+
return 480 * CHANNELS;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
get FRAME_LENGTH() {
|
|
47
|
+
return 20;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Get the type of the dispatcher
|
|
52
|
+
* @returns {'audio'}
|
|
53
|
+
*/
|
|
54
|
+
getTypeDispatcher() {
|
|
55
|
+
return 'audio';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Set the bitrate of the current Opus encoder if using a compatible Opus stream.
|
|
60
|
+
* @param {number} value New bitrate, in kbps
|
|
61
|
+
* If set to 'auto', the voice channel's bitrate will be used
|
|
62
|
+
* @returns {boolean} true if the bitrate has been successfully changed.
|
|
63
|
+
*/
|
|
64
|
+
setBitrate(value) {
|
|
65
|
+
if (!value || !this.bitrateEditable) return false;
|
|
66
|
+
const bitrate = value === 'auto' ? this.player.voiceConnection.channel.bitrate : value;
|
|
67
|
+
this.streams.opus.setBitrate(bitrate * 1000);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Sets the expected packet loss percentage if using a compatible Opus stream.
|
|
73
|
+
* @param {number} value between 0 and 1
|
|
74
|
+
* @returns {boolean} Returns true if it was successfully set.
|
|
75
|
+
*/
|
|
76
|
+
setPLP(value) {
|
|
77
|
+
if (!this.bitrateEditable) return false;
|
|
78
|
+
this.streams.opus.setPLP(value);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Enables or disables forward error correction if using a compatible Opus stream.
|
|
84
|
+
* @param {boolean} enabled true to enable
|
|
85
|
+
* @returns {boolean} Returns true if it was successfully set.
|
|
86
|
+
*/
|
|
87
|
+
setFEC(enabled) {
|
|
88
|
+
if (!this.bitrateEditable) return false;
|
|
89
|
+
this.streams.opus.setFEC(enabled);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
get volumeEditable() {
|
|
94
|
+
return Boolean(this.streams.volume);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Whether or not the Opus bitrate of this stream is editable
|
|
99
|
+
* @type {boolean}
|
|
100
|
+
* @readonly
|
|
101
|
+
*/
|
|
102
|
+
get bitrateEditable() {
|
|
103
|
+
return this.streams.opus && this.streams.opus.setBitrate;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Volume
|
|
107
|
+
get volume() {
|
|
108
|
+
return this.streams.volume ? this.streams.volume.volume : 1;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
setVolume(value) {
|
|
112
|
+
if (!this.streams.volume) return false;
|
|
113
|
+
/**
|
|
114
|
+
* Emitted when the volume of this dispatcher changes.
|
|
115
|
+
* @event AudioDispatcher#volumeChange
|
|
116
|
+
* @param {number} oldVolume The old volume of this dispatcher
|
|
117
|
+
* @param {number} newVolume The new volume of this dispatcher
|
|
118
|
+
*/
|
|
119
|
+
this.emit('volumeChange', this.volume, value);
|
|
120
|
+
this.streams.volume.setVolume(value);
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Sync with another video dispatcher to ensure that the audio and video are played at the same time.
|
|
126
|
+
* @param {VideoDispatcher} otherDispatcher The video dispatcher to sync with
|
|
127
|
+
*/
|
|
128
|
+
setSyncVideoDispatcher(otherDispatcher) {
|
|
129
|
+
if (otherDispatcher.getTypeDispatcher() !== 'video') {
|
|
130
|
+
throw new Error('Dispatcher must be a video dispatcher');
|
|
131
|
+
}
|
|
132
|
+
this._syncDispatcher = otherDispatcher;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Volume stubs for docs
|
|
136
|
+
/* eslint-disable no-empty-function*/
|
|
137
|
+
get volumeDecibels() {}
|
|
138
|
+
get volumeLogarithmic() {}
|
|
139
|
+
setVolumeDecibels() {}
|
|
140
|
+
setVolumeLogarithmic() {}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
VolumeInterface.applyToClass(AudioDispatcher);
|
|
144
|
+
|
|
145
|
+
module.exports = AudioDispatcher;
|