-
-
Notifications
You must be signed in to change notification settings - Fork 11
Voice support #33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Voice support #33
Changes from 13 commits
4b66a39
d49fcc1
f942d4d
a820da1
4cf68cb
61a4263
8d412d3
c9e96ae
15d959a
ef52d96
753c916
5075107
1cf1c9a
2917dc6
8a767b5
0e66982
5645ece
d4da406
368e7e4
d5aea9d
5be2f71
bfe23ed
bf98f17
9e6664f
35a5599
6299376
b8bcdf2
dc7a63c
8b20bbc
e3fade7
56d79fa
88aa05d
6001c74
12ab4de
3b6303f
e990997
34f7ee4
c182f07
bde09a4
5fe71f9
7f7623f
42ca30e
8b1e6ff
6f758a5
7cdc426
ddd4160
d42b3d5
0525f9d
65aaef7
90514e0
11f2c62
a3d771a
81e7b2c
e7ccd8c
ad0a4fb
de68d6c
3c58754
50a9be0
ee443c1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| // | ||
| // VoiceConnectionStore.swift | ||
| // Paicord | ||
| // | ||
| // Created by Lakhan Lothiyi on 23/02/2026. | ||
| // Copyright © 2026 Lakhan Lothiyi. | ||
| // | ||
|
|
||
| import PaicordLib | ||
|
|
||
| final class VoiceConnectionStore: DiscordDataStore { | ||
| var gateway: GatewayStore? | ||
| var voiceGateway: VoiceGatewayManager? | ||
|
|
||
| var eventTask: Task<Void, Never>? | ||
|
|
||
| func setupEventHandling() { | ||
| guard let gateway = gateway?.gateway else { return } | ||
|
|
||
| eventTask = Task { @MainActor in | ||
| for await event in await gateway.events { | ||
| switch event.data { | ||
| // capture and store voice events | ||
| default: | ||
| break | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
|
|
||
| func cancelEventHandling() { | ||
| // overrides default impl of protocol | ||
| eventTask?.cancel() | ||
| eventTask = nil | ||
|
|
||
| // end networking session etc. | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -39,6 +39,11 @@ | |
| <key>orderHint</key> | ||
| <integer>6</integer> | ||
| </dict> | ||
| <key>DiscordVoice.xcscheme_^#shared#^_</key> | ||
| <dict> | ||
| <key>orderHint</key> | ||
| <integer>3</integer> | ||
| </dict> | ||
|
||
| <key>GenerateAPIEndpointsExec.xcscheme_^#shared#^_</key> | ||
| <dict> | ||
| <key>orderHint</key> | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -28,6 +28,10 @@ let package = Package( | |
| name: "DiscordGateway", | ||
| targets: ["DiscordGateway"] | ||
| ), | ||
| .library( | ||
| name: "DiscordVoice", | ||
| targets: ["DiscordVoice"] | ||
| ), | ||
| .library( | ||
| name: "DiscordModels", | ||
| targets: ["DiscordModels"] | ||
|
|
@@ -74,6 +78,14 @@ let package = Package( | |
| url: "https://github.com/apple/swift-crypto.git", | ||
| "1.0.0"..<"5.0.0" | ||
| ), | ||
| .package( | ||
| url: "https://github.com/alta/swift-opus.git", | ||
| branch: "main" | ||
| ), | ||
|
||
| .package( | ||
| url: "https://github.com/llsc12/DaveKit.git", | ||
| branch: "main" | ||
|
Comment on lines
+81
to
+83
|
||
| ), | ||
| ], | ||
| targets: [ | ||
| .target( | ||
|
|
@@ -82,6 +94,7 @@ let package = Package( | |
| .target(name: "DiscordAuth"), | ||
| .target(name: "DiscordHTTP"), | ||
| .target(name: "DiscordCore"), | ||
| .target(name: "DiscordVoice"), | ||
| .target(name: "DiscordGateway"), | ||
| .target(name: "DiscordModels"), | ||
| .target(name: "DiscordUtilities"), | ||
|
|
@@ -111,9 +124,22 @@ let package = Package( | |
| .product(name: "AsyncHTTPClient", package: "async-http-client"), | ||
| .product(name: "WSClient", package: "swift-websocket"), | ||
| .product(name: "libzstd", package: "zstd"), | ||
| .target(name: "DiscordHTTP"), | ||
| .product(name: "Crypto", package: "swift-crypto"), | ||
| .product(name: "_CryptoExtras", package: "swift-crypto"), | ||
| .target(name: "DiscordHTTP"), | ||
| ], | ||
| swiftSettings: swiftSettings | ||
| ), | ||
| .target( | ||
| name: "DiscordVoice", | ||
| dependencies: [ | ||
| .product(name: "NIOCore", package: "swift-nio"), | ||
| .product(name: "AsyncHTTPClient", package: "async-http-client"), | ||
| .product(name: "WSClient", package: "swift-websocket"), | ||
| .product(name: "libzstd", package: "zstd"), | ||
| .product(name: "Opus", package: "swift-opus"), | ||
| .product(name: "DaveKit", package: "DaveKit"), | ||
| .target(name: "DiscordGateway"), | ||
| ], | ||
| swiftSettings: swiftSettings | ||
| ), | ||
|
|
@@ -122,10 +148,11 @@ let package = Package( | |
| dependencies: [ | ||
| .product(name: "NIOFoundationCompat", package: "swift-nio"), | ||
| .product(name: "MultipartKit", package: "multipart-kit"), | ||
| .target(name: "DiscordCore"), | ||
| .target(name: "UnstableEnumMacro"), | ||
| .product(name: "SwiftProtobuf", package: "swift-protobuf"), | ||
| .product(name: "UInt128", package: "UInt128"), | ||
| .product(name: "DaveKit", package: "DaveKit"), | ||
| .target(name: "DiscordCore"), | ||
| .target(name: "UnstableEnumMacro"), | ||
| ], | ||
| swiftSettings: swiftSettings | ||
| ), | ||
|
|
@@ -139,7 +166,12 @@ let package = Package( | |
| .target( | ||
| name: "DiscordAuth", | ||
| dependencies: [ | ||
| .target(name: "DiscordModels") | ||
| .product(name: "NIOCore", package: "swift-nio"), | ||
| .product(name: "AsyncHTTPClient", package: "async-http-client"), | ||
| .product(name: "WSClient", package: "swift-websocket"), | ||
| .product(name: "Crypto", package: "swift-crypto"), | ||
| .product(name: "_CryptoExtras", package: "swift-crypto"), | ||
| .target(name: "DiscordGateway"), | ||
| ], | ||
| swiftSettings: swiftSettings | ||
| ), | ||
|
|
@@ -211,9 +243,10 @@ let package = Package( | |
|
|
||
| var featureFlags: [SwiftSetting] { | ||
| [ | ||
| .interoperabilityMode(.Cxx), | ||
| /// https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md | ||
| /// Require `any` for existential types. | ||
| .enableUpcomingFeature("ExistentialAny") | ||
| .enableUpcomingFeature("ExistentialAny"), | ||
| // .define("DISCORDBM_ENABLE_LOGGING_DURING_DECODE", .when(configuration: .debug)), | ||
| ] | ||
| } | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Setting SWIFT_OBJC_INTEROP_MODE to objcxx enables C++ interoperability which is required for some dependencies (likely DaveKit). However, this is a significant compiler mode change that affects the entire project. Ensure this is intentional and documented, as it may have implications for build times and compatibility with other dependencies.