wechaty / dotnet-wechaty Goto Github PK
View Code? Open in Web Editor NEW.NET Wechaty is a Conversational SDK for Chatbot Makers Written in C#
License: Apache License 2.0
.NET Wechaty is a Conversational SDK for Chatbot Makers Written in C#
License: Apache License 2.0
public async Task Start()
---> OnHeartbeat(() => MemoryCheck());
There is no MemoryCheck function in your C# code
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
messagePayload() exception,messageId:
System.ArgumentException: no id
at Wechaty.Module.Puppet.WechatyPuppet.MessagePayload(String messageId)
附件demo供参考:
Program.zip
Welcome this great C# Wechaty to join the Wechaty Community, and thank you @echofool very much for the efforts of translating Wechaty from TypeScript to C#!
I have just invited you to join the Wechaty Org on GitHub, please accept my invitation by following the below message:
You've invited echofool to Wechaty! They'll be receiving an email shortly. They can also visit https://github.com/wechaty to accept the invitation.
After you join the Wechaty Org, let's start to accept this great repo to our org.
P.S. We have a WeChat Room for all Wechaty Contributors who have contributions to Wechaty, and I'd like to invite you to join. If you'd like to join the room, please contact @lijiarui so that we can add you to our contributor's list.
Link to: wechaty/wechaty#1927
我是一名大二的学生,想请教各位大佬们一个问题,由于docker在服务器上部署不了,我想在本地上搭建一个自己的js环境,利用c#去调用它去桥接让项目跑起来,就如padlocal里的写的“ 将 ts 客户端的功能进行桥接,提供给其他语言使用“,我已经根据http://pad-local.com/#/learn里的教程让demo测试跑起来了
却报了如下错误,想请求指导一下
执行加入群组操作报错:
await roomTobeAdd.Add(contact);
报错信息如下:
Grpc.Core.RpcException:“Status(StatusCode="Internal", Detail="ERR_ADD_ROOM add room member failed, error code: -2001, error message: 由于系统升级,该功能无法使用,请升级版本.")”
I'm not sure whether this reason, I am trying to make the person who not the bot's contact to join a room by scanning QR Code today, and met Wechaty.Module.Puppet.WechatyPuppet
infinite to print the following the following warning,like below
info: Wechaty.Module.Puppet.WechatyPuppet[0]
dateTime:2021-12-26 23:17:53 Dirty,PayLoad:{"payloadId":"@@ccb2cc7225adcf3bc8b94252998761af3c05b13d3966dc944c861ad131cb2a2d","payloadType":2}
warn: Wechaty.Module.Puppet.WechatyPuppet[0]
eventType Dirty unsupported! (code should not reach here)
And then the program was no any response.
能不能把*.proto文件披露下,我们可以自己实现Grpc对应的逻辑
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
StartGrpcClient() exception,Grpc Retry Surplus Count 3
System.Exception: 获取hostie gateway 对应的主机信息异常
at Wechaty.Module.PuppetService.GrpcPuppet.DiscoverHostieIp(String token) in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 74
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpcClient() in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 97
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpc() in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 322
fail: Wechaty.Wechaty[0]
start failed.
System.Exception: puppetClient had not initialized
at Wechaty.Module.PuppetService.GrpcPuppet.StopGrpcClient() in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 170
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpc() in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 337
at Wechaty.Module.Puppet.WechatyPuppet.Start() in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\modules\Wechaty.Module.Puppet\WechatyPuppet.cs:line 202
at Wechaty.Wechaty.Start() in D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\Wechaty\Wechaty.cs:line 430
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: D:\Projects\Test\dotnet-wechaty\dotnet-wechaty-net5.0\dotnet-wechaty-net5.0\src\Wechaty.Getting.Start\bin\Debug\netcoreapp5.0
假死
,处理方式:在Grpc连接中断的时候,Hostie默认会重试三次,如果三次均失败则抛出异常@群成员
能@成功 但是被@人 不会有提醒不同Puppet Serviced 对接口有支持程度不同,请查看 功能清单
What is your wechaty version?
Answer:wechaty 0.68
Which puppet are you using for wechaty? (puppeteer/padlocal/service...)
Answer:padlocal
What is your wechaty-puppet-XXX(padchat/puppeteer/) version?
Answer:wechaty-puppet-padlocal version: 0.4.2
What is your node version? (run
node --version
)
Answer:no
What os are you using
Answer: win10 home 21H1
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
StartGrpcClient() exception,Grpc Retry Surplus Count 3
Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="Error starting gRPC call. HttpRequestException:
The SSL connection could not be established, see inner exception. IOException: Cannot determine the frame size or a corrupted frame was received.", DebugException="System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.IO.IOException: Cannot determine the frame size or a corrupted frame was received.
at System.Net.Security.SslStream.ReceiveBlobAsync[TIOAdapter](TIOAdapter adapter)
1、下载dockertoolebox 18.02.0-ce.exe Index of Docker Toolbox (daocloud.io)
2、下载完成后点击Docker Quickstart Terminal,出现小鲸鱼图标,安装完成。
3、在Docker Quickstart Terminal下输入:
export WECHATY_LOG="verbose"
export WECHATY_PUPPET="wechaty-puppet-padlocal"
export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal"
export WECHATY_PUPPET_SERVICE_NO_SSL_UNSAFE_CLIENT=true
export WECHATY_PUPPET_SERVER_PORT="9001"
export WECHATY_TOKEN="token"
docker run
--name wechaty_puppet_service_token_gateway
-e WECHATY_LOG
-e WECHATY_PUPPET
-e WECHATY_PUPPET_PADLOCAL_TOKEN
-e WECHATY_PUPPET_SERVER_PORT
-e WECHATY_TOKEN
-e WECHATY_PUPPET_SERVICE_NO_SSL_UNSAFE_CLIENT
-p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT"
wechaty/wechaty:0.68
出现WeChaty图标,在浏览器中打开Url,扫码登录微信。
4、运行控制台程序,出现上述报错。
5、下面是三个测试环境的对比图,前两台电脑运行正常。
电脑1 | 电脑2 | 实验室电脑 |
---|---|---|
处理器: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 1.99 GHz 机带 RAM:8.00 GB 系统类型:64 位操作系统, 基于 x64 的处理器 | 处理器:Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz 1.80 GHz 机带 RAM:12.0 GB 系统类型 64 位操作系统, 基于 x64 的处理器 | 处理器: Pentium(R) Dual-Core CPU E5800 @ 3.20GHz 3.20 GHz 机带RAM:4GB 系统类型:64位操作系统,基于x64的处理器 |
Win10系统,Wechaty 0.68,.net 5.0,docker 4.7.0.0 | Win10系统,WeChaty 0.68,.net 5.0,docker 4.7.0.0 | Win10系统,WeChaty 0.68,.net 5.0,docker ToolBox 18.02.0-ce |
可运行 | 可运行 | 不可运行 |
I have a requirement like,
I want to save the message from specific user, and resend it to other users later, maybe repeat.
I checked existing issue and found something related like wechaty/wechaty#1857 and wechaty/wechaty#2073.
For wechaty/wechaty#1857 , I am wondering if I saved the messageId, delete the message from wechat, will it be able to load the message?
In addition, I did not see "bot.Message.load" on Wechaty.Grpc C# NUGET Version.
I am able to find the similiar method in dotnet-wechaty.
Which is the recommended way to use under C#, Wechaty.Grpc C# NUGET Version or dotnet-wechaty?
One more short issue may not be posted here, has dotnet-wechaty been published to nuget? I did not find the nuget version.
.net wechaty 启动不了,详细错误如下。
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
StartGrpcClient() exception,Grpc Retry Surplus Count 3
Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="Error starting gRPC call. HttpRequestException: The SSL connection could not be established, see inner exception. IOException: Cannot determine the frame size or a corrupted frame was received.", DebugException="System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.IO.IOException: Cannot determine the frame size or a corrupted frame was received.
at System.Net.Security.SslStream.ReceiveBlobAsync[TIOAdapter](TIOAdapter adapter)
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttp2ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at Grpc.Net.Client.Internal.GrpcCall2.RunCall(HttpRequestMessage request, Nullable
1 timeout)")
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpc()
根据社区的相同问题经验,我用过不同的镜像都实验过,还是报以上错误:
wechaty/wechaty:0.68
wechaty/wechaty:0.65
wechaty/wechaty:latest
以下是我的镜像文件
export WECHATY_PUPPET="wechaty-puppet-service"
export WECHATY_TOKEN="$1"
export WECHATY_PUPPET_SERVER_PORT="$2"
export WECHATY_LOG="verbose"
export WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER=true
export WECHATY_PUPPET_SERVICE_TOKEN="$3"
docker run -ti
--name wechaty_gateway_$1_$2
--rm
--privileged
--network=host
-e WECHATY_LOG
-e WECHATY_PUPPET
-e WECHATY_PUPPET_SERVER_PORT
-e WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER
-e WECHATY_TOKEN
-e WECHATY_PUPPET_SERVICE_TOKEN
-p $WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT
wechaty/wechaty:0.68
I have successfuly developed an application connecting to a Wechat account. I am trying to concurrently connect to 2 Wechat bots. No matter connections are in 1 process or in 2 processes on 1 machine, the following grpc errors show up several times and one of bots stops working. It looks like dotnet-wechaty does not support doing so. Is it a matter of design or is it technically possible to do so?
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
StartGrpcClient() exception,Grpc Retry Surplus Count 3
System.Exception: puppetClient had already inited
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpcClient()
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpc()
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
OnGrpcStreamEvent exception
System.InvalidOperationException: must logout first before login again!
at Wechaty.Module.Puppet.WechatyPuppet.set_SelfId(String value)
at Wechaty.Module.PuppetService.GrpcPuppet.OnGrpcStreamEvent(EventResponse event)
运行项目报错,好像跟SSL有关
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
StartGrpcClient() exception,Grpc Retry Surplus Count 3
Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="Error starting gRPC call. HttpRequestException:
The SSL connection could not be established, see inner exception. IOException: Cannot determine the frame size or a corrupted frame was received.", DebugException="System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.IO.IOException: Cannot determine the frame size or a corrupted frame was received.
at System.Net.Security.SslStream.ReceiveBlobAsync[TIOAdapter](TIOAdapter adapter)
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttp2ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage request, Nullable`1 timeout)")
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpc()
这是配置文件
WECHATY_LOG="verbose"
export WECHATY_PUPPET="wechaty-puppet-padlocal"
export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal_"
export WECHATY_PUPPET_SERVICE_NO_SSL_UNSAFE_CLIENT=true
export WECHATY_PUPPET_SERVER_PORT="9001"
export WECHATY_TOKEN="1fe5f846-3cfb-401d-b20c"
docker run \
--name wechaty_puppet_service_token_gateway-no-ssl \
-e WECHATY_LOG \
-e WECHATY_PUPPET \
-e WECHATY_PUPPET_PADLOCAL_TOKEN \
-e WECHATY_PUPPET_SERVER_PORT \
-e WECHATY_TOKEN \
-e WECHATY_PUPPET_SERVICE_NO_SSL_UNSAFE_CLIENT \
-p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT" \
wechaty/wechaty:0.56
我最近想用.NET Wechaty 来发送和接收图片,但是一直没有调通程序。
private async void OnMessage(Message message)
{
_logger.LogInformation($"wechat receive message (Age={message.Age}): {message.Text}");
if (string.IsNullOrEmpty(message.Room?.Id) && !string.IsNullOrEmpty(message.From?.Id))
{
string message_type = message.Type.ToString();
_logger.LogInformation($"message_type:{message_type}");
var message_file = await message.ToFileBox();
string name = message_file.Name;
await message_file.ToFile(name);
_logger.LogInformation($"message_type:{message_type}\r\nmessage_file_name:{name}");
}
}
但是报这个错误,
info: RobotDemo.Server.Services.WechatService[0]
message_type:Image
Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'value')
at Newtonsoft.Json.Linq.JToken.EnsureValue(JToken value)
at Newtonsoft.Json.Linq.JToken.op_Explicit(JToken value)
at Wechaty.Module.Filebox.FileBox.FromJson(String fileboxStr)
at Wechaty.Module.PuppetService.GrpcPuppet.MessageFile(String messageId)
at RobotDemo.Server.Services.WechatService.OnMessage(Message message) in /home/xdy/workspace/robotdemo/RobotDemo/Server/Services/WechatService.cs:line 109
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__140_1(Object state)
at System.Threading.QueueUserWorkItemCallback.<>c.<.cctor>b__6_0(QueueUserWorkItemCallback quwi)
at System.Threading.ExecutionContext.RunForThreadPoolUnsafe[TState](ExecutionContext executionContext, Action`1 callback, TState& state)
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
public async Task<TalkResult> SayImage(object context, string to,string path)
{
var contact = await _bot.Contact.Find(new ContactQueryFilter { Name = to });
if (contact != null)
{
_logger.LogInformation($"Found contact: {contact.Name}, send an image to him/her");
FileBox filebox_before = FileBox.FromFile(path);
string base64 = await filebox_before.ToBase64();
FileBox filebox_After = FileBox.FromBase64(base64, path);
FileBoxJsonObject jsonText = filebox_After.ToJson();
FileBox fileBox = FileBox.FromJson(jsonText);
try{
var result = await contact.Say(fileBox2);
}
catch(Exception ex)
{
_logger.LogError(ex,$"Send a file failed!\n Error:{ex.Message}");
}
return new TalkResult() { Success = true };
}
else
{
_logger.LogWarning($"Contact {to} NOT found!");
return new TalkResult() { Success = false, ErrorMessage = $"找不到{to}" };
}
}
报这个错误,
Grpc.Core.RpcException: Status(StatusCode="Unknown", Detail="Error: unknown filebox json object{type}: {"boxType":1,"base64":"iVBORw0KGgoAAAANSUhEUgAAAjIAAAEyCAAAAADFT2UYAAATv0lEQVR4Ae3Bz4r03XoQ0PXcg5BZPATMICGcwX5E1EgGgpNETtB7CMkdiOGITsRJIDPnGehEJBEVIhkoRBHy7HBECThQcjKTXMS2uqqru6rrT9evu/qrer/aa0WZpiWiTNMSUaZpiSjTtESUaVoiyjQtEWWalogyTUtEmaYlokzTElGmaYko07RElGlaIso0LRHlO5TK9I2Lcj2pnJWUj0llugdRriYpZyUjUBZJa2W6A1GuJpUz0pPRE+USaU+Z7kCUq0lDdyA9qfSkmkB5ldYqvaNMdyDK1TR0b6VXw0bPspXeMayFMt2BKFfT0L2VGALDiyhraa3Ss0oGoZp9oUx3IMrVNHRvJcNbUdLWcIlQpjsQ5WoaureS4a3g7/1z/OP/ZLhMKNMdiHI1Dd1byfBW1ywUynQHolxPozuQhisIZboDUa6moTuUwxWEMt2BKFfT6A6laj4vKNPtRbmaRncoDVcQlOn2omxk+ZykZHmW5VkariAo0+1F2cjRfUZ6q2yk4QpCme5AlGdN92HpiLKWDJ8XlOn2omxkNbqPSTsG4UlZS4bPC8p0e1G2GroPSS+qWQvKWjJcQSjT7UXZala6F2mlHJdOqGYtKGvJcAWhTLcX5UXzpNtIG2VfOmHQUzVrQVlLqvm8oEw3F+VFs9Y9SQw9vW/Y6qmajVDWfvsPVfN5QZluLsqLZqNbSQyEY4ajeqpmI5SNZPi8UKbbi7KredKRGFbCVjXv6KmajVA2kmo+LZTp9qLsatY6iWGhnqrZCOVZqubTQpluL8qzLDTPwsqwUE/VbITyLBk+LZTp9qI8y2o9h2c9rQzL9FQNHak8S6r5rFCm24uykQa9edYlhmV6+qWf+X//07Oykfyt/+qzgjLdXJSNNOzqiWGZnnaVjUQ1nxSU6eaiPMtqdvTEsFRY+6Wf+RdJefbbf6iaTwrKdHNRnqVhTzAs1a00K0F5lhg+KSjTzUXZSIY9wfBxQXmWqOZzgjLdXJRnadgTDJ8Qyov0g3/TfEpQppuL8iwNe4LhE0J5kfj5f6X5uKBMNxflWRr2BMMnhPIirf3qP2s+LJTp5qI8S8O+YPi4UHaltdJ8TCjTzUV5loZ9wfBxoexLG9V8RCjTzUXZymFfUDQfFMqBf/AXVoaPCGW6uShbOewLqvmwoBz6J/+R4SOCMt1alBfNvmD4uKAcSoYPCcp0a1F2NLuC4eOCcigZPiQo061F2dO8CoaPC8qBxPAxoUy3FuVFlpVmKxg+LigHEsPHBGW6sShbqVpH8ywYPi4ohxLDhwRlurEoW2mg02wEwyeEckQyfEhQphuL8iKr0TW9eRIMnxDKEcnwMaFMNxZlV7MjGD4hlCOS4WNCmW4syou0Mqx1WjB8QiiHEsPHhDLdWJSt9GRYC0YwfEIoh5Lhg0KZbizKVnoyrIWN4eNCOZQYPiaU6caibKVDwycE5VBaG5YLZbqxKFtpVzWfFZQj0sawUE9lurEoW8lwTUE5Im0MCwVlurEoW8lwTUE5oQXDQj2V6caibCXDNQXlhCYMS4Uy3ViUrWS4pqCc0IRhqaBMtxVlKxmuKpQTEsNSoUw3FmUrGa4qlGPSk2GxUKYbi7KVDFcVyhFpZfiAUKYbi/IiDVcVyqHf+FNU8wGhTDcW5UUariqUt/7RH+FXfqf5iFCmG4vyIg1XFZR9aaWajwllurEoL9JwVUHZ8xt/yq/8TvNBQZluK8qLVM01BWVPejEsF5TptqK8SIZrCsqu9KqaxYIy3VaUF8lwTUF5llTrVhph5Wf/bbNUKNN3qen2RXmRDFcVylZW86ynJ9UsFcr03Wg2un1RXiTDVYWylYZnPT0ZFgtl+mLNq+5AlBfJcFWhPEuGLq2UlTQsFpTpqzRH9FR2RHmVhqsKo3uWlFctDIsFZbq65rSeyo4or9JwVWF0x7UwLBaU6cqac3qWXVFepeGqQjmhBcNSQZmuptnRNUf0VHZEeZWGqwrKcS0YlgrK9HnNq47mpJ7Kjiiv0nBVweiOasGwVFCmz2gW6qnsiPIqGa4pGN1GKjtaMCwVlOlDmg8KZUeUV8lwTcHoNlLZ0YJhqVCm5ZpPCGVHlFfJcE3B6DZS2ZUMS4UyLdN8Uig7orxKhqsKo9tIyovWk2GpoEyXaa4jlB1RXiXDVYWhW0vKk2atp2GpoEzvaK4qlB1RXiXDVYWhW0sM9LQ1LBWU6aTmCwTlVZQdabiqMHRr6cCwWCjTcc2X6El5FWVHGq4qDN1a2jV8TCjTW811hbfKiyg70nBVYdA9SUao5lNCmV41VxPOKC+i7EjDVYWBjhYMnxbKtNJcRzAIO4Y3gvIiyo5kuKbevAjDp4Xy0Bq9+aSe1ayEHcMpQXkRZUcyXFNvXoTh00J5UM1n9GYjHDGcE5QXUXYk1VxfWBs+LZTH1HxYT28Mi4TyIsqOxHBN4dXweaE8mGa5nt4aPi6UF1F2JIazOs0CoZrrCcqjaJYIB4brCOVFlF3JcELHb/0J/vKnza0E5fuvuURPh4brC8pWlD2pmrc6futPvKjmVoLy/dW8KxwYvlhQtqLsSdW86vjNsusHf+5Hv+9WgvL907onzVHhiPKk+S4EZSvKnqQ0dPzWn9j11/8lWk8//IlbCcr3UPNWOKma71ZQtqLsSU/qN8uOv/avrTRrPRluJSjfJ82LTjpruI2gbEXZk974tX/qH/65XcHw5YJqDoVyL5LyUc1al84abi8oW1H2pVdlrdnVk2q+WFgZDoVyY2lHWah10nnDfempbEXZl16UjWbHD376w/+hmq8VVBoOBOU20jHlQum84Y6FshVlX1qrLC+ald6s/eAH/0U1XyowgtHTk7KSnpUbSPuqWelZzklnVPOtCGUryoFE2UrVrPRmrUvVfKVASSeUG0iqORDKgax03PBtCmUryvuaXUE1XyhQpI1KlGdJub70rByXhiNC2ZUODN++ULaivKfZ05Mf/b6vEyinJOUa0lHluDQcEYp0qJrvkaA8i/KuZleXfvgTX6Yn5culE8pRaTgivFHN91BQnkU5rdHR7OnJ8GWC8uXS1rAjKEclw6HwbPg+C8qzKKc1Opo9PRm+SqB8uWQ4FJS30sbwsILyLMoZjd680ZNqvkagfL1kOBSUjfTG8LiC8izKGY3evOoNPanmSwTlu5AMh8JJwwPrqTyLclLzRtfoiWouFIa1UM07gtF9F5LhUNgzTBuhPItySrOre5aeDJcIbwznBKP7TiTDMWGYDoTyLMoprbeORpeeFGljeFc4NJwRDN1XyZJ2DNPFQnkW5ajWraUdZS0xnNXTk0EMuuZJGM6IarrrSqcM0+WCshHlmKbbSM/KVvLDnzgjPBmedC9aGM6IQXcN6bRq9GZaJCgbUY5o3TnJcEp4Mjzp9qThjBh0H5ROq2b6nJ7KRpQDTXdWMhzV00o1dAeSgWA4IgbdYulAaaarCmUjynJJNccEqumOSi+GQ6Fad5F0aJi+TigbUZZLqjmi59Cdlp4MYTgiBt0J6aRh+mpBWYuyXFLNEaG8rwnDETHo9qSThum7E5S1KIu1oJodvfW0Vt7XhOGIGOjptGG6jaCsRVkoPRlWenqrvK8JwxExCAeG6eaCshZlmXRKuVAThiPCCFvDdEeCshZlmfTGsBaUC7UwTN+UoKxFeSuHE7qVxHAgKCelN4bpm9JTWYuyUDIcCsqrpksnDdO3paeyFmWhZDgUDE860hHD9A2LshFloWQ41NMRw/Q9EWUjykLJcER4Vs30/RPKWpQLNSudZDgqhul7K5S1KJdIu4bp4UTZiHJWoyNRrachDNPjibIR5Zj0qhrBMD2yUNaivJVeDEHJEYbpoYWyFuWtNLzqaW2YHlooa1HeSsM07QvKWpS30jBNWz1tlLUob6VhemjhmLIW5a00TN+g3nRyWCy8p7yI8lYapm9N2BqWCkeVo6K8lYbpWxO2hqO65oSwVd4X5a00TN+anio9GXb09GI4IRjdpaK8SM+G6ZsTtiodNZwQjO5SUZ6lV8P0jQmnFS2o5rhgdJeK8iy9GqZvRScdUXa1nqo5IYzuUlGeNRs9GaY7F94qZ7SeqjkhjO5SUbaajWCY7lxYK5dpPVVzQhjdpaK8aJ4Ehuk+BIYjgnK51tPf/3dOCMqlorxqVnoyTDcU9g2HQlmg9WQ4JSgXirKjoSfD9F0LJw2HQlmg9fQ3/5tTeioXirKjWQmG6bsQzigaeg5HhLJI+tt/7KRQLhRlV0NPw/QlYoQzyhE5HBHKIumHP3FSKBeKsqchDNMX6OlQeUcOO8JWWaD19HP/x0mhXCjKnoYwTF8gbJXLpePKAq0nw0mhXCjKvkYYpo/q6clwRCiLpaPKEk0wnBSUy0R5q4VqHljYGi4X9gxHhLJYWiufkEYwnBTKhaK8lRgeWNga3hVOGA5F+Ygsn5SeDCeFcqEoB5LhgYWt4ahwVHmRDIei3EZ6Us0pPcuFohxIhkcWVioZXoWjyjHJcKCnciOJak6KcqEoB5LhgYWVSmeVc5Jhq6etciuJak6KcqEoh9LwqHpaq3SoXCoNPb1VbqUF1ZwUymWiHErDIwkHirRWPiK9VVK5mRZUc1Iol4lyKFXzfRdOKp+WVsr9SFRzUiiXiXIoVfN91NMp5cqy3JPWUzUnhXKZKIeS4fskHFceRdNTNSeFcpkoh5LhGxfOKI+m6amak0K5TJRDyfAtCmeUB9b0VM1JoVwmyqFk+HaEc8okqVTNST3LZaLsSyUZ7l44pUz70pNqTotymSg70sogDPchMLzq6ahq6Kbj0pMf/b7TQrlIlB2JaoThpnq6wLCjm85I/N0/clooF4myI60MwnBL4bRqDnXTeYm/8d+dFspFouxIK4MwXE8wXCwcquakbrpA4hf/l9NCuUiUHenJ6KmaKwjPhouFjbKRDCd004USP/tTp4VykSg70ovh88LWsK9LhmNC2ZMMB7ppibQynBbKRaLsSgrJ8Hlha3gRXgxHRNmXDLu6abnEcFooF4lyRDJ8XngxuvTWcEQo+7KarW76mMRwWs9ykShHJMOn9PSs0r6ykYYjgrInq1nrpg9L/OVfcVqUi0Q5Ihk+IhyotFbeSMOhQHmj6abPSVRzWiiXiHJEMizX045C052Shldd2irT1eXP/V/VnBblIlGOScMZMRwTnhRJedJ0pyTDk7CvTNeXqOa0UC4R5Zg0HNNJT4YjQtnT6E5JR5XpKySqOS2US0Q5Jhl2hX3VHIqyr+lOS6/K9LUS1ZwWyiWiHJMMK+FQkQyHouxpdNN9SFRzWiiXiHJUequ8SoYDPcueppvuRKKa00K5RJSj0kY5JhneCJRdTTfdi0Q1p4VyiSgfkAxrPe0ou5puuheJak4L5RJRPiAdVXY13XQ/kmpO61kuEeUj0qtyXNNN9yOp5oxQLhDlIxLlvNZNdySp5oxQLhDlizTddEeSX/33zgjlAlG+RqOb7kjyK//ZGcGPfuxdUb5Go5vuSNLKGcEv/J53RfkaTTfdk+Tn/7czelLeFeVLNN10VxLDGT0p74ryJZpuuiuJ4Zy/88fKu6J8haab7ktiOKen8q4oX6HppvuSGM7p6Zd/13uifIGmm+5MopozelLeE+X6Gt10ZxLVnBOU90S5vqab7k2imnN+8c+U90S5vqab7k2imnN+/Q+U90S5vqab7k5SzTk9/ejH3hHl6ppuuj9JNWf1/IXf844oV9d00/1JqjmvZ3lHlGtruukOJdWc17O8I8q1Nd10h5Jq3hHlHVGurOmme5SqeU+Ud0S5rkY33aNUzTt6/vLvOi/KdTXddJdSNe/oqZwX5bqabrpLqZrzelLOi3JVjW66S6mad/zinynnRbmqppvuU6rmHb/+B8p5Ua6q6ab7lKp5R08/+rGzolxT0013KlXzjp5+4fecFeWamm66U6mad/SknBXlippuulepmvf81b9QzopyRU033afWUzXv+bX/oJwV5XqabrpTradq3tNTOSvK1TS66U61nqp5T0+//LvOiXI1TTfdq9ZTNe/pSTknytU03XSvWk/VvCso50S5lkY33avWUzXv6JJyTpRrabrpjqVqzgtPyjlRrqV10/1qPVVzVlDeE+VKmm66X1mpmjd6luZJT0/Ke6JcSdNN9ysrVbMjHCrvinIlrZvuWKKalZ5OKBeIMj2E9FbZSJSLRZkeQtpTNLrlokyPIZU9jW65KNODaroPiDI9qIZusSjTg2roFosyPaiGbrEo04Nq6BaLMj2qRrdYlOlRNXRLRZkeVUO3VJTpUTV0S0WZHlVDt1SU6WE1uqWiTA+roVsoyvSwGrqFokwPq6FbKMr0sBq6haJMD6uhWyjK9MAa3TJRpgfW6JaJMj2wRrdMlOmBNbplokwPrNEtE2V6ZI1ukSjTI2t0i0SZHlmjWyTK9Mga3SJRpkfW6BaJMj2yZqVbIMr00Bq6BaJMD62hWyDK9NAaugWiTA+toVsgyvTQmpXuclGmh9asdJeLMj22hu5yUabH1tBdLsr02Bq6y0WZHluz0l0syvTYmpXuYlGmx9asdBeLMj24hu5iUaYH19BdLMr04JqV7lJRpgfXrHSXijI9uGalu1SU6cE1K92lokwPr9FdKsr08Bq6C0WZHl5Dd6Eo08Nr6C4UZXp4Dd2FokwPr6G7UJRpala6i0SZpmalu0iUaWpWuotEmaZmpbtIlGlqVrqLRJmmJaJM0xJRpmmJKNO0RJRpWiLKNC0RZZqWiDJNS0SZpiX+P40WjWVy67CSAAAAAElFTkSuQmCC","metadata":{},"name":"Lab.png"}
at Function.fromJSON (file:///wechaty/node_modules/file-box/src/file-box.ts:302:15)
at messageSendFile (file:///wechaty/node_modules/wechaty-puppet-service/src/server/puppet-implementation.ts:751:37)
at Object.messageSendFile (file:///wechaty/node_modules/wechaty-puppet-service/src/auth/auth-impl-token.ts:49:18)
at handleUnary (/wechaty/node_modules/@grpc/grpc-js/src/server.ts:896:11)
at processTicksAndRejections (node:internal/process/task_queues:96:5)")
at Wechaty.Module.PuppetService.GrpcPuppet.MessageSendFile(String conversationId, FileBox file)
at Wechaty.User.Contact.Say(FileBox fileBox)
at RobotDemo.Server.Services.WechatService.SayImage(Object context, String to, String path) in /home/xdy/workspace/robotdemo/RobotDemo/Server/Services/WechatService.cs:line 162
Wechaty is used in many ChatBot projects by thousands of developers. If you want to talk with other developers, just scan the following QR Code in WeChat with secret code wechaty, join our Wechaty Developers' Home.
Scan now, because other Wechaty developers want to talk with you too! (secret code: wechaty)
https://github.com/juzibot/Welcome/wiki/Everything-about-Wechaty
.NET Wechaty 发布进展 #18
WECHATY_PUPPET_SERVICE_TOKEN
support for all our Polyglot Wechaty projects.WECHATY_PUPPET_HOSTIE_TOKEN
an alias for WECHATY_PUPPET_SERVICE_TOKEN
, and print a warning message to let the user know it was deprecated with it has been set.Learn more from wechaty/wechaty#2123
Current we have two .NET Wechaty projects related to your issue:
It would be great for our community if we can have a plan to make it clear for the developers for how to use our .NET/CSharp Wechaty.
The details are to be discussed.
Please feel free to let me know if you have any good suggestions @echofool @Jesn
Related Issues: wechaty/wechaty#2070
WECHATY_PUPPET_SERVICE_Endpoint应该填什么内容
直接使用下载的代码运行报错
fail: Wechaty.Module.Puppet.WechatyPuppet[0]
StartGrpcClient() exception,Grpc Retry Surplus Count 3
System.UriFormatException: Invalid URI: The URI scheme is not valid.
at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at System.Uri..ctor(String uriString)
at Grpc.Net.Client.GrpcChannel.ForAddress(String address, GrpcChannelOptions channelOptions)
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpcClient() in D:\Code\Git\dotnet-wechaty\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 146
at Wechaty.Module.PuppetService.GrpcPuppet.StartGrpc() in D:\Code\Git\dotnet-wechaty\src\modules\Wechaty.Module.PuppetService\GrpcPuppet.cs:line 341
According to our Wechaty Specification https://wechaty.js.org/docs/specs/wechaty:
The WECHATY_LOG
should support the values of silly
, verbose
, info
, warn
, silent
All Polyglot Wechaty should at least support the above names as an alias.
Link to wechaty/wechaty#2167
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.