Giter Club home page Giter Club logo

dotnet-wechaty's People

Contributors

bruceqiu1996 avatar echofool avatar huan avatar jesn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dotnet-wechaty's Issues

Wechaty class error

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

Great to see the DotNet Wechaty onboard!

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

在本地搭建js环境,让c#调用,从而使得wechaty跑起来

我是一名大二的学生,想请教各位大佬们一个问题,由于docker在服务器上部署不了,我想在本地上搭建一个自己的js环境,利用c#去调用它去桥接让项目跑起来,就如padlocal里的写的“ 将 ts 客户端的功能进行桥接,提供给其他语言使用“,我已经根据http://pad-local.com/#/learn里的教程让demo测试跑起来了
2 W$(Y{Z3@ K6L)Q8YN9STV

却报了如下错误,想请求指导一下

2HRI35XDRD T{N{ 0FBXE2C

Question about eventType Dirty in gRPC

Wechat Versions

  • Wechaty docker version: latest
  • WECHATY_PUPPET: wechaty-puppet-wechat

The Bug

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.

System.Exception: 获取hostie gateway 对应的主机信息异常

能不能把*.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

.NET Wechaty 发布进展

Alpha Test Release

基础功能测试

功能清单

已知问题

  • Grpc服务器会突然中断,造成程序假死,处理方式:在Grpc连接中断的时候,Hostie默认会重试三次,如果三次均失败则抛出异常
  • FileBox Stream目前还没更新
  • 【Rock】富文本发送消息后,没有返回MessageId,无法知道是否发送成功
  • @群成员 能@成功 但是被@人 不会有提醒
  • 【Rock】发送动图目前是以文件的形式发送(Rock),待Rock Puppet Service完善, Dount没有测试
  • 【Rock】MessageImage()富文本name中没有返回文件的后缀名,无法知道文件的类型 #rock-pr-59discussion 讨论相关专区
  • 【Rock】发送多媒体信息,不知道文件后缀名称,在wechat上无法正常显示,需要在MessageFileAsync 返回的data中添加文件后缀名

不同Puppet Serviced 对接口有支持程度不同,请查看 功能清单

消息

  • 收发文本
  • 收发个人名片
  • 收发图文链接
  • 发送图片、文件
  • 接收图片、文件
  • 发送视频
  • 接收视频
  • 发送小程序
  • 接收动图
  • 发送动图
  • 接收语音消息
  • 发送语音消息
  • 转发文本
  • 转发图片
  • 转发图文链接
  • 转发音频
  • 转发视频
  • 转发文件
  • 转发动图
  • 转发小程序

群组

  • 创建群聊
  • 设置群公告
  • 获取群公告
  • 群二维码
  • 拉人进群
  • 踢人出群
  • 退出群聊
  • 改群名称
  • 入群事件
  • 离群事件
  • 群名称变更事件
  • @群成员
  • 群列表
  • 群成员列表
  • 群详情

联系人

  • 修改备注
  • 添加好友
  • 自动通过好友
  • 好友列表
  • 好友详情

其他

  • 登录事件
  • 扫码状态
  • 登出事件
  • 主动退出登录

The SSL connection could not be established-WeChaty 0.68, C#SDK

1. Versions

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

2. Describe the bug

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)

3. To Reproduce

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
可运行 可运行 不可运行

Save the message and resend later

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.

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

.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, Nullable1 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

Grpc errors while concurrently connecting to 2 Wechat bots in 1 process or in 2 processes on 1 machine

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)

HttpRequestException: The SSL connection could not be established, see inner exception.

运行项目报错,好像跟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 来发送和接收图片,但是一直没有调通程序。

这是我在OnMessage里写的接收图片的代码,

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":"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","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

.NET Wechaty Contributors 招募

join us

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.

Wechaty Friday.BOT QR Code
Scan now, because other Wechaty developers want to talk with you too! (secret code: wechaty)

Everything about Wechaty

https://github.com/juzibot/Welcome/wiki/Everything-about-Wechaty

.NET Wechaty Development Progress

.NET Wechaty 发布进展 #18

Support WECHATY_PUPPET_SERVICE_TOKEN

  1. Add WECHATY_PUPPET_SERVICE_TOKEN support for all our Polyglot Wechaty projects.
  2. Make 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

How to deal with our two .NET/CSharp Wechaty project

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应该填什么内容

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.