diff --git a/go/LICENSE b/go/LICENSE new file mode 100644 index 0000000..b9a8399 --- /dev/null +++ b/go/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Changhua + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/go/README.md b/go/README.md new file mode 100644 index 0000000..74258d7 --- /dev/null +++ b/go/README.md @@ -0,0 +1,22 @@ +# WeChatFerry-go + +[WeChatFerry](https://github.com/lich0821/WeChatFerry) golang client + +## Usage + +```go +package main + +import ( + "github.com/danbai225/WeChatFerry-go/wcf" +) + +func main() { + c, err := wcf.NewWCF("") + if err != nil { + panic(err) + } + println(c.IsLogin()) +} + +``` diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 0000000..4533d27 --- /dev/null +++ b/go/go.mod @@ -0,0 +1,18 @@ +module github.com/danbai225/WeChatFerry-go + +go 1.20 + +require ( + github.com/danbai225/go-logs v0.1.9 + go.nanomsg.org/mangos/v3 v3.4.2 + google.golang.org/protobuf v1.30.0 +) + +require ( + github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/goccy/go-json v0.9.11 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/kpango/fastime v1.1.4 // indirect + github.com/kpango/glg v1.6.13 // indirect + golang.org/x/sys v0.7.0 // indirect +) diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 0000000..de933b6 --- /dev/null +++ b/go/go.sum @@ -0,0 +1,83 @@ +github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/danbai225/go-logs v0.1.9 h1:Q/CbLM2YXFCSSfS2TFJ+OoZGVakTuZNUQ8uBIrVWvng= +github.com/danbai225/go-logs v0.1.9/go.mod h1:giaa3Y1vBw9zODSzI+ad3NVhXAmU77cewMuBwgB0D7A= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gdamore/optopia v0.2.0/go.mod h1:YKYEwo5C1Pa617H7NlPcmQXl+vG6YnSSNB44n8dNL0Q= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/kpango/fastime v1.1.4 h1:pus9JgJBg/8Jie3ozayA4yNIV67BUPhbq0wMZY3CtYo= +github.com/kpango/fastime v1.1.4/go.mod h1:tTNDbIo5qL6D7g5vh2YbkyUbOVP2kD/we3rSjN22PMY= +github.com/kpango/glg v1.6.13 h1:QMhxOm/Oo1k8qraMtH4SQOYIgB/SI2RW2Hvrn1kgAZw= +github.com/kpango/glg v1.6.13/go.mod h1:fwP/c6NJTXe0vd9L3He6myDnO33lFVfgQGtGmlMnyws= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.nanomsg.org/mangos/v3 v3.4.2 h1:gHlopxjWvJcVCcUilQIsRQk9jdj6/HB7wrTiUN8Ki7Q= +go.nanomsg.org/mangos/v3 v3.4.2/go.mod h1:8+hjBMQub6HvXmuGvIq6hf19uxGQIjCofmc62lbedLA= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/proto/wcf.options b/go/proto/wcf.options new file mode 100644 index 0000000..ecaa322 --- /dev/null +++ b/go/proto/wcf.options @@ -0,0 +1,9 @@ +# Generate all fields as pointers. +* mangle_names:M_STRIP_PACKAGE +* fallback_type:FT_POINTER +MsgTypes* fallback_type:FT_CALLBACK +RpcContact* fallback_type:FT_CALLBACK +DbNames* fallback_type:FT_CALLBACK +DbTable* fallback_type:FT_CALLBACK +DbField* fallback_type:FT_CALLBACK +DbRow* fallback_type:FT_CALLBACK \ No newline at end of file diff --git a/go/proto/wcf.proto b/go/proto/wcf.proto new file mode 100644 index 0000000..f18e40d --- /dev/null +++ b/go/proto/wcf.proto @@ -0,0 +1,171 @@ +syntax = "proto3"; + +package wcf; +option go_package = "./wcf"; +option java_package = "com.iamteer"; + +enum Functions { + FUNC_RESERVED = 0x00; + FUNC_IS_LOGIN = 0x01; + FUNC_GET_SELF_WXID = 0x10; + FUNC_GET_MSG_TYPES = 0x11; + FUNC_GET_CONTACTS = 0x12; + FUNC_GET_DB_NAMES = 0x13; + FUNC_GET_DB_TABLES = 0x14; + FUNC_GET_USER_INFO = 0x15; + FUNC_SEND_TXT = 0x20; + FUNC_SEND_IMG = 0x21; + FUNC_SEND_FILE = 0x22; + FUNC_SEND_XML = 0x23; + FUNC_SEND_EMOTION = 0x24; + FUNC_ENABLE_RECV_TXT = 0x30; + FUNC_DISABLE_RECV_TXT = 0x40; + FUNC_EXEC_DB_QUERY = 0x50; + FUNC_ACCEPT_FRIEND = 0x51; + FUNC_ADD_ROOM_MEMBERS = 0x52; + FUNC_RECV_TRANSFER = 0x53; + FUNC_DECRYPT_IMAGE = 0x60; +} + +message Request +{ + Functions func = 1; + oneof msg + { + Empty empty = 2; + string str = 3; + TextMsg txt = 4; + PathMsg file = 5; + DbQuery query = 6; + Verification v = 7; + AddMembers m = 8; + XmlMsg xml = 9; + DecPath dec = 10; + Transfer tf = 11; + } +} + +message Response +{ + Functions func = 1; + oneof msg + { + int32 status = 2; // Int 状态,通用 + string str = 3; // 字符串 + WxMsg wxmsg = 4; // 微信消息 + MsgTypes types = 5; // 消息类型 + RpcContacts contacts = 6; // 联系人 + DbNames dbs = 7; // 数据库列表 + DbTables tables = 8; // 表列表 + DbRows rows = 9; // 行列表 + UserInfo ui = 10; // 个人信息 + }; +} + +message Empty { } + +message WxMsg +{ + bool is_self = 1; // 是否自己发送的 + bool is_group = 2; // 是否群消息 + int32 type = 3; // 消息类型 + string id = 4; // 消息 id + string xml = 5; // 消息 xml + string sender = 6; // 消息发送者 + string roomid = 7; // 群 id(如果是群消息的话) + string content = 8; // 消息内容 + string thumb = 9; // 缩略图 + string extra = 10; // 附加内容 +} + +message TextMsg +{ + string msg = 1; // 要发送的消息内容 + string receiver = 2; // 消息接收人,当为群时可@ + string aters = 3; // 要@的人列表,逗号分隔 +} + +message PathMsg +{ + string path = 1; // 要发送的图片的路径 + string receiver = 2; // 消息接收人 +} + +message XmlMsg +{ + string receiver = 1; // 消息接收人 + string content = 2; // xml 内容 + string path = 3; // 图片路径 + int32 type = 4; // 消息类型 +} + +message MsgTypes { map types = 1; } + +message RpcContact +{ + string wxid = 1; // 微信 id + string code = 2; // 微信号 + string remark = 3; // 备注 + string name = 4; // 微信昵称 + string country = 5; // 国家 + string province = 6; // 省/州 + string city = 7; // 城市 + int32 gender = 8; // 性别 +} +message RpcContacts { repeated RpcContact contacts = 1; } + +message DbNames { repeated string names = 1; } + +message DbTable +{ + string name = 1; // 表名 + string sql = 2; // 建表 SQL +} +message DbTables { repeated DbTable tables = 1; } + +message DbQuery +{ + string db = 1; // 目标数据库 + string sql = 2; // 查询 SQL +} + +message DbField +{ + int32 type = 1; // 字段类型 + string column = 2; // 字段名称 + bytes content = 3; // 字段内容 +} +message DbRow { repeated DbField fields = 1; } +message DbRows { repeated DbRow rows = 1; } + +message Verification +{ + string v3 = 1; + string v4 = 2; +} + +message AddMembers +{ + string roomid = 1; // 要加的群ID + string wxids = 2; // 要加群的人列表,逗号分隔 +} + +message UserInfo +{ + string wxid = 1; // 微信ID + string name = 2; // 昵称 + string mobile = 3; // 手机号 + string home = 4; // 文件/图片等父路径 +} + +message DecPath +{ + string src = 1; // 源路径 + string dst = 2; // 目标路径 +} + +message Transfer +{ + string wxid = 1; // 转账人 + string tid = 2; // 转账id transferid +} diff --git a/go/wcf/wcf.go b/go/wcf/wcf.go new file mode 100644 index 0000000..c538c03 --- /dev/null +++ b/go/wcf/wcf.go @@ -0,0 +1,342 @@ +package wcf + +import ( + logs "github.com/danbai225/go-logs" + "go.nanomsg.org/mangos/v3" + "go.nanomsg.org/mangos/v3/protocol" + "go.nanomsg.org/mangos/v3/protocol/pair1" + _ "go.nanomsg.org/mangos/v3/transport/all" + "google.golang.org/protobuf/proto" + "strconv" + "strings" +) + +type Client struct { + add string + socket protocol.Socket + RecvTxt bool +} + +func (c *Client) conn() error { + socket, err := pair1.NewSocket() + if err != nil { + return err + } + err = socket.Dial(c.add) + if err != nil { + return err + } + c.socket = socket + return err +} +func (c *Client) send(data []byte) error { + return c.socket.Send(data) +} +func (c *Client) Recv() (*Response, error) { + msg := &Response{} + recv, err := c.socket.Recv() + if err != nil { + return msg, err + } + err = proto.Unmarshal(recv, msg) + return msg, err +} +func (c *Client) IsLogin() bool { + err := c.send(genFunReq(Functions_FUNC_IS_LOGIN).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + if recv.GetStatus() == 1 { + return true + } + return false +} +func (c *Client) GetSelfWXID() string { + err := c.send(genFunReq(Functions_FUNC_GET_SELF_WXID).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStr() +} +func (c *Client) GetMsgTypes() map[int32]string { + err := c.send(genFunReq(Functions_FUNC_GET_MSG_TYPES).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetTypes().GetTypes() +} +func (c *Client) GetContacts() []*RpcContact { + err := c.send(genFunReq(Functions_FUNC_GET_CONTACTS).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetContacts().GetContacts() +} +func (c *Client) GetDBNames() []string { + err := c.send(genFunReq(Functions_FUNC_GET_DB_NAMES).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetDbs().Names +} +func (c *Client) GetDBTables(tab string) []*DbTable { + req := genFunReq(Functions_FUNC_GET_DB_TABLES) + str := &Request_Str{Str: tab} + req.Msg = str + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetTables().GetTables() +} +func (c *Client) ExecDBQuery(db, sql string) []*DbRow { + req := genFunReq(Functions_FUNC_EXEC_DB_QUERY) + q := Request_Query{ + Query: &DbQuery{ + Db: db, + Sql: sql, + }, + } + req.Msg = &q + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetRows().GetRows() +} +func (c *Client) AcceptFriend() int32 { + err := c.send(genFunReq(Functions_FUNC_ACCEPT_FRIEND).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStatus() +} +func (c *Client) AddChatRoomMembers(roomId string, wxIds []string) int32 { + req := genFunReq(Functions_FUNC_ADD_ROOM_MEMBERS) + q := Request_M{ + M: &AddMembers{Roomid: roomId, + Wxids: strings.Join(wxIds, ",")}, + } + req.Msg = &q + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStatus() +} +func (c *Client) GetUserInfo() *UserInfo { + err := c.send(genFunReq(Functions_FUNC_GET_USER_INFO).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetUi() +} + +/* +SendTxt +@param msg: 消息内容(如果是 @ 消息则需要有跟 @ 的人数量相同的 @) +@param receiver: 消息接收人,私聊为 wxid(wxid_xxxxxxxxxxxxxx),群聊为roomid(xxxxxxxxxx@chatroom) +@param ates: 群聊时要 @ 的人(私聊时为空字符串),多个用逗号分隔。@所有人 用notify@all(必须是群主或者管理员才有权限) +*/ +func (c *Client) SendTxt(msg string, receiver string, ates []string) int32 { + req := genFunReq(Functions_FUNC_SEND_TXT) + req.Msg = &Request_Txt{ + Txt: &TextMsg{ + Msg: msg, + Receiver: receiver, + Aters: strings.Join(ates, ","), + }, + } + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStatus() +} + +/* +SendIMG +path 绝对路径 +*/ +func (c *Client) SendIMG(path string, receiver string) int32 { + req := genFunReq(Functions_FUNC_SEND_IMG) + req.Msg = &Request_File{ + File: &PathMsg{ + Path: path, + Receiver: receiver, + }, + } + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStatus() +} + +/* +SendFile +path 绝对路径 +*/ +func (c *Client) SendFile(path string, receiver string) int32 { + req := genFunReq(Functions_FUNC_SEND_FILE) + req.Msg = &Request_File{ + File: &PathMsg{ + Path: path, + Receiver: receiver, + }, + } + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStatus() +} +func (c *Client) SendXml(path, content, receiver string, Type int32) int32 { + req := genFunReq(Functions_FUNC_SEND_XML) + req.Msg = &Request_Xml{ + Xml: &XmlMsg{ + Receiver: receiver, + Content: content, + Path: path, + Type: Type, + }, + } + err := c.send(req.build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + return recv.GetStatus() +} +func (c *Client) EnableRecvTxt() int32 { + err := c.send(genFunReq(Functions_FUNC_ENABLE_RECV_TXT).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + c.RecvTxt = true + return recv.GetStatus() +} +func (c *Client) DisableRecvTxt() int32 { + err := c.send(genFunReq(Functions_FUNC_DISABLE_RECV_TXT).build()) + if err != nil { + logs.Err(err) + } + recv, err := c.Recv() + if err != nil { + logs.Err(err) + } + c.RecvTxt = false + return recv.GetStatus() +} +func (c *Client) OnMSG(f func(msg *WxMsg)) error { + socket, err := pair1.NewSocket() + if err != nil { + return err + } + socket.SetOption(mangos.OptionRecvDeadline, 2000) + socket.SetOption(mangos.OptionSendDeadline, 2000) + err = socket.Dial(addPort(c.add)) + + if err != nil { + return err + } + for c.RecvTxt { + msg := &Response{} + recv, err := socket.Recv() + if err != nil { + return err + } + logs.Info(len(recv)) + _ = proto.Unmarshal(recv, msg) + go f(msg.GetWxmsg()) + } + return err +} +func NewWCF(add string) (*Client, error) { + if add == "" { + add = "tcp://127.0.0.1:10086" + } + client := &Client{add: add} + err := client.conn() + return client, err +} + +type cmdMSG struct { + *Request +} + +func (c *cmdMSG) build() []byte { + marshal, _ := proto.Marshal(c) + return marshal +} +func genFunReq(fun Functions) *cmdMSG { + return &cmdMSG{ + &Request{Func: fun, + Msg: nil}, + } +} +func addPort(add string) string { + parts := strings.Split(add, ":") + port, _ := strconv.Atoi(parts[2]) + newPort := port + 1 + return parts[0] + ":" + parts[1] + ":" + strconv.Itoa(newPort) +} diff --git a/go/wcf/wcf.pb.go b/go/wcf/wcf.pb.go new file mode 100644 index 0000000..c5b095e --- /dev/null +++ b/go/wcf/wcf.pb.go @@ -0,0 +1,2269 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.30.0 +// protoc v4.22.3 +// source: wcf.proto + +package wcf + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Functions int32 + +const ( + Functions_FUNC_RESERVED Functions = 0 + Functions_FUNC_IS_LOGIN Functions = 1 + Functions_FUNC_GET_SELF_WXID Functions = 16 + Functions_FUNC_GET_MSG_TYPES Functions = 17 + Functions_FUNC_GET_CONTACTS Functions = 18 + Functions_FUNC_GET_DB_NAMES Functions = 19 + Functions_FUNC_GET_DB_TABLES Functions = 20 + Functions_FUNC_GET_USER_INFO Functions = 21 + Functions_FUNC_SEND_TXT Functions = 32 + Functions_FUNC_SEND_IMG Functions = 33 + Functions_FUNC_SEND_FILE Functions = 34 + Functions_FUNC_SEND_XML Functions = 35 + Functions_FUNC_SEND_EMOTION Functions = 36 + Functions_FUNC_ENABLE_RECV_TXT Functions = 48 + Functions_FUNC_DISABLE_RECV_TXT Functions = 64 + Functions_FUNC_EXEC_DB_QUERY Functions = 80 + Functions_FUNC_ACCEPT_FRIEND Functions = 81 + Functions_FUNC_ADD_ROOM_MEMBERS Functions = 82 + Functions_FUNC_RECV_TRANSFER Functions = 83 + Functions_FUNC_DECRYPT_IMAGE Functions = 96 +) + +// Enum value maps for Functions. +var ( + Functions_name = map[int32]string{ + 0: "FUNC_RESERVED", + 1: "FUNC_IS_LOGIN", + 16: "FUNC_GET_SELF_WXID", + 17: "FUNC_GET_MSG_TYPES", + 18: "FUNC_GET_CONTACTS", + 19: "FUNC_GET_DB_NAMES", + 20: "FUNC_GET_DB_TABLES", + 21: "FUNC_GET_USER_INFO", + 32: "FUNC_SEND_TXT", + 33: "FUNC_SEND_IMG", + 34: "FUNC_SEND_FILE", + 35: "FUNC_SEND_XML", + 36: "FUNC_SEND_EMOTION", + 48: "FUNC_ENABLE_RECV_TXT", + 64: "FUNC_DISABLE_RECV_TXT", + 80: "FUNC_EXEC_DB_QUERY", + 81: "FUNC_ACCEPT_FRIEND", + 82: "FUNC_ADD_ROOM_MEMBERS", + 83: "FUNC_RECV_TRANSFER", + 96: "FUNC_DECRYPT_IMAGE", + } + Functions_value = map[string]int32{ + "FUNC_RESERVED": 0, + "FUNC_IS_LOGIN": 1, + "FUNC_GET_SELF_WXID": 16, + "FUNC_GET_MSG_TYPES": 17, + "FUNC_GET_CONTACTS": 18, + "FUNC_GET_DB_NAMES": 19, + "FUNC_GET_DB_TABLES": 20, + "FUNC_GET_USER_INFO": 21, + "FUNC_SEND_TXT": 32, + "FUNC_SEND_IMG": 33, + "FUNC_SEND_FILE": 34, + "FUNC_SEND_XML": 35, + "FUNC_SEND_EMOTION": 36, + "FUNC_ENABLE_RECV_TXT": 48, + "FUNC_DISABLE_RECV_TXT": 64, + "FUNC_EXEC_DB_QUERY": 80, + "FUNC_ACCEPT_FRIEND": 81, + "FUNC_ADD_ROOM_MEMBERS": 82, + "FUNC_RECV_TRANSFER": 83, + "FUNC_DECRYPT_IMAGE": 96, + } +) + +func (x Functions) Enum() *Functions { + p := new(Functions) + *p = x + return p +} + +func (x Functions) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Functions) Descriptor() protoreflect.EnumDescriptor { + return file_wcf_proto_enumTypes[0].Descriptor() +} + +func (Functions) Type() protoreflect.EnumType { + return &file_wcf_proto_enumTypes[0] +} + +func (x Functions) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Functions.Descriptor instead. +func (Functions) EnumDescriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{0} +} + +type Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Func Functions `protobuf:"varint,1,opt,name=func,proto3,enum=wcf.Functions" json:"func,omitempty"` + // Types that are assignable to Msg: + // + // *Request_Empty + // *Request_Str + // *Request_Txt + // *Request_File + // *Request_Query + // *Request_V + // *Request_M + // *Request_Xml + // *Request_Dec + // *Request_Tf + Msg isRequest_Msg `protobuf_oneof:"msg"` +} + +func (x *Request) Reset() { + *x = Request{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Request) ProtoMessage() {} + +func (x *Request) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Request.ProtoReflect.Descriptor instead. +func (*Request) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{0} +} + +func (x *Request) GetFunc() Functions { + if x != nil { + return x.Func + } + return Functions_FUNC_RESERVED +} + +func (m *Request) GetMsg() isRequest_Msg { + if m != nil { + return m.Msg + } + return nil +} + +func (x *Request) GetEmpty() *Empty { + if x, ok := x.GetMsg().(*Request_Empty); ok { + return x.Empty + } + return nil +} + +func (x *Request) GetStr() string { + if x, ok := x.GetMsg().(*Request_Str); ok { + return x.Str + } + return "" +} + +func (x *Request) GetTxt() *TextMsg { + if x, ok := x.GetMsg().(*Request_Txt); ok { + return x.Txt + } + return nil +} + +func (x *Request) GetFile() *PathMsg { + if x, ok := x.GetMsg().(*Request_File); ok { + return x.File + } + return nil +} + +func (x *Request) GetQuery() *DbQuery { + if x, ok := x.GetMsg().(*Request_Query); ok { + return x.Query + } + return nil +} + +func (x *Request) GetV() *Verification { + if x, ok := x.GetMsg().(*Request_V); ok { + return x.V + } + return nil +} + +func (x *Request) GetM() *AddMembers { + if x, ok := x.GetMsg().(*Request_M); ok { + return x.M + } + return nil +} + +func (x *Request) GetXml() *XmlMsg { + if x, ok := x.GetMsg().(*Request_Xml); ok { + return x.Xml + } + return nil +} + +func (x *Request) GetDec() *DecPath { + if x, ok := x.GetMsg().(*Request_Dec); ok { + return x.Dec + } + return nil +} + +func (x *Request) GetTf() *Transfer { + if x, ok := x.GetMsg().(*Request_Tf); ok { + return x.Tf + } + return nil +} + +type isRequest_Msg interface { + isRequest_Msg() +} + +type Request_Empty struct { + Empty *Empty `protobuf:"bytes,2,opt,name=empty,proto3,oneof"` +} + +type Request_Str struct { + Str string `protobuf:"bytes,3,opt,name=str,proto3,oneof"` +} + +type Request_Txt struct { + Txt *TextMsg `protobuf:"bytes,4,opt,name=txt,proto3,oneof"` +} + +type Request_File struct { + File *PathMsg `protobuf:"bytes,5,opt,name=file,proto3,oneof"` +} + +type Request_Query struct { + Query *DbQuery `protobuf:"bytes,6,opt,name=query,proto3,oneof"` +} + +type Request_V struct { + V *Verification `protobuf:"bytes,7,opt,name=v,proto3,oneof"` +} + +type Request_M struct { + M *AddMembers `protobuf:"bytes,8,opt,name=m,proto3,oneof"` +} + +type Request_Xml struct { + Xml *XmlMsg `protobuf:"bytes,9,opt,name=xml,proto3,oneof"` +} + +type Request_Dec struct { + Dec *DecPath `protobuf:"bytes,10,opt,name=dec,proto3,oneof"` +} + +type Request_Tf struct { + Tf *Transfer `protobuf:"bytes,11,opt,name=tf,proto3,oneof"` +} + +func (*Request_Empty) isRequest_Msg() {} + +func (*Request_Str) isRequest_Msg() {} + +func (*Request_Txt) isRequest_Msg() {} + +func (*Request_File) isRequest_Msg() {} + +func (*Request_Query) isRequest_Msg() {} + +func (*Request_V) isRequest_Msg() {} + +func (*Request_M) isRequest_Msg() {} + +func (*Request_Xml) isRequest_Msg() {} + +func (*Request_Dec) isRequest_Msg() {} + +func (*Request_Tf) isRequest_Msg() {} + +type Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Func Functions `protobuf:"varint,1,opt,name=func,proto3,enum=wcf.Functions" json:"func,omitempty"` + // Types that are assignable to Msg: + // + // *Response_Status + // *Response_Str + // *Response_Wxmsg + // *Response_Types + // *Response_Contacts + // *Response_Dbs + // *Response_Tables + // *Response_Rows + // *Response_Ui + Msg isResponse_Msg `protobuf_oneof:"msg"` +} + +func (x *Response) Reset() { + *x = Response{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Response) ProtoMessage() {} + +func (x *Response) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Response.ProtoReflect.Descriptor instead. +func (*Response) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{1} +} + +func (x *Response) GetFunc() Functions { + if x != nil { + return x.Func + } + return Functions_FUNC_RESERVED +} + +func (m *Response) GetMsg() isResponse_Msg { + if m != nil { + return m.Msg + } + return nil +} + +func (x *Response) GetStatus() int32 { + if x, ok := x.GetMsg().(*Response_Status); ok { + return x.Status + } + return 0 +} + +func (x *Response) GetStr() string { + if x, ok := x.GetMsg().(*Response_Str); ok { + return x.Str + } + return "" +} + +func (x *Response) GetWxmsg() *WxMsg { + if x, ok := x.GetMsg().(*Response_Wxmsg); ok { + return x.Wxmsg + } + return nil +} + +func (x *Response) GetTypes() *MsgTypes { + if x, ok := x.GetMsg().(*Response_Types); ok { + return x.Types + } + return nil +} + +func (x *Response) GetContacts() *RpcContacts { + if x, ok := x.GetMsg().(*Response_Contacts); ok { + return x.Contacts + } + return nil +} + +func (x *Response) GetDbs() *DbNames { + if x, ok := x.GetMsg().(*Response_Dbs); ok { + return x.Dbs + } + return nil +} + +func (x *Response) GetTables() *DbTables { + if x, ok := x.GetMsg().(*Response_Tables); ok { + return x.Tables + } + return nil +} + +func (x *Response) GetRows() *DbRows { + if x, ok := x.GetMsg().(*Response_Rows); ok { + return x.Rows + } + return nil +} + +func (x *Response) GetUi() *UserInfo { + if x, ok := x.GetMsg().(*Response_Ui); ok { + return x.Ui + } + return nil +} + +type isResponse_Msg interface { + isResponse_Msg() +} + +type Response_Status struct { + Status int32 `protobuf:"varint,2,opt,name=status,proto3,oneof"` // Int 状态,通用 +} + +type Response_Str struct { + Str string `protobuf:"bytes,3,opt,name=str,proto3,oneof"` // 字符串 +} + +type Response_Wxmsg struct { + Wxmsg *WxMsg `protobuf:"bytes,4,opt,name=wxmsg,proto3,oneof"` // 微信消息 +} + +type Response_Types struct { + Types *MsgTypes `protobuf:"bytes,5,opt,name=types,proto3,oneof"` // 消息类型 +} + +type Response_Contacts struct { + Contacts *RpcContacts `protobuf:"bytes,6,opt,name=contacts,proto3,oneof"` // 联系人 +} + +type Response_Dbs struct { + Dbs *DbNames `protobuf:"bytes,7,opt,name=dbs,proto3,oneof"` // 数据库列表 +} + +type Response_Tables struct { + Tables *DbTables `protobuf:"bytes,8,opt,name=tables,proto3,oneof"` // 表列表 +} + +type Response_Rows struct { + Rows *DbRows `protobuf:"bytes,9,opt,name=rows,proto3,oneof"` // 行列表 +} + +type Response_Ui struct { + Ui *UserInfo `protobuf:"bytes,10,opt,name=ui,proto3,oneof"` // 个人信息 +} + +func (*Response_Status) isResponse_Msg() {} + +func (*Response_Str) isResponse_Msg() {} + +func (*Response_Wxmsg) isResponse_Msg() {} + +func (*Response_Types) isResponse_Msg() {} + +func (*Response_Contacts) isResponse_Msg() {} + +func (*Response_Dbs) isResponse_Msg() {} + +func (*Response_Tables) isResponse_Msg() {} + +func (*Response_Rows) isResponse_Msg() {} + +func (*Response_Ui) isResponse_Msg() {} + +type Empty struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Empty) Reset() { + *x = Empty{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Empty) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Empty) ProtoMessage() {} + +func (x *Empty) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Empty.ProtoReflect.Descriptor instead. +func (*Empty) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{2} +} + +type WxMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsSelf bool `protobuf:"varint,1,opt,name=is_self,json=isSelf,proto3" json:"is_self,omitempty"` // 是否自己发送的 + IsGroup bool `protobuf:"varint,2,opt,name=is_group,json=isGroup,proto3" json:"is_group,omitempty"` // 是否群消息 + Type int32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"` // 消息类型 + Id string `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` // 消息 id + Xml string `protobuf:"bytes,5,opt,name=xml,proto3" json:"xml,omitempty"` // 消息 xml + Sender string `protobuf:"bytes,6,opt,name=sender,proto3" json:"sender,omitempty"` // 消息发送者 + Roomid string `protobuf:"bytes,7,opt,name=roomid,proto3" json:"roomid,omitempty"` // 群 id(如果是群消息的话) + Content string `protobuf:"bytes,8,opt,name=content,proto3" json:"content,omitempty"` // 消息内容 + Thumb string `protobuf:"bytes,9,opt,name=thumb,proto3" json:"thumb,omitempty"` // 缩略图 + Extra string `protobuf:"bytes,10,opt,name=extra,proto3" json:"extra,omitempty"` // 附加内容 +} + +func (x *WxMsg) Reset() { + *x = WxMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxMsg) ProtoMessage() {} + +func (x *WxMsg) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxMsg.ProtoReflect.Descriptor instead. +func (*WxMsg) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{3} +} + +func (x *WxMsg) GetIsSelf() bool { + if x != nil { + return x.IsSelf + } + return false +} + +func (x *WxMsg) GetIsGroup() bool { + if x != nil { + return x.IsGroup + } + return false +} + +func (x *WxMsg) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *WxMsg) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *WxMsg) GetXml() string { + if x != nil { + return x.Xml + } + return "" +} + +func (x *WxMsg) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *WxMsg) GetRoomid() string { + if x != nil { + return x.Roomid + } + return "" +} + +func (x *WxMsg) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *WxMsg) GetThumb() string { + if x != nil { + return x.Thumb + } + return "" +} + +func (x *WxMsg) GetExtra() string { + if x != nil { + return x.Extra + } + return "" +} + +type TextMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` // 要发送的消息内容 + Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` // 消息接收人,当为群时可@ + Aters string `protobuf:"bytes,3,opt,name=aters,proto3" json:"aters,omitempty"` // 要@的人列表,逗号分隔 +} + +func (x *TextMsg) Reset() { + *x = TextMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TextMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TextMsg) ProtoMessage() {} + +func (x *TextMsg) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TextMsg.ProtoReflect.Descriptor instead. +func (*TextMsg) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{4} +} + +func (x *TextMsg) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *TextMsg) GetReceiver() string { + if x != nil { + return x.Receiver + } + return "" +} + +func (x *TextMsg) GetAters() string { + if x != nil { + return x.Aters + } + return "" +} + +type PathMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // 要发送的图片的路径 + Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` // 消息接收人 +} + +func (x *PathMsg) Reset() { + *x = PathMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PathMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PathMsg) ProtoMessage() {} + +func (x *PathMsg) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PathMsg.ProtoReflect.Descriptor instead. +func (*PathMsg) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{5} +} + +func (x *PathMsg) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *PathMsg) GetReceiver() string { + if x != nil { + return x.Receiver + } + return "" +} + +type XmlMsg struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Receiver string `protobuf:"bytes,1,opt,name=receiver,proto3" json:"receiver,omitempty"` // 消息接收人 + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` // xml 内容 + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` // 图片路径 + Type int32 `protobuf:"varint,4,opt,name=type,proto3" json:"type,omitempty"` // 消息类型 +} + +func (x *XmlMsg) Reset() { + *x = XmlMsg{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *XmlMsg) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*XmlMsg) ProtoMessage() {} + +func (x *XmlMsg) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use XmlMsg.ProtoReflect.Descriptor instead. +func (*XmlMsg) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{6} +} + +func (x *XmlMsg) GetReceiver() string { + if x != nil { + return x.Receiver + } + return "" +} + +func (x *XmlMsg) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *XmlMsg) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *XmlMsg) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +type MsgTypes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Types map[int32]string `protobuf:"bytes,1,rep,name=types,proto3" json:"types,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MsgTypes) Reset() { + *x = MsgTypes{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgTypes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgTypes) ProtoMessage() {} + +func (x *MsgTypes) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MsgTypes.ProtoReflect.Descriptor instead. +func (*MsgTypes) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{7} +} + +func (x *MsgTypes) GetTypes() map[int32]string { + if x != nil { + return x.Types + } + return nil +} + +type RpcContact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Wxid string `protobuf:"bytes,1,opt,name=wxid,proto3" json:"wxid,omitempty"` // 微信 id + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 微信号 + Remark string `protobuf:"bytes,3,opt,name=remark,proto3" json:"remark,omitempty"` // 备注 + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` // 微信昵称 + Country string `protobuf:"bytes,5,opt,name=country,proto3" json:"country,omitempty"` // 国家 + Province string `protobuf:"bytes,6,opt,name=province,proto3" json:"province,omitempty"` // 省/州 + City string `protobuf:"bytes,7,opt,name=city,proto3" json:"city,omitempty"` // 城市 + Gender int32 `protobuf:"varint,8,opt,name=gender,proto3" json:"gender,omitempty"` // 性别 +} + +func (x *RpcContact) Reset() { + *x = RpcContact{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RpcContact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RpcContact) ProtoMessage() {} + +func (x *RpcContact) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RpcContact.ProtoReflect.Descriptor instead. +func (*RpcContact) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{8} +} + +func (x *RpcContact) GetWxid() string { + if x != nil { + return x.Wxid + } + return "" +} + +func (x *RpcContact) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *RpcContact) GetRemark() string { + if x != nil { + return x.Remark + } + return "" +} + +func (x *RpcContact) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RpcContact) GetCountry() string { + if x != nil { + return x.Country + } + return "" +} + +func (x *RpcContact) GetProvince() string { + if x != nil { + return x.Province + } + return "" +} + +func (x *RpcContact) GetCity() string { + if x != nil { + return x.City + } + return "" +} + +func (x *RpcContact) GetGender() int32 { + if x != nil { + return x.Gender + } + return 0 +} + +type RpcContacts struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Contacts []*RpcContact `protobuf:"bytes,1,rep,name=contacts,proto3" json:"contacts,omitempty"` +} + +func (x *RpcContacts) Reset() { + *x = RpcContacts{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RpcContacts) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RpcContacts) ProtoMessage() {} + +func (x *RpcContacts) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RpcContacts.ProtoReflect.Descriptor instead. +func (*RpcContacts) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{9} +} + +func (x *RpcContacts) GetContacts() []*RpcContact { + if x != nil { + return x.Contacts + } + return nil +} + +type DbNames struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` +} + +func (x *DbNames) Reset() { + *x = DbNames{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbNames) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbNames) ProtoMessage() {} + +func (x *DbNames) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbNames.ProtoReflect.Descriptor instead. +func (*DbNames) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{10} +} + +func (x *DbNames) GetNames() []string { + if x != nil { + return x.Names + } + return nil +} + +type DbTable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // 表名 + Sql string `protobuf:"bytes,2,opt,name=sql,proto3" json:"sql,omitempty"` // 建表 SQL +} + +func (x *DbTable) Reset() { + *x = DbTable{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbTable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTable) ProtoMessage() {} + +func (x *DbTable) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTable.ProtoReflect.Descriptor instead. +func (*DbTable) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{11} +} + +func (x *DbTable) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DbTable) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +type DbTables struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tables []*DbTable `protobuf:"bytes,1,rep,name=tables,proto3" json:"tables,omitempty"` +} + +func (x *DbTables) Reset() { + *x = DbTables{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbTables) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTables) ProtoMessage() {} + +func (x *DbTables) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTables.ProtoReflect.Descriptor instead. +func (*DbTables) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{12} +} + +func (x *DbTables) GetTables() []*DbTable { + if x != nil { + return x.Tables + } + return nil +} + +type DbQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Db string `protobuf:"bytes,1,opt,name=db,proto3" json:"db,omitempty"` // 目标数据库 + Sql string `protobuf:"bytes,2,opt,name=sql,proto3" json:"sql,omitempty"` // 查询 SQL +} + +func (x *DbQuery) Reset() { + *x = DbQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbQuery) ProtoMessage() {} + +func (x *DbQuery) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbQuery.ProtoReflect.Descriptor instead. +func (*DbQuery) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{13} +} + +func (x *DbQuery) GetDb() string { + if x != nil { + return x.Db + } + return "" +} + +func (x *DbQuery) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +type DbField struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type int32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` // 字段类型 + Column string `protobuf:"bytes,2,opt,name=column,proto3" json:"column,omitempty"` // 字段名称 + Content []byte `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` // 字段内容 +} + +func (x *DbField) Reset() { + *x = DbField{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbField) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbField) ProtoMessage() {} + +func (x *DbField) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbField.ProtoReflect.Descriptor instead. +func (*DbField) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{14} +} + +func (x *DbField) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *DbField) GetColumn() string { + if x != nil { + return x.Column + } + return "" +} + +func (x *DbField) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +type DbRow struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Fields []*DbField `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"` +} + +func (x *DbRow) Reset() { + *x = DbRow{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbRow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbRow) ProtoMessage() {} + +func (x *DbRow) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbRow.ProtoReflect.Descriptor instead. +func (*DbRow) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{15} +} + +func (x *DbRow) GetFields() []*DbField { + if x != nil { + return x.Fields + } + return nil +} + +type DbRows struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rows []*DbRow `protobuf:"bytes,1,rep,name=rows,proto3" json:"rows,omitempty"` +} + +func (x *DbRows) Reset() { + *x = DbRows{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbRows) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbRows) ProtoMessage() {} + +func (x *DbRows) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbRows.ProtoReflect.Descriptor instead. +func (*DbRows) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{16} +} + +func (x *DbRows) GetRows() []*DbRow { + if x != nil { + return x.Rows + } + return nil +} + +type Verification struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + V3 string `protobuf:"bytes,1,opt,name=v3,proto3" json:"v3,omitempty"` + V4 string `protobuf:"bytes,2,opt,name=v4,proto3" json:"v4,omitempty"` +} + +func (x *Verification) Reset() { + *x = Verification{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Verification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Verification) ProtoMessage() {} + +func (x *Verification) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Verification.ProtoReflect.Descriptor instead. +func (*Verification) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{17} +} + +func (x *Verification) GetV3() string { + if x != nil { + return x.V3 + } + return "" +} + +func (x *Verification) GetV4() string { + if x != nil { + return x.V4 + } + return "" +} + +type AddMembers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Roomid string `protobuf:"bytes,1,opt,name=roomid,proto3" json:"roomid,omitempty"` // 要加的群ID + Wxids string `protobuf:"bytes,2,opt,name=wxids,proto3" json:"wxids,omitempty"` // 要加群的人列表,逗号分隔 +} + +func (x *AddMembers) Reset() { + *x = AddMembers{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddMembers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddMembers) ProtoMessage() {} + +func (x *AddMembers) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddMembers.ProtoReflect.Descriptor instead. +func (*AddMembers) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{18} +} + +func (x *AddMembers) GetRoomid() string { + if x != nil { + return x.Roomid + } + return "" +} + +func (x *AddMembers) GetWxids() string { + if x != nil { + return x.Wxids + } + return "" +} + +type UserInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Wxid string `protobuf:"bytes,1,opt,name=wxid,proto3" json:"wxid,omitempty"` // 微信ID + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // 昵称 + Mobile string `protobuf:"bytes,3,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号 + Home string `protobuf:"bytes,4,opt,name=home,proto3" json:"home,omitempty"` // 文件/图片等父路径 +} + +func (x *UserInfo) Reset() { + *x = UserInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserInfo) ProtoMessage() {} + +func (x *UserInfo) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserInfo.ProtoReflect.Descriptor instead. +func (*UserInfo) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{19} +} + +func (x *UserInfo) GetWxid() string { + if x != nil { + return x.Wxid + } + return "" +} + +func (x *UserInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UserInfo) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +func (x *UserInfo) GetHome() string { + if x != nil { + return x.Home + } + return "" +} + +type DecPath struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Src string `protobuf:"bytes,1,opt,name=src,proto3" json:"src,omitempty"` // 源路径 + Dst string `protobuf:"bytes,2,opt,name=dst,proto3" json:"dst,omitempty"` // 目标路径 +} + +func (x *DecPath) Reset() { + *x = DecPath{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DecPath) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DecPath) ProtoMessage() {} + +func (x *DecPath) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DecPath.ProtoReflect.Descriptor instead. +func (*DecPath) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{20} +} + +func (x *DecPath) GetSrc() string { + if x != nil { + return x.Src + } + return "" +} + +func (x *DecPath) GetDst() string { + if x != nil { + return x.Dst + } + return "" +} + +type Transfer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Wxid string `protobuf:"bytes,1,opt,name=wxid,proto3" json:"wxid,omitempty"` // 转账人 + Tid string `protobuf:"bytes,2,opt,name=tid,proto3" json:"tid,omitempty"` // 转账id transferid +} + +func (x *Transfer) Reset() { + *x = Transfer{} + if protoimpl.UnsafeEnabled { + mi := &file_wcf_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Transfer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Transfer) ProtoMessage() {} + +func (x *Transfer) ProtoReflect() protoreflect.Message { + mi := &file_wcf_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Transfer.ProtoReflect.Descriptor instead. +func (*Transfer) Descriptor() ([]byte, []int) { + return file_wcf_proto_rawDescGZIP(), []int{21} +} + +func (x *Transfer) GetWxid() string { + if x != nil { + return x.Wxid + } + return "" +} + +func (x *Transfer) GetTid() string { + if x != nil { + return x.Tid + } + return "" +} + +var File_wcf_proto protoreflect.FileDescriptor + +var file_wcf_proto_rawDesc = []byte{ + 0x0a, 0x09, 0x77, 0x63, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x77, 0x63, 0x66, + 0x22, 0x80, 0x03, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x04, + 0x66, 0x75, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x77, 0x63, 0x66, + 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x04, 0x66, 0x75, 0x6e, 0x63, + 0x12, 0x22, 0x0a, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x05, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x20, 0x0a, 0x03, 0x74, 0x78, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x54, 0x65, 0x78, 0x74, + 0x4d, 0x73, 0x67, 0x48, 0x00, 0x52, 0x03, 0x74, 0x78, 0x74, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x50, + 0x61, 0x74, 0x68, 0x4d, 0x73, 0x67, 0x48, 0x00, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x24, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x77, 0x63, 0x66, 0x2e, 0x44, 0x62, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x01, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x01, 0x76, 0x12, 0x1f, 0x0a, 0x01, 0x6d, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x01, 0x6d, 0x12, 0x1f, 0x0a, 0x03, 0x78, 0x6d, 0x6c, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x58, 0x6d, 0x6c, 0x4d, + 0x73, 0x67, 0x48, 0x00, 0x52, 0x03, 0x78, 0x6d, 0x6c, 0x12, 0x20, 0x0a, 0x03, 0x64, 0x65, 0x63, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x44, 0x65, 0x63, + 0x50, 0x61, 0x74, 0x68, 0x48, 0x00, 0x52, 0x03, 0x64, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x02, 0x74, + 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x00, 0x52, 0x02, 0x74, 0x66, 0x42, 0x05, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x22, 0xed, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x22, 0x0a, 0x04, 0x66, 0x75, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, + 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x04, + 0x66, 0x75, 0x6e, 0x63, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, + 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x73, + 0x74, 0x72, 0x12, 0x22, 0x0a, 0x05, 0x77, 0x78, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x57, 0x78, 0x4d, 0x73, 0x67, 0x48, 0x00, 0x52, + 0x05, 0x77, 0x78, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x4d, 0x73, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x2e, 0x0a, + 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x52, 0x70, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, + 0x73, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x12, 0x20, 0x0a, + 0x03, 0x64, 0x62, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x77, 0x63, 0x66, + 0x2e, 0x44, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x48, 0x00, 0x52, 0x03, 0x64, 0x62, 0x73, 0x12, + 0x27, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x44, 0x62, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x48, 0x00, + 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x44, 0x62, 0x52, + 0x6f, 0x77, 0x73, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x1f, 0x0a, 0x02, 0x75, + 0x69, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x02, 0x75, 0x69, 0x42, 0x05, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xe7, 0x01, 0x0a, + 0x05, 0x57, 0x78, 0x4d, 0x73, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, + 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, + 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x78, 0x6d, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x78, 0x6d, 0x6c, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, + 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x68, + 0x75, 0x6d, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x68, 0x75, 0x6d, 0x62, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x4d, 0x0a, 0x07, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x73, + 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, + 0x14, 0x0a, 0x05, 0x61, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x61, 0x74, 0x65, 0x72, 0x73, 0x22, 0x39, 0x0a, 0x07, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x73, 0x67, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x22, 0x66, 0x0a, 0x06, 0x58, 0x6d, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x74, 0x0a, 0x08, 0x4d, 0x73, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc2, + 0x01, 0x0a, 0x0a, 0x52, 0x70, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x77, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x77, 0x78, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x67, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x67, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x22, 0x3a, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, + 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x52, 0x70, 0x63, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x22, + 0x1f, 0x0a, 0x07, 0x44, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x22, 0x2f, 0x0a, 0x07, 0x44, 0x62, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, + 0x6c, 0x22, 0x30, 0x0a, 0x08, 0x44, 0x62, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, + 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x77, 0x63, 0x66, 0x2e, 0x44, 0x62, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x07, 0x44, 0x62, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x0e, + 0x0a, 0x02, 0x64, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, 0x12, 0x10, + 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, + 0x22, 0x4f, 0x0a, 0x07, 0x44, 0x62, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x2d, 0x0a, 0x05, 0x44, 0x62, 0x52, 0x6f, 0x77, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x77, 0x63, 0x66, + 0x2e, 0x44, 0x62, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x22, 0x28, 0x0a, 0x06, 0x44, 0x62, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x72, 0x6f, + 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x77, 0x63, 0x66, 0x2e, 0x44, + 0x62, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0x2e, 0x0a, 0x0c, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x76, 0x33, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x76, 0x33, 0x12, 0x0e, 0x0a, 0x02, 0x76, 0x34, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x76, 0x34, 0x22, 0x3a, 0x0a, 0x0a, 0x41, 0x64, + 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x77, 0x78, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x77, 0x78, 0x69, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x77, 0x78, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, + 0x62, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, + 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x68, 0x6f, 0x6d, 0x65, 0x22, 0x2d, 0x0a, 0x07, 0x44, 0x65, 0x63, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x73, 0x72, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x64, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x77, 0x78, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x74, 0x69, 0x64, 0x2a, 0xd3, 0x03, 0x0a, 0x09, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x52, 0x45, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x55, 0x4e, 0x43, + 0x5f, 0x49, 0x53, 0x5f, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, + 0x55, 0x4e, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x57, 0x58, 0x49, + 0x44, 0x10, 0x10, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x5f, + 0x4d, 0x53, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x10, 0x11, 0x12, 0x15, 0x0a, 0x11, 0x46, + 0x55, 0x4e, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, + 0x10, 0x12, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x44, + 0x42, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x10, 0x13, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x55, 0x4e, + 0x43, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x44, 0x42, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, + 0x14, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x55, 0x53, + 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x15, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x55, 0x4e, + 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, + 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x49, 0x4d, 0x47, 0x10, 0x21, 0x12, + 0x12, 0x0a, 0x0e, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x49, 0x4c, + 0x45, 0x10, 0x22, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, + 0x5f, 0x58, 0x4d, 0x4c, 0x10, 0x23, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x53, + 0x45, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x4f, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, 0x18, 0x0a, + 0x14, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x43, + 0x56, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x30, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x55, 0x4e, 0x43, 0x5f, + 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x54, 0x58, 0x54, + 0x10, 0x40, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x5f, + 0x44, 0x42, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x50, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x55, + 0x4e, 0x43, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x5f, 0x46, 0x52, 0x49, 0x45, 0x4e, 0x44, + 0x10, 0x51, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x52, + 0x4f, 0x4f, 0x4d, 0x5f, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x10, 0x52, 0x12, 0x16, 0x0a, + 0x12, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x45, 0x52, 0x10, 0x53, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x55, 0x4e, 0x43, 0x5f, 0x44, 0x45, + 0x43, 0x52, 0x59, 0x50, 0x54, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x60, 0x42, 0x14, 0x0a, + 0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x74, 0x65, 0x65, 0x72, 0x5a, 0x05, 0x2e, 0x2f, + 0x77, 0x63, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_wcf_proto_rawDescOnce sync.Once + file_wcf_proto_rawDescData = file_wcf_proto_rawDesc +) + +func file_wcf_proto_rawDescGZIP() []byte { + file_wcf_proto_rawDescOnce.Do(func() { + file_wcf_proto_rawDescData = protoimpl.X.CompressGZIP(file_wcf_proto_rawDescData) + }) + return file_wcf_proto_rawDescData +} + +var file_wcf_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_wcf_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_wcf_proto_goTypes = []interface{}{ + (Functions)(0), // 0: wcf.Functions + (*Request)(nil), // 1: wcf.Request + (*Response)(nil), // 2: wcf.Response + (*Empty)(nil), // 3: wcf.Empty + (*WxMsg)(nil), // 4: wcf.WxMsg + (*TextMsg)(nil), // 5: wcf.TextMsg + (*PathMsg)(nil), // 6: wcf.PathMsg + (*XmlMsg)(nil), // 7: wcf.XmlMsg + (*MsgTypes)(nil), // 8: wcf.MsgTypes + (*RpcContact)(nil), // 9: wcf.RpcContact + (*RpcContacts)(nil), // 10: wcf.RpcContacts + (*DbNames)(nil), // 11: wcf.DbNames + (*DbTable)(nil), // 12: wcf.DbTable + (*DbTables)(nil), // 13: wcf.DbTables + (*DbQuery)(nil), // 14: wcf.DbQuery + (*DbField)(nil), // 15: wcf.DbField + (*DbRow)(nil), // 16: wcf.DbRow + (*DbRows)(nil), // 17: wcf.DbRows + (*Verification)(nil), // 18: wcf.Verification + (*AddMembers)(nil), // 19: wcf.AddMembers + (*UserInfo)(nil), // 20: wcf.UserInfo + (*DecPath)(nil), // 21: wcf.DecPath + (*Transfer)(nil), // 22: wcf.Transfer + nil, // 23: wcf.MsgTypes.TypesEntry +} +var file_wcf_proto_depIdxs = []int32{ + 0, // 0: wcf.Request.func:type_name -> wcf.Functions + 3, // 1: wcf.Request.empty:type_name -> wcf.Empty + 5, // 2: wcf.Request.txt:type_name -> wcf.TextMsg + 6, // 3: wcf.Request.file:type_name -> wcf.PathMsg + 14, // 4: wcf.Request.query:type_name -> wcf.DbQuery + 18, // 5: wcf.Request.v:type_name -> wcf.Verification + 19, // 6: wcf.Request.m:type_name -> wcf.AddMembers + 7, // 7: wcf.Request.xml:type_name -> wcf.XmlMsg + 21, // 8: wcf.Request.dec:type_name -> wcf.DecPath + 22, // 9: wcf.Request.tf:type_name -> wcf.Transfer + 0, // 10: wcf.Response.func:type_name -> wcf.Functions + 4, // 11: wcf.Response.wxmsg:type_name -> wcf.WxMsg + 8, // 12: wcf.Response.types:type_name -> wcf.MsgTypes + 10, // 13: wcf.Response.contacts:type_name -> wcf.RpcContacts + 11, // 14: wcf.Response.dbs:type_name -> wcf.DbNames + 13, // 15: wcf.Response.tables:type_name -> wcf.DbTables + 17, // 16: wcf.Response.rows:type_name -> wcf.DbRows + 20, // 17: wcf.Response.ui:type_name -> wcf.UserInfo + 23, // 18: wcf.MsgTypes.types:type_name -> wcf.MsgTypes.TypesEntry + 9, // 19: wcf.RpcContacts.contacts:type_name -> wcf.RpcContact + 12, // 20: wcf.DbTables.tables:type_name -> wcf.DbTable + 15, // 21: wcf.DbRow.fields:type_name -> wcf.DbField + 16, // 22: wcf.DbRows.rows:type_name -> wcf.DbRow + 23, // [23:23] is the sub-list for method output_type + 23, // [23:23] is the sub-list for method input_type + 23, // [23:23] is the sub-list for extension type_name + 23, // [23:23] is the sub-list for extension extendee + 0, // [0:23] is the sub-list for field type_name +} + +func init() { file_wcf_proto_init() } +func file_wcf_proto_init() { + if File_wcf_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_wcf_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Empty); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TextMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PathMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*XmlMsg); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgTypes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcContact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcContacts); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbNames); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbTable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbTables); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbField); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbRow); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbRows); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Verification); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddMembers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DecPath); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_wcf_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Transfer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_wcf_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Request_Empty)(nil), + (*Request_Str)(nil), + (*Request_Txt)(nil), + (*Request_File)(nil), + (*Request_Query)(nil), + (*Request_V)(nil), + (*Request_M)(nil), + (*Request_Xml)(nil), + (*Request_Dec)(nil), + (*Request_Tf)(nil), + } + file_wcf_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*Response_Status)(nil), + (*Response_Str)(nil), + (*Response_Wxmsg)(nil), + (*Response_Types)(nil), + (*Response_Contacts)(nil), + (*Response_Dbs)(nil), + (*Response_Tables)(nil), + (*Response_Rows)(nil), + (*Response_Ui)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_wcf_proto_rawDesc, + NumEnums: 1, + NumMessages: 23, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_wcf_proto_goTypes, + DependencyIndexes: file_wcf_proto_depIdxs, + EnumInfos: file_wcf_proto_enumTypes, + MessageInfos: file_wcf_proto_msgTypes, + }.Build() + File_wcf_proto = out.File + file_wcf_proto_rawDesc = nil + file_wcf_proto_goTypes = nil + file_wcf_proto_depIdxs = nil +} diff --git a/go/wcf/wcf_test.go b/go/wcf/wcf_test.go new file mode 100644 index 0000000..ca96e08 --- /dev/null +++ b/go/wcf/wcf_test.go @@ -0,0 +1,152 @@ +package wcf + +import ( + logs "github.com/danbai225/go-logs" + "go.nanomsg.org/mangos/v3/protocol/pair1" + _ "go.nanomsg.org/mangos/v3/transport/all" + "google.golang.org/protobuf/proto" + "testing" +) + +func TestConn(t *testing.T) { + socket, err := pair1.NewSocket() + if err != nil { + logs.Err(err) + return + } + err = socket.Dial("tcp://127.0.0.1:10086") + if err != nil { + logs.Err(err) + return + } + response := Response{ + Func: Functions_FUNC_IS_LOGIN, + Msg: nil, + } + marshal, err := proto.Marshal(&response) + if err != nil { + logs.Err(err) + return + } + socket.Send(marshal) + if err != nil { + logs.Err(err) + return + } + recv, err := socket.Recv() + if err != nil { + logs.Err(err) + return + } + msg := Response{} + err = proto.Unmarshal(recv, &msg) + if err != nil { + logs.Err(err) + return + } + logs.Info(msg.GetStatus()) + +} +func TestIsLogin(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.IsLogin()) +} +func TestGetSelfWXID(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.GetSelfWXID()) +} +func TestGetMsgTypes(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.GetMsgTypes()) +} +func TestGetContacts(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + for _, contact := range wcf.GetContacts() { + logs.Info(contact.Remark, contact.Wxid) + } + logs.Info(wcf.GetContacts()) +} +func TestGetDBNames(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.GetDBNames()) +} +func TestGetDBTables(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.GetDBTables("ChatMsg.db")) +} +func TestExecDBQuery(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.ExecDBQuery("ChatMsg.db", "SELECT * FROM Name2ID_v1")) +} +func TestAcceptFriend(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.AcceptFriend()) +} +func TestGetUserInfo(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.GetUserInfo()) +} +func TestSendTxT(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.SendTxt(" Hello @ 淡白", "45415088466@chatroom", []string{"wxid_xxxxxxxx"})) +} +func TestSendIMG(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.SendIMG("C:\\Users\\danbai\\Desktop\\work\\code\\WeChatFerry-go\\图片1.png", "wxid_qvo0irhbw9fk22")) +} +func TestOnMSG(t *testing.T) { + wcf, err := NewWCF("") + if err != nil { + logs.Err(err) + return + } + logs.Info(wcf.EnableRecvTxt()) + defer wcf.DisableRecvTxt() + wcf.OnMSG(func(msg *WxMsg) { + logs.Info(msg.GetContent()) + }) +}