Files
go-ts3/client.go
Hubert Chen 59ad17c481 use net/http replace github.com/valyala/fasthttp
client.go:
    fix `ClientDbFindUid` build error
2026-03-29 09:59:18 +08:00

607 lines
21 KiB
Go

package ts3
import (
"errors"
"fmt"
)
// clientaddperm `manage_scope`
type clientAddPermissionRequest struct {
ClientDbId int `schema:"cldbid"`
PermissionId int `schema:"permid"`
PermissionValue int `schema:"permvalue"`
PermSkip int `schema:"permskip"`
}
func (c *TeamspeakHttpClient) ClientAddPermission(clientDbId, permissionId, permissionValue int, permSkip bool) error {
return c.requestWithParams(
"clientaddperm",
clientAddPermissionRequest{
ClientDbId: clientDbId,
PermissionId: permissionId,
PermissionValue: permissionValue,
PermSkip: boolToInt(permSkip),
},
nil,
)
}
type clientAddStringPermissionRequest struct {
ClientDbId int `schema:"cldbid"`
PermissionName string `schema:"permsid"`
PermissionValue int `schema:"permvalue"`
PermSkip int `schema:"permskip"`
}
func (c *TeamspeakHttpClient) ClientAddStringPermission(clientDbId int, permissionName string, permissionValue int, permSkip bool) error {
return c.requestWithParams(
"clientaddperm",
clientAddStringPermissionRequest{
ClientDbId: clientDbId,
PermissionName: permissionName,
PermissionValue: permissionValue,
PermSkip: boolToInt(permSkip),
},
nil,
)
}
// clientdbdelete `manage_scope, write_scope`
type clientDbDeleteRequest struct {
ClientDbId int `schema:"cldbid,required"`
}
func (c *TeamspeakHttpClient) ClientDbDelete(clientDbId int) error {
return c.requestWithParams("clientdbdelete", clientDbDeleteRequest{ClientDbId: clientDbId}, nil)
}
// clientdbedit `manage_scope, write_scope`
type ClientDbEditRequest struct {
ClientDbId int `schema:"cldbid,required"`
ClientNickname string `schema:"client_nickname"`
ClientIsTalker string `schema:"client_is_talker"`
ClientDescription string `schema:"client_description"`
ClientIsChannelCommander string `schema:"client_is_channel_commander"`
ClientIconID string `schema:"client_icon_id"`
}
func (c *TeamspeakHttpClient) ClientDbEdit(request ClientDbEditRequest) error {
return c.requestWithParams("clientdbedit", request, nil)
}
// clientdbfind `manage_scope, write_scope, read_scope`
type clientDbFindRequest struct {
IsUid bool `schema:"-uid,omitempty"`
Pattern string `schema:"pattern"`
}
type ClientDbFindResponse struct {
ClientDbId []int `json:"cldbid,string"`
}
func (c *TeamspeakHttpClient) clientDbFind(request clientDbFindRequest) (*[]ClientDbFindResponse, error) {
var clients []ClientDbFindResponse
err := c.requestWithParams("clientdbfind", request, &clients)
if err != nil {
return nil, err
}
return &clients, err
}
func (c *TeamspeakHttpClient) ClientDbFindName(pattern string) (*[]ClientDbFindResponse, error) {
return c.clientDbFind(clientDbFindRequest{
IsUid: false,
Pattern: pattern,
})
}
func (c *TeamspeakHttpClient) ClientDbFindUid(uid int) (*[]ClientDbFindResponse, error) {
return c.clientDbFind(clientDbFindRequest{
IsUid: true,
Pattern: fmt.Sprint(uid),
})
}
// clientdbinfo `manage_scope, write_scope, read_scope`
type clientDbInfoRequest struct {
ClientDbId int `schema:"cldbid,required"`
}
type ClientDbInfo struct {
ClientBase64HashClientUID string `json:"client_base64HashClientUID"`
ClientCreated int `json:"client_created,string"`
ClientDatabaseID int `json:"client_database_id,string"`
ClientDescription string `json:"client_description"`
ClientFlagAvatar string `json:"client_flag_avatar"`
ClientLastconnected int `json:"client_lastconnected,string"`
ClientLastip string `json:"client_lastip"`
ClientMonthBytesDownloaded int `json:"client_month_bytes_downloaded,string"`
ClientMonthBytesUploaded int `json:"client_month_bytes_uploaded,string"`
ClientNickname string `json:"client_nickname"`
ClientTotalBytesDownloaded int `json:"client_total_bytes_downloaded,string"`
ClientTotalBytesUploaded int `json:"client_total_bytes_uploaded,string"`
ClientTotalconnections int `json:"client_totalconnections,string"`
ClientUniqueIdentifier string `json:"client_unique_identifier"`
}
func (c *TeamspeakHttpClient) ClientDbInfo(clientDbId int) (*ClientDbInfo, error) {
var clientDbInfos []ClientDbInfo
err := c.requestWithParams(
"clientdbinfo",
clientDbInfoRequest{ClientDbId: clientDbId},
&clientDbInfos,
)
if err != nil {
return nil, err
}
return &clientDbInfos[0], nil
}
// clientdblist `manage_scope, write_scope, read_scope`
type ClientDbListRequest struct {
Start int `schema:"start,omitempty"`
Duration int `schema:"duration,omitempty"`
}
type DbClient struct {
Cldbid int `json:"cldbid,string"`
ClientCreated int `json:"client_created,string"`
ClientDescription string `json:"client_description"`
ClientLastConnected int `json:"client_lastconnected,string"`
ClientLastIP string `json:"client_lastip"`
ClientLoginName string `json:"client_login_name"`
ClientNickname string `json:"client_nickname"`
ClientTotalConnections int `json:"client_totalconnections,string"`
ClientUniqueIdentifier string `json:"client_unique_identifier"`
}
func (c *TeamspeakHttpClient) ClientDbList(request ClientDbListRequest) (*[]DbClient, error) {
var clients []DbClient
err := c.requestWithParams("clientdblist", request, &clients)
if err != nil {
return nil, err
}
return &clients, nil
}
// clientdelperm `manage_scope`
type ClientDeletePermission struct {
ClientDbId int `schema:"cldbid,required"`
PermId []int `schema:"permid"`
PermsId []string `schema:"permsid"`
}
func (c *TeamspeakHttpClient) ClientDeletePermission(request ClientDeletePermission) error {
return c.requestWithParams("clientdelperm", request, nil)
}
// clientedit `manage_scope, write_scope`
type ClientEditRequest struct {
ClientId int `schema:"clid,required"`
ClientNickname string `schema:"client_nickname"`
ClientIsTalker string `schema:"client_is_talker"`
ClientDescription string `schema:"client_description"`
ClientIsChannelCommander string `schema:"client_is_channel_commander"`
ClientIconID string `schema:"client_icon_id"`
}
func (c *TeamspeakHttpClient) ClientEdit(request ClientEditRequest) error {
return c.requestWithParams("clientedit", request, nil)
}
// clientfind `manage_scope, write_scope, read_scope`
type clientFindRequest struct {
Pattern string `schema:"pattern,required"`
}
type ClientFindResponse struct {
ClientId int `json:"clid,string"`
ClientNickname string `json:"client_nickname"`
}
func (c *TeamspeakHttpClient) ClientFind(pattern string) (*[]ClientFindResponse, error) {
var clients []ClientFindResponse
err := c.requestWithParams("clientfind", clientFindRequest{Pattern: pattern}, clients)
if err != nil {
return nil, err
}
return &clients, nil
}
// clientgetdbidfromuid `manage_scope, write_scope, read_scope`
type clientGetDbIdFromUidRequest struct {
ClientUid string `schema:"cluid,required"`
}
type clientGetDbIdFromUidResponse struct {
ClientDbId int `json:"cldbid,string"`
}
func (c *TeamspeakHttpClient) ClientGetDbIdFromUid(clientUid string) (*int, error) {
var clients []clientGetDbIdFromUidResponse
err := c.requestWithParams(
"clientgetdbidfromuid",
clientGetDbIdFromUidRequest{ClientUid: clientUid},
&clients,
)
if err != nil {
return nil, err
}
return &clients[0].ClientDbId, nil
}
// clientgetids `manage_scope, write_scope, read_scope`
type clientGetIdsRequest struct {
ClientUid string `schema:"cluid,required"`
}
type ClientGetIdsResponse struct {
ClientUid string `json:"cluid"`
ClientId int `json:"clid,string"`
Name string `json:"name"`
}
func (c *TeamspeakHttpClient) ClientGetIds(clientUid string) (*ClientGetIdsResponse, error) {
var clients []ClientGetIdsResponse
err := c.requestWithParams(
"clientgetids",
clientGetIdsRequest{ClientUid: clientUid},
&clients,
)
if err != nil {
return nil, err
}
return &clients[0], nil
}
// clientgetnamefromdbid `manage_scope, write_scope, read_scope`
type clientGetNameFromDbIdRequest struct {
ClientDbId int `schema:"cldbid,required"`
}
type clientGetNameFromDbIdResponse struct {
ClientUid string `json:"cluid"`
ClientDbId int `json:"cldbid,string"`
Name string `json:"name"`
}
func (c *TeamspeakHttpClient) ClientGetNameFromDbId(clientDbId int) (*clientGetNameFromDbIdResponse, error) {
var clients []clientGetNameFromDbIdResponse
err := c.requestWithParams(
"clientgetnamefromdbid",
clientGetNameFromDbIdRequest{ClientDbId: clientDbId},
&clients,
)
if err != nil {
return nil, err
}
return &clients[0], nil
}
// clientgetnamefromuid `manage_scope, write_scope, read_scope`
type clientGetNameFromUidRequest struct {
ClientUid string `schema:"cldbid,required"`
}
type clientGetNameFromUidResponse struct {
ClientUid string `json:"cluid"`
ClientDbId int `json:"cldbid,string"`
Name string `json:"name"`
}
func (c *TeamspeakHttpClient) ClientGetNameFromUid(clientUid string) (*clientGetNameFromUidResponse, error) {
var clients []clientGetNameFromUidResponse
err := c.requestWithParams(
"clientgetnamefromdbid",
clientGetNameFromUidRequest{ClientUid: clientUid},
&clients,
)
if err != nil {
return nil, err
}
return &clients[0], nil
}
// clientgetuidfromclid `manage_scope, write_scope, read_scope`
type clientGetUidFromClientIdRequest struct {
ClientId int `schema:"clid,required"`
}
type clientGetUidFromClientIdResponse struct {
ClientId int `json:"clid,string"`
ClientUid string `json:"cluid"`
NickName string `json:"nickname"`
}
func (c *TeamspeakHttpClient) ClientGetUidFromClientId(clientId int) (*clientGetUidFromClientIdResponse, error) {
var clients []clientGetUidFromClientIdResponse
err := c.requestWithParams(
"clientgetuidfromclid",
clientGetUidFromClientIdRequest{ClientId: clientId},
&clients,
)
if err != nil {
return nil, err
}
return &clients[0], nil
}
// clientinfo `manage_scope, write_scope, read_scope`
type clientInfoRequest struct {
ClientId int `schema:"clid"`
}
type ClientInfo struct {
ClientId int `json:"cid,string"`
ClientAway int `json:"client_away,string"`
ClientAwayMessage string `json:"client_away_message"`
ClientBadges string `json:"client_badges"`
ClientBase64HashClientUID string `json:"client_base64HashClientUID"`
ClientChannelGroupID int `json:"client_channel_group_id,string"`
ClientChannelGroupInheritedChannelID int `json:"client_channel_group_inherited_channel_id,string"`
ClientCountry string `json:"client_country"`
ClientCreated int `json:"client_created,string"`
ClientDatabaseID int `json:"client_database_id,string"`
ClientDefaultChannel string `json:"client_default_channel"`
ClientDefaultToken string `json:"client_default_token"`
ClientDescription string `json:"client_description"`
ClientFlagAvatar string `json:"client_flag_avatar"`
ClientIconID int `json:"client_icon_id,string"`
ClientIdleTime int `json:"client_idle_time,string"`
ClientInputHardware int `json:"client_input_hardware,string"`
ClientInputMuted int `json:"client_input_muted,string"`
ClientIntegrations string `json:"client_integrations"`
ClientIsChannelCommander int `json:"client_is_channel_commander,string"`
ClientIsPrioritySpeaker int `json:"client_is_priority_speaker,string"`
ClientIsRecording int `json:"client_is_recording,string"`
ClientIsTalker int `json:"client_is_talker,string"`
ClientLastconnected int `json:"client_lastconnected,string"`
ClientLoginName string `json:"client_login_name"`
ClientMetaData string `json:"client_meta_data"`
ClientMonthBytesDownloaded int `json:"client_month_bytes_downloaded,string"`
ClientMonthBytesUploaded int `json:"client_month_bytes_uploaded,string"`
ClientMyteamspeakAvatar string `json:"client_myteamspeak_avatar"`
ClientMyteamspeakID string `json:"client_myteamspeak_id"`
ClientNeededServerqueryViewPower int `json:"client_needed_serverquery_view_power,string"`
ClientNickname string `json:"client_nickname"`
ClientNicknamePhonetic string `json:"client_nickname_phonetic"`
ClientOutputHardware int `json:"client_output_hardware,string"`
ClientOutputMuted int `json:"client_output_muted,string"`
ClientOutputonlyMuted int `json:"client_outputonly_muted,string"`
ClientPlatform string `json:"client_platform"`
ClientSecurityHash string `json:"client_security_hash"`
ClientServergroups int `json:"client_servergroups,string"`
ClientSignedBadges string `json:"client_signed_badges"`
ClientTalkPower int `json:"client_talk_power,string"`
ClientTalkRequest int `json:"client_talk_request,string"`
ClientTalkRequestMsg string `json:"client_talk_request_msg"`
ClientTotalBytesDownloaded int `json:"client_total_bytes_downloaded,string"`
ClientTotalBytesUploaded int `json:"client_total_bytes_uploaded,string"`
ClientTotalconnections int `json:"client_totalconnections,string"`
ClientType int `json:"client_type,string"`
ClientUniqueIdentifier string `json:"client_unique_identifier"`
ClientUnreadMessages int `json:"client_unread_messages,string"`
ClientVersion string `json:"client_version"`
ClientVersionSign string `json:"client_version_sign"`
ConnectionBandwidthReceivedLastMinuteTotal int `json:"connection_bandwidth_received_last_minute_total,string"`
ConnectionBandwidthReceivedLastSecondTotal int `json:"connection_bandwidth_received_last_second_total,string"`
ConnectionBandwidthSentLastMinuteTotal int `json:"connection_bandwidth_sent_last_minute_total,string"`
ConnectionBandwidthSentLastSecondTotal int `json:"connection_bandwidth_sent_last_second_total,string"`
ConnectionBytesReceivedTotal int `json:"connection_bytes_received_total,string"`
ConnectionBytesSentTotal int `json:"connection_bytes_sent_total,string"`
ConnectionClientIP string `json:"connection_client_ip"`
ConnectionConnectedTime int `json:"connection_connected_time,string"`
ConnectionFiletransferBandwidthReceived int `json:"connection_filetransfer_bandwidth_received,string"`
ConnectionFiletransferBandwidthSent int `json:"connection_filetransfer_bandwidth_sent,string"`
ConnectionPacketsReceivedTotal int `json:"connection_packets_received_total,string"`
ConnectionPacketsSentTotal int `json:"connection_packets_sent_total,string"`
}
func (c *TeamspeakHttpClient) ClientInfo(clientId int) (*[]ClientInfo, error) {
var clients []ClientInfo
err := c.requestWithParams(
"clientinfo",
clientInfoRequest{ClientId: clientId},
&clients,
)
if err != nil {
return nil, err
}
return &clients, nil
}
// clientkick `manage_scope, write_scope`
type clientKickRequest struct {
ClientId []int `schema:"clid,required"`
ReasonId int `schema:"reasonid,required"`
ReasonMessage string `schema:"reasonmsg,omitempty"`
}
func (c *TeamspeakHttpClient) clientKick(request clientKickRequest) error {
if len(request.ReasonMessage) > 40 {
return errors.New("the message must not have more than 40 characters")
}
return c.requestWithParams("clientkick", request, nil)
}
func (c *TeamspeakHttpClient) ClientKickChannel(clientIds []int, reasonMessage string) error {
return c.clientKick(clientKickRequest{
ClientId: clientIds,
ReasonId: 4,
ReasonMessage: reasonMessage,
})
}
func (c *TeamspeakHttpClient) ClientKickServer(clientIds []int, reasonMessage string) error {
return c.clientKick(clientKickRequest{
ClientId: clientIds,
ReasonId: 5,
ReasonMessage: reasonMessage,
})
}
// clientlist `manage_scope, write_scope, read_scope`
type Client struct {
ChannelId int `json:"cid,string"`
ClientId int `json:"clid,string"`
ClientDatabaseId int `json:"client_database_id,string"`
ClientNickname string `json:"client_nickname"`
ClientType int `json:"client_type,string"`
}
func (u *Client) IsBot() bool {
return u.ClientType == 1
}
func (c *TeamspeakHttpClient) ClientList() (*[]Client, error) {
var users []Client
err := c.request("clientlist", &users)
if err != nil {
return nil, err
}
return &users, nil
}
// clientmove `manage_scope, write_scope`
type ClientMoveRequest struct {
ClientId []int `schema:"clid,required"`
ChannelId int `schema:"cid,required"`
ChannelPassword string `schema:"cpw,omitempty"`
}
func (c *TeamspeakHttpClient) ClientMove(request ClientMoveRequest) error {
return c.requestWithParams("clientmove", request, nil)
}
// clientpermlist `manage_scope, write_scope, read_scope`
type clientPermissionListRequest struct {
ClientDbId int `schema:"cldbid"`
AsString bool `schema:"-permsid,omitempty"`
}
type ClientPermissionListResponse struct {
PermissionId int `json:"permid,string"`
PermissionNegated int `json:"permnegated,string"`
PermissionSkip int `json:"permskip,string"`
PermissionValue int `json:"permvalue,string"`
}
func (c *TeamspeakHttpClient) ClientPermissionList(clientDbId int) (*[]ClientPermissionListResponse, error) {
var perms []ClientPermissionListResponse
err := c.requestWithParams(
"clientpermlist",
clientPermissionListRequest{
ClientDbId: clientDbId,
},
&perms,
)
if err != nil {
return nil, err
}
return &perms, nil
}
type ClientStringPermissionListResponse struct {
PermissionId string `json:"permsid"`
PermissionNegated int `json:"permnegated,string"`
PermissionSkip int `json:"permskip,string"`
PermissionValue int `json:"permvalue,string"`
}
func (c *TeamspeakHttpClient) ClientStringPermissionList(clientDbId int) (*[]ClientStringPermissionListResponse, error) {
var perms []ClientStringPermissionListResponse
err := c.requestWithParams(
"clientpermlist",
clientPermissionListRequest{
ClientDbId: clientDbId,
AsString: true,
},
&perms,
)
if err != nil {
return nil, err
}
return &perms, nil
}
// clientpoke `manage_scope, write_scope`
type clientPokeRequest struct {
ClientId int `schema:"clid,required"`
Message string `schema:"msg,required"`
}
func (c *TeamspeakHttpClient) ClientPoke(clientId int, message string) error {
return c.requestWithParams("clientpoke", clientPokeRequest{ClientId: clientId, Message: message}, nil)
}
// clientsetserverquerylogin `manage_scope, write_scope`
type clientSetServerQueryLoginRequest struct {
ClientLoginName string `schema:"client_login_name"`
}
func (c *TeamspeakHttpClient) ClientSetServerQueryLogin(clientLoginName string) error {
return c.requestWithParams(
"clientsetserverquerylogin",
clientSetServerQueryLoginRequest{ClientLoginName: clientLoginName},
nil,
)
}
// clientupdate `manage_scope, write_scope`
type ClientUpdateRequest struct {
ClientNickname string `schema:"client_nickname"`
ClientIsTalker string `schema:"client_is_talker"`
ClientDescription string `schema:"client_description"`
ClientIsChannelCommander string `schema:"client_is_channel_commander"`
ClientIconID string `schema:"client_icon_id"`
}
func (c *TeamspeakHttpClient) ClientUpdate(request ClientUpdateRequest) error {
return c.requestWithParams("clientupdate", request, nil)
}
// setclientchannelgroup `manage_scope, write_scope`
type setClientChannelGroupRequest struct {
ChannelGroupId int `schema:"cgid"`
ChannelId int `schema:"cid"`
ClientDbId int `schema:"cldbid"`
}
func (c *TeamspeakHttpClient) SetClientChannelGroup(channelGroupId, channelId, clientDbId int) error {
return c.requestWithParams(
"setclientchannelgroup",
setClientChannelGroupRequest{
ChannelGroupId: channelGroupId,
ChannelId: channelId,
ClientDbId: clientDbId,
},
nil,
)
}