Table of Contents

Class SocketVoiceChannel

Namespace
Kook.WebSocket
Assembly
Kook.Net.WebSocket.dll

表示服务器中的一个基于网关的具有语音聊天能力的频道。

public class SocketVoiceChannel : SocketTextChannel, IUpdateable, ISocketMessageChannel, IVoiceChannel, ITextChannel, INestedChannel, IGuildChannel, IDeletable, IMentionable, IMessageChannel, ISocketAudioChannel, IAudioChannel, IChannel, IEntity<ulong>, IDisposable
Inheritance
SocketVoiceChannel
Implements
Inherited Members
Extension Methods

Properties

AudioClient

获取在此音频频道上建立的语音客户端。

public IAudioClient? AudioClient { get; }

Property Value

IAudioClient

ConnectedUsers

获取当前连接到此语音频道的所有用户。

public IReadOnlyCollection<SocketGuildUser> ConnectedUsers { get; }

Property Value

IReadOnlyCollection<SocketGuildUser>

Remarks

warning

此属性可能不会始终返回连接到此语音频道的所有成员,因为用户可能在 Bot 连接到网关之前就连接到了此语音频道。 如需准确获取所有连接到此语音频道的成员,可能需要启用 AlwaysDownloadVoiceStates,这可以让 Bot 在启动连接到网关时获取完整的语音状态。也可以调用方法 GetConnectedUsersAsync(CacheMode, RequestOptions?) 访问 API 获取连接到此语音频道的用户。

HasPassword

获取此频道是否已被密码锁定。

public bool HasPassword { get; }

Property Value

bool

IsVoiceRegionOverwritten

获取此音频频道的语音区域设置是否覆写了服务器的语音区域设置。

public bool? IsVoiceRegionOverwritten { get; }

Property Value

bool?

ServerUrl

获取语音客户端连接到此语音频道的语音服务器 URL。

public string? ServerUrl { get; }

Property Value

string

UserLimit

获取允许同时连接到此频道的最大用户数。

public int UserLimit { get; }

Property Value

int

一个 int,表示允许同时连接到此频道的最大用户数;如果没有限制,则为 0

Users

获取用户缓存列表中的可以访问此频道的所有用户。

public override IReadOnlyCollection<SocketGuildUser> Users { get; }

Property Value

IReadOnlyCollection<SocketGuildUser>

Remarks

此属性仅会返回缓存中可以访问此频道的所有用户,如果未启用用户列表缓存,或者由于网关事件确实导致本地缓存不同步,此属性所返回的用户列表可能不准确。

See Also

VoiceQuality

获取要求此频道中的客户端使用的语音质量。

public VoiceQuality? VoiceQuality { get; }

Property Value

VoiceQuality?

VoiceRegion

获取此音频频道所设置的语音服务器区域。

public string? VoiceRegion { get; }

Property Value

string

Remarks

warning

对于语音频道区域设置功能发布之前创建的语音频道,该属性可能为空。

See Also

Methods

ConnectAsync(bool, bool, string?)

连接到此音频频道。

public Task<IAudioClient?> ConnectAsync(bool external = false, bool disconnect = true, string? password = null)

Parameters

external bool

指定语音客户端是否是由外部管理的。当设置为 true 时,当前方法不会尝试连接到语音频道。

disconnect bool

指定语音客户端在连接到新的语音频道之前是否应调用断开连接。

password string

指定客户端连接到设置了密码的语音频道时所使用的密码。

Returns

Task<IAudioClient>

一个表示音频连接操作的异步任务。任务的结果是一个负责音频连接的 IAudioClient 实例;如果 externaltrue,则会返回 null

DisconnectAsync()

断开与此音频频道的连接。

public Task DisconnectAsync()

Returns

Task

一个表示音频断开连接操作的异步任务。

GetConnectedUsersAsync(CacheMode, RequestOptions?)

获取连接到此频道的用户。

public Task<IReadOnlyCollection<SocketGuildUser>> GetConnectedUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions? options = null)

Parameters

mode CacheMode

指示当前方法是否应该仅从缓存中获取结果,还是可以通过 API 请求获取数据。

options RequestOptions

发送请求时要使用的选项。

Returns

Task<IReadOnlyCollection<SocketGuildUser>>

一个表示异步获取操作的任务。任务的结果包含连接到此频道的所有服务器用户。

GetMessagesAsync(IMessage, Direction, int, RequestOptions?)

获取此消息频道中的一些消息。

public override IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(IMessage referenceMessage, Direction dir, int limit = 50, RequestOptions? options = null)

Parameters

referenceMessage IMessage

要开始获取消息的参考位置的消息。

dir Direction

要以参考位置为基准,获取消息的方向。

limit int

要获取的消息数量。

options RequestOptions

发送请求时要使用的选项。

Returns

IAsyncEnumerable<IReadOnlyCollection<IMessage>>

分页的消息集合的异步可枚举对象。

Remarks

important

返回的集合是一个异步可枚举对象;调用 FlattenAsync<T>(IAsyncEnumerable<IEnumerable<T>>) 可以异步枚举所有分页,并将其合并为一个集合。


warning

请勿一次性获取过多消息,这可能会导致抢占式速率限制,甚至触发实际的速率限制,从而导致 Bot 服务暂停。


此方法将尝试获取此频道最新的 limit 条消息。此方法会根据 MaxMessagesPerBatch 将请求拆分。换句话说,如果要获取 500 条消息,而 MaxMessagesPerBatch 的常量为 50,则请求将被拆分为 10 个单独请求,因此异步枚举器会异步枚举返回 10 个响应。 FlattenAsync<T>(IAsyncEnumerable<IEnumerable<T>>) 方法可以展开这 10 个响应返回的集合,并将其合并为一个集合。

Exceptions

NotSupportedException

不支持在语音频道中获取消息。

GetMessagesAsync(Guid, Direction, int, RequestOptions?)

获取此消息频道中的一些消息。

public override IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(Guid referenceMessageId, Direction dir, int limit = 50, RequestOptions? options = null)

Parameters

referenceMessageId Guid

要开始获取消息的参考位置的消息的 ID。

dir Direction

要以参考位置为基准,获取消息的方向。

limit int

要获取的消息数量。

options RequestOptions

发送请求时要使用的选项。

Returns

IAsyncEnumerable<IReadOnlyCollection<IMessage>>

分页的消息集合的异步可枚举对象。

Remarks

important

返回的集合是一个异步可枚举对象;调用 FlattenAsync<T>(IAsyncEnumerable<IEnumerable<T>>) 可以异步枚举所有分页,并将其合并为一个集合。


warning

请勿一次性获取过多消息,这可能会导致抢占式速率限制,甚至触发实际的速率限制,从而导致 Bot 服务暂停。


此方法将尝试获取此频道最新的 limit 条消息。此方法会根据 MaxMessagesPerBatch 将请求拆分。换句话说,如果要获取 500 条消息,而 MaxMessagesPerBatch 的常量为 50,则请求将被拆分为 10 个单独请求,因此异步枚举器会异步枚举返回 10 个响应。 FlattenAsync<T>(IAsyncEnumerable<IEnumerable<T>>) 方法可以展开这 10 个响应返回的集合,并将其合并为一个集合。

Exceptions

NotSupportedException

不支持在语音频道中获取消息。

GetMessagesAsync(int, RequestOptions?)

获取此消息频道中的最新的一些消息。

public override IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = 50, RequestOptions? options = null)

Parameters

limit int

要获取的消息数量。

options RequestOptions

发送请求时要使用的选项。

Returns

IAsyncEnumerable<IReadOnlyCollection<IMessage>>

分页的消息集合的异步可枚举对象。

Remarks

important

返回的集合是一个异步可枚举对象;调用 FlattenAsync<T>(IAsyncEnumerable<IEnumerable<T>>) 可以异步枚举所有分页,并将其合并为一个集合。


warning

请勿一次性获取过多消息,这可能会导致抢占式速率限制,甚至触发实际的速率限制,从而导致 Bot 服务暂停。


此方法将尝试获取此频道最新的 limit 条消息。此方法会根据 MaxMessagesPerBatch 将请求拆分。换句话说,如果要获取 500 条消息,而 MaxMessagesPerBatch 的常量为 50,则请求将被拆分为 10 个单独请求,因此异步枚举器会异步枚举返回 10 个响应。 FlattenAsync<T>(IAsyncEnumerable<IEnumerable<T>>) 方法可以展开这 10 个响应返回的集合,并将其合并为一个集合。

Exceptions

NotSupportedException

不支持在语音频道中获取消息。

GetUser(ulong)

获取此频道中的一个服务器用户。

public override SocketGuildUser? GetUser(ulong id)

Parameters

id ulong

要获取的服务器用户的 ID。

Returns

SocketGuildUser

如果找到了具有指定 ID 的服务器用户,则返回该用户;否则返回 null

ModifyAsync(Action<ModifyVoiceChannelProperties>, RequestOptions?)

修改此频道有关语音聊天能力的属性。

public Task ModifyAsync(Action<ModifyVoiceChannelProperties> func, RequestOptions? options = null)

Parameters

func Action<ModifyVoiceChannelProperties>

一个包含修改有关语音聊天能力的属性的委托。

options RequestOptions

发送请求时要使用的选项。

Returns

Task

一个表示异步修改操作的任务。

See Also