Go Wechaty is a Conversational SDK for Chatbot Makers Written in Go

go-wechaty

Go Version Go Maintainability

Go Wechaty

Go Wechaty Getting Started Wechaty in Go

Connecting Chatbots

Powered by Wechaty

Wechaty is a RPA SDK for Wechat Individual Account that can help you create a chatbot in 6 lines of Go.

Voice of the Developers

"Wechaty is a great solution, I believe there would be much more users recognize it." link
— @Gcaufy, Tencent Engineer, Author of WePY

"太好用,好用的想哭"
— @xinbenlv, Google Engineer, Founder of HaoShiYou.org

"最好的微信开发库" link
— @Jarvis, Baidu Engineer

"Wechaty让运营人员更多的时间思考如何进行活动策划、留存用户,商业变现" link
— @lijiarui, Founder & CEO of Juzi.BOT.

"If you know js ... try Wechaty, it's easy to use."
— @Urinx Uri Lee, Author of WeixinBot(Python)

See more at Wiki:Voice Of Developer

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 go wechaty, join our Wechaty Go Developers' Home.

Wechaty Friday.BOT QR Code

Scan now, because other Wechaty Go developers want to talk with you too! (secret code: go wechaty)

The World's Shortest Go ChatBot: 7 lines of Code

package main

import (
	"fmt"

	"github.com/wechaty/go-wechaty/wechaty"
)

func main() {
	_ = wechaty.NewWechaty().
		OnScan(func(qrCode, status string) {
			fmt.Printf("Scan QR Code to login: %s\nhttps://wechaty.github.io/qrcode/%s\n", status, qrCode)
		}).
		OnLogin(func(user string) { fmt.Printf("User %s logined\n", user) }).
		OnMessage(func(message string) { fmt.Printf("Message: %s\n", message) }).
		Start()
}

Go Wechaty Developing Plan

We already have Wechaty in TypeScript, It will be not too hard to translate the TypeScript(TS) to Go because wechaty has only 3,000 lines of the TS code, they are well designed and de-coupled by the wechaty-puppet abstraction. So after we have translated those 3,000 lines of TypeScript code, we will almost be done.

As we have already a ecosystem of Wechaty in TypeScript, so we will not have to implement everything in Go, especially, in the Feb 2020, we have finished the @chatie/grpc service abstracting module with the wechaty-puppet-hostie implmentation.

The following diagram shows out that we can reuse almost everything in TypeScript, and what we need to do is only the block located at the top right of the diagram: Wechaty (Go).

  +--------------------------+ +--------------------------+
  |                          | |                          |
  |   Wechaty (TypeScript)   | |      Wechaty (Go)        |
  |                          | |                          |
  +--------------------------+ +--------------------------+

  +-------------------------------------------------------+
  |                 Wechaty Puppet Hostie                 |
  |                                                       |
  |                (wechaty-puppet-hostie)                |
  +-------------------------------------------------------+

+---------------------  @chatie/grpc  ----------------------+

  +-------------------------------------------------------+
  |                Wechaty Puppet Abstract                |
  |                                                       |
  |                   (wechaty-puppet)                    |
  +-------------------------------------------------------+

  +--------------------------+ +--------------------------+
  |      Pad Protocol        | |      Web Protocol        |
  |                          | |                          |
  | wechaty-puppet-padplus   | |(wechaty-puppet-puppeteer)|
  +--------------------------+ +--------------------------+
  +--------------------------+ +--------------------------+
  |    Windows Protocol      | |       Mac Protocol       |
  |                          | |                          |
  | (wechaty-puppet-windows) | | (wechaty-puppet-macpro)  |
  +--------------------------+ +--------------------------+

Example: How to Translate TypeScript to Go

There's a 100 lines class named Image in charge of downloading the WeChat image to different sizes.

It is a great example for demonstrating how do we translate the TypeScript to Go in Wechaty Way:

Image Class Source Code

If you are interested in the translation and want to look at how it works, it will be a good start from reading and comparing those two Image class files in TypeScript and Go at the same time.

To-do List

  • TS: TypeScript
  • SLOC: Source Lines Of Code

Wechaty Internal Modules

  1. Class Wechaty
  2. Class Contact
  3. Class ContactSelf
  4. Class Message
  5. Class Room
  6. Class Image
  7. Class Accessory
  8. Class Config
  9. Class Favorite
  10. Class Friendship
  11. Class MiniProgram
  12. Class RoomInvitation
  13. Class Tag
  14. Class UrlLink

Wechaty External Modules

  1. Class FileBox
  2. Class MemoryCard
  3. Class WechatyPuppet
  4. Class WechatyPuppetHostie

Usage

WIP...

Requirements

  1. Go 1.14+

Install

# go get wechaty

go get github.com/wechaty/go-wechaty

Development

make install
make test

See Also

Golang for Node.js Developer

History

master

v0.4 (Jun 19, 2020)

Go Wechaty Scala Wechaty BETA Released!

Read more from our Multi-language Wechaty Beta Release event from our blog:

v0.1 (Apr 03 2020)

  1. Welcome our second and third Go Wechaty contributors:
  2. Enable GitHub Actions
    1. Enable linting: golint
    2. Enable testing: testing
  3. Add Makefile for easy developing
  4. Re-structure module directories: from src/wechaty to wechaty
  5. Rename example bot to examples/ding-dong-bot.go

v0.0.1 (Mar 12, 2020)

  1. Project created.
  2. Welcome our first Go Wechaty contributor:

Related Projects

  • Wechaty - Conversatioanl AI Chatot SDK for Wechaty Individual Accounts (TypeScript)
  • Python Wechaty - Python WeChaty Conversational AI Chatbot SDK for Wechat Individual Accounts (Python)
  • Go Wechaty - Go WeChaty Conversational AI Chatbot SDK for Wechat Individual Accounts (Go)
  • Java Wechaty - Java WeChaty Conversational AI Chatbot SDK for Wechat Individual Accounts (Java)
  • Scala Wechaty - Scala WeChaty Conversational AI Chatbot SDK for WechatyIndividual Accounts (Scala)

Badge

Wechaty in Go

[![Wechaty in Go](https://img.shields.io/badge/Wechaty-Go-7de)](https://github.com/wechaty/go-wechaty)

Contributors

contributor contributor contributor contributor contributor contributor contributor contributor

  1. @SilkageNet - Bojie LI (李博杰)
  2. @huan - Huan LI (李卓桓)

Creators

Copyright & License

  • Code & Docs © 2020 Wechaty Contributors https://github.com/wechaty
  • Code released under the Apache-2.0 License
  • Docs released under Creative Commons

Thanks

goland.png

Comments
  • [BUG]

    [BUG]

    使用的wechaty是 docker 0.78 调用 message.Recall() ERR PuppetServiceImpl grpcError() messageRecall() rejection: Cannot read properties of undefined (reading 'clientmsgid')

  • [BUG]企微发送小程序失败

    [BUG]企微发送小程序失败

    使用企微token发送小程序失败,报错信息: rpc error: code = Internal desc = Unexpected end of JSON input go版本:1.17和1.18都试过。 发送的的schema类似如下,也试过很多其他写法,都是不行:

    schemas.MiniProgramPayload{
        Appid:       "gh_9eeb94f7c465@app",
        Description: "红荔村i",
        PagePath:    "pages/common/home/main.html",
        Title:       "红荔村i",
        Username:    "wx4c6330912e747939",
        IconUrl:     "http://wx.qlogo.cn/mmhead/Q3auHgzwzM7Uq0FZic3jTSjm07OohygOHWLSw0R2vuhpuiavApLiaBia9A/96",
        ThumbUrl:    "http://wx.qlogo.cn/mmhead/Q3auHgzwzM7Uq0FZic3jTSjm07OohygOHWLSw0R2vuhpuiavApLiaBia9A/96",
    }
    
    image
  • 写了一篇使用感受,接下来就是细致的优化啦!

    写了一篇使用感受,接下来就是细致的优化啦!

    这篇文章仅授权 wecahty


    关于 wechaty 使用一周的感受与教程

    你被骗了!!只有标题和这一句话使用中文,其他的都是英文,请手动点击翻译

    Type: Individual user
    usage mode: Store messages and manage messages
    

    How to Use

    What are you going to do

    1. Make for the company

      1. Recommend to use

        Polyglot TypeScript,JavaScript,Java,Python,Go Puppet-providers: Service, PadLocal, Xp, Wechat, Wechat4u

    2. Make it for yourself

      1. Recommend to use

        Polyglot JavaScript,Php,Python,Go Puppet-providers: Service, Xp, Wechat, Wechat4u

    3. Eazy to use

      ## Gateway
      cnpm install -g wechaty wechaty-puppet-xp
      wechaty gateway --puppet {WECHATY_PUPPET} --port {WECHATY_PUPPET_SERVER_PORT} --token {WECHATY_PUPPET_SERVICE_TOKEN} --puppet-token {WECHATY_TOKEN}
      
      ## Server
      .......
      

    How to find Problems

    1. Check the issues
    2. Chat with everyone

    example:

    Network error: https://github.com/wechaty/wechaty/issues?q=network+error
    Rpc error: https://github.com/wechaty/go-wechaty/search?q=err%3Arpc+error%3A+code+%3D+Unavailable+desc+%3D+connection&type=issues
    

    How to find Document

    Api : Message, Room, Friendship

    Polyglot : Go, Java, Python

    Puppet Providers : WeChat, XP, WeChat4U

    Puppet Services : PadLocal, WXWork

    Specifications : Wechaty, Plugin, Puppet, Service, Token, Gateway

    Quick start

    @Gateway

    ## windows puppet-xp port 30000
    
    cnpm install -g [email protected] wechaty-puppet-xp
    @wechaty gateway --puppet wechaty-puppet-xp --port 30000 --token insecure_559c97f1-c6a9-39b0-8f98-288b05f315cd --puppet-token f5c70044-42ea-12ca-ae78-b5ece72dde59
    
    ## save to bat
    

    @Server

    // 1. Viper Get config
    // 2. viper.Getstring set Arg (wechaty-puppet-xp)
    // 3. Third party robot corpus(tuling123)
    // 4. WebHook(Dingding,Telegram)
    
    // >>> config.yaml <<<
    BOT:
      CHAT: off
    Wechaty:
      WECHATY_PUPPET: wechaty-puppet-xp
    ...
    
    // >>> main.go <<<
    package main
    import (
    	"github.com/spf13/viper"
    	"github.com/wechaty/go-wechaty/wechaty"
      // ...
    )
    func init() {
    	log.SetPrefix("[WechatyBot] ") // 设置日志前缀
    	log.SetFlags(log.Ltime | log.Lshortfile)
    
    	success := "[\033[01;32m✓\033[0m] "
    	faild := "[\033[01;31m✗\033[0m] "
    	info := "[\033[01;33m➜\033[0m] "
    	rootPath, _ := os.Getwd()
    
    	viper.Set("rootPath", rootPath)
    	//...
    	if err = viper.ReadInConfig(); err != nil {
    		log.Printf("%v读取配置文件失败%v", os.Getenv("faild"), err)
    	} else {
    		viper.Set("success", success)
    		viper.Set("rootPath", rootPath)
    		//...
    	}
    }
    
    func main() {
    	Api.DingBot() // Check the dingding configuration
    		var bot = wechaty.NewWechaty(wechaty.WithPuppetOption(wp.Option{
    		Token:    viper.GetString("Wechaty.WECHATY_PUPPET_SERVICE_TOKEN"),
    		Endpoint: viper.GetString("Wechaty.URL"),
    	}))
    	// 根据观察,这里不要设置 TOKEN 了,全部用Option吧,少年
            // Token 要填写 WECHATY_PUPPET_SERVICE_TOKEN
    	bot.OnScan(onScan).
    		OnLogin(onLogin).
    		OnLogout(onLogout).
    		OnError(onError).
    		OnMessage(onMessage).
    		OnFriendship(onFriendShip)
    	bot.DaemonStart()
    }
    
    func onMessage(context *wechaty.Context, message *user.Message) {
    	if message.Self() {
    		log.Printf("%sBot Chat:%s %s \n", viper.GetString("info"), message.From().Name(), message.Text())
    	} else if message.From().ID() == viper.GetString("AdminID") {
    		if message.Text() == "chat.off" {
    			setEnv("CHAT", "off")
    		} else if message.Text() == "chat.on" {
    			setEnv("CHAT", "on")
    		} else {
    			Admin.Admin(context, message)
    		}
    	} else if message.Room() != nil {
        	if viper.GetString("CHAT") !="off"{
    				// Private.Chat(context, message)
    				message.Say(TulingBot(message.Text())) // TulingBot use tuling123 api
            log.Printf("%s%s @我了 ta 说: %s, 回复了: %s", viper.GetString("info"), message.From().Name(), message.Text(), reply)
    		}
    	} else {
    		//	如果不是群消息,那就是联系人消息
    		if viper.GetString("CHAT") !="off"{
          if string(message.Text())=="在吗?" {
            message.Say("来了老弟!")
          }
    		}
    	}
    }
    ...............
    Auth WrchatID == XRSec_MSG
    

    Debug

    1. I am using the xp protocol and go language, so I need a gateway as support. It seems that the new version of wechaty will automatically determine whether the IP of the gateway and the server is equal to the IP of the same exit. If they are equal, there is no need to open the port, and no public IP is required
    2. The new version requires TLS encryption, if you need to cancel encryption, please set WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER=true parameter @environment

    XRSec has the right to modify and interpret this article. If you want to reprint or disseminate this article, you must ensure the integrity of this article, including all contents such as copyright notice. Without the permission of the author, the content of this article shall not be modified or increased or decreased arbitrarily, and it shall not be used for commercial purposes in any way

  • web 协议 总是 提示断线

    web 协议 总是 提示断线

    亲爱的大佬,请问一下,就现在为止,该怎么搭配 purper wecahty4u 好几年没维护了,wechaty4u 搭配的是 docker 0.65版本

    最新版的 docker 镜像登录web版微信没有问题,但是 客户端提示连接失败,是否需要添加其他的参数呢?

    Python 库 试用过了,还有提示,go 库 直接丢出报错,让我这个不怎么读代码的 菜鸟来说有点难受

  • [Feature] Can ContactPayload increase the Uin field?

    [Feature] Can ContactPayload increase the Uin field?

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Please rate Feature Please consider the scope of application and the difficulty of development.

    Additional context Add any other context or screenshots about the feature request here.

  • 启动服务报错,无法获取二维码

    启动服务报错,无法获取二维码

    examples/ding-dong-bot.go

    package main
    
    import (
    	"fmt"
    	"log"
    	"time"
    
    	"github.com/wechaty/go-wechaty/wechaty"
    	wp "github.com/wechaty/go-wechaty/wechaty-puppet"
    	"github.com/wechaty/go-wechaty/wechaty-puppet/filebox"
    	"github.com/wechaty/go-wechaty/wechaty-puppet/schemas"
    	"github.com/wechaty/go-wechaty/wechaty/user"
    )
    
    func main() {
    	var bot = wechaty.NewWechaty(wechaty.WithPuppetOption(wp.Option{
    		Token: "",
    	}))
    
    	bot.OnScan(func(ctx *wechaty.Context, qrCode string, status schemas.ScanStatus, data string) {
    		fmt.Printf("Scan QR Code to login: %v\nhttps://wechaty.github.io/qrcode/%s\n", status, qrCode)
    	}).OnLogin(func(ctx *wechaty.Context, user *user.ContactSelf) {
    		fmt.Printf("User %s logined\n", user.Name())
    	}).OnMessage(onMessage).OnLogout(func(ctx *wechaty.Context, user *user.ContactSelf, reason string) {
    		fmt.Printf("User %s logouted: %s\n", user, reason)
    	})
    
    	bot.DaemonStart()
    }
    
    func onMessage(ctx *wechaty.Context, message *user.Message) {
    	log.Println(message)
    
    	if message.Self() {
    		log.Println("Message discarded because its outgoing")
    		return
    	}
    
    	if message.Age() > 2*60*time.Second {
    		log.Println("Message discarded because its TOO OLD(than 2 minutes)")
    		return
    	}
    
    	if message.Type() != schemas.MessageTypeText || message.Text() != "#ding" {
    		log.Println("Message discarded because it does not match #ding")
    		return
    	}
    
    	// 1. reply text 'dong'
    	_, err := message.Say("dong")
    	if err != nil {
    		log.Println(err)
    		return
    	}
    	log.Println("REPLY with text: dong")
    
    	// 2. reply image(qrcode image)
    	fileBox := filebox.FromUrl("https://wechaty.github.io/wechaty/images/bot-qr-code.png")
    	_, err = message.Say(fileBox)
    	if err != nil {
    		log.Println(err)
    		return
    	}
    
    	log.Printf("REPLY with image: %s\n", fileBox)
    
    	// 3. reply url link
    	urlLink := user.NewUrlLink(&schemas.UrlLinkPayload{
    		Description:  "Go Wechaty is a Conversational SDK for Chatbot Makers Written in Go",
    		ThumbnailUrl: "https://wechaty.js.org/img/icon.png",
    		Title:        "wechaty/go-wechaty",
    		Url:          "https://github.com/wechaty/go-wechaty",
    	})
    	_, err = message.Say(urlLink)
    	if err != nil {
    		log.Println(err)
    		return
    	}
    	log.Printf("REPLY with urlLink: %s\n", urlLink)
    }
    
    

    启动报错

    [root@VM-92-9-centos /data/go-wechaty/examples]# WECHATY_LOG=verbose WECHATY_PUPPET=wechaty-puppet-service WECHATY_PUPPET_SERVICE_TOKEN=puppet_wxwork_xxxx WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT=true go run ding-dong-bot.go 
    2022/05/24 11:34:15 PuppetService Start()
    2022/05/24 11:34:21 puppet start err:  PuppetService Start() rejection: discoverServiceEndPoint() err: Get "https://api.chatie.io/v0/hosties/puppet_wxwork_xxxxxxxx": http: server gave HTTP response to HTTPS client
    panic: PuppetService Start() rejection: discoverServiceEndPoint() err: Get "https://api.chatie.io/v0/hosties/puppet_wxwork_xxxxx": http: server gave HTTP response to HTTPS client
    
    goroutine 1 [running]:
    github.com/wechaty/go-wechaty/wechaty.(*Wechaty).DaemonStart(0xc0001ac240)
            /data/wechaty/go-wechaty/wechaty/wechaty.go:295 +0x126
    main.main()
            /data/wechaty/go-wechaty/examples/ding-dong-bot.go:28 +0x13f
    exit status 2
    [root@VM-92-9-centos /data/wechaty/go-wechaty/examples]# WECHATY_LOG=verbose WECHATY_PUPPET=wechaty-puppet-service WECHATY_PUPPET_SERVICE_TOKEN=puppet_wxwork_xxxxx WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT=true go run ding-dong-bot.go 
    2022/05/24 11:35:22 PuppetService Start()
    2022/05/24 11:35:28 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_HEARTBEAT payload:{"data":"wxwork event trigger heartbeat event","timeout":120000}})
    
  • add wechaty/user/images.go

    add wechaty/user/images.go

    Hi, my name is dingdayu.

    I'm not very clear about the specifications of the project, such as the title format of the PR, and how to explain the newly added incomplete other interfaces or classes, but luckily this description can be modified.

  • message.MentionText Error

    message.MentionText Error

    1MentionText 不生效问题 (怀疑是特殊字符串导致)

    快速定位

    2022/04/16 23:06:31 MentionText:[@可馨 add @Chumo(初墨)六号技师 ]
    

    完整日志

    2022/04/16 23:06:21 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_HEARTBEAT payload:{"data":"heartbeat@padlocal"}})
    2022/04/16 23:06:31 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_MESSAGE payload:{"messageId":"xxxxxxxxxxxxxxx"}})
    2022/04/16 23:06:31 PuppetService MessagePayload(xxxxxxxx))
    2022/04/16 23:06:31 PuppetService RoomMemberList(xxxxxxxxxxxxx@chatroom)
    2022/04/16 23:06:31 PuppetService ContactRawPayload(wxid_xxxxxxxxxx)
    2022/04/16 23:06:31 PuppetService RoomMemberList(xxxxxxxxxxxxx@chatroom)
    2022/04/16 23:06:31 PuppetService RoomMemberRawPayload(xxxxxxxxxxxxx@chatroom, wxid_xxxxxxxxxx)
    2022/04/16 23:06:31 PuppetService RoomMemberList(xxxxxxxxxxxxx@chatroom)
    2022/04/16 23:06:31 PuppetService ContactRawPayload(wxid_xxxxxxxxxx)
    2022/04/16 23:06:31 PuppetService RoomMemberList(xxxxxxxxxxxxx@chatroom)
    2022/04/16 23:06:31 MentionText:[@可馨 add @Chumo(初墨)六号技师 ]
    

    代码

    log.Printf("MentionText:[%s]", message.MentionText())
    
  • fix: examples maintain

    fix: examples maintain

    examples maintain

    1. fix example imports
    2. start service with using DaemonStart() instead of Start()
    3. correct if conditions return in OnMessage handler
    4. correct code fragment of replying image
    5. add code fragment of replying url link
  • [BUG] 在使用wechaty-puppet-wechat 同步通讯录时报错

    [BUG] 在使用wechaty-puppet-wechat 同步通讯录时报错

    Describe the bug 在使用wechaty-puppet-wechat 同步通讯录时报错 使用参考文章:https://wechaty.js.org/2021/04/16/go-wechaty-use-web/

    To Reproduce Steps to reproduce the behavior: 1.其他微信号主动添加微信机器人

    bot.OnFriendship(func(context *wechaty.Context, friendship *user.Friendship) { fmt.Printf("received friend event from " + friendship.Contact().Name()) if friendship.Type() == schemas.FriendshipTypeReceive { fmt.Printf("Have Friend " + friendship.Contact().Name()) err := friendship.Accept() } })

    发现Docker容器循环提示错误

    07:22:33 VERB PuppetCacheMixin dirtyPayload(Room<3>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetRoomMemberMixin roomMemberPayloadDirty(@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetCacheMixin __dirtyPayloadAwait(RoomMember<4>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetCacheMixin dirtyPayload(RoomMember<4>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetCacheMixin onDirty(RoomMember<4>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB EventStreamManager grpcEmit(EVENT_TYPE_DIRTY[27], {"payloadId":"@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b","payloadType":4})
    07:22:33 VERB PuppetContactMixin contactPayloadDirty(@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetCacheMixin __dirtyPayloadAwait(Contact<2>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetCacheMixin dirtyPayload(Contact<2>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    07:22:33 VERB PuppetCacheMixin onDirty(Contact<2>, @@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b)
    
    2021/11/18 15:23:40 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_DIRTY payload:{"payloadId":"@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b","payloadType":2}})
    2021/11/18 15:23:40 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_DIRTY payload:{"payloadId":"@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b","payloadType":2}})
    2021/11/18 15:23:40 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_DIRTY payload:{"payloadId":"@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b","payloadType":2}})
    2021/11/18 15:23:40 PuppetService onGrpcStreamEvent({type:EVENT_TYPE_DIRTY payload:{"payloadId":"@@819dc5a932922d0XXXXX1237552f59973f173c11904dca2312d7509936a8b","payloadType":2}})
    
  • [Feature]Add grpc.default_authority option for authorization

    [Feature]Add grpc.default_authority option for authorization

    Is your feature request related to a problem? Please describe. Some gRPC server use token to identify the current user in the same service port.

    Describe the solution you'd like add grpc.default_authority option to grpc channel

    see: https://github.com/wechaty/wechaty-puppet-hostie/pull/78

  • 升级 v0.4.x 注意事项

    升级 v0.4.x 注意事项

    从低版本升级到 v0.4.x 的注意事项

    • go-wecahty v0.4.x 可以搭配镜像 wechaty/wechaty:0.78 或 wechaty/wechaty:1.19+ 使用
    • 优化了 filebox 设计,修改了 filebox 一些方法的签名,如果升级后编译不通过,不要惊慌,根据编译器提示更改即可(0.x版本非最终确定版本,所以随着使用会重构掉之前不合理的设计)
  • Create our first Go Wechaty Puppet Provider

    Create our first Go Wechaty Puppet Provider

  • Need a boost ? [Feature]

    Need a boost ? [Feature]

    It seems from README that wechaty-puppet used by go-wechaty are all outdated, and as per commit logs and #74, no attempts had been made to incorporated the current/new wechaty-puppets. I.e., it seems the project died after the wechaty-puppet-padplus had died, which is what I really don't want to see.

    Describe the solution you'd like A clear and concise description of what you want to happen.

    看一下这个 https://github.com/wechaty/summer-of-wechaty/issues

    这个是目前其他的mentor已经发出来的project,在我看来,go wechaty的功能迫切需要完善,这同一个项目里面不要说放一两个学生,我觉得就是放上十几个也没问题,他们都是在做同一个项目,只不过分别到具体的方面不一样 具体到这个特别的项目,分工如何,看什么做了,什么还没做,指导我都不行,不过我可以在具体的某一些点上做一些帮助。比如,只是说比如,我可以帮着做基于go 的 unit test 框架,不过还是那点,让我做框架设计肯定不行,我能帮到的就是在大的框架结构下面做一些具体的工作

  • A JavaScript interpreter in Go (golang)

    A JavaScript interpreter in Go (golang)

    https://github.com/robertkrimen/otto

    It seems very interesting...

    Run JavaScript inside Go!

    vm := otto.New()
    vm.Run(`
        abc = 2 + 2;
        console.log("The value of abc is " + abc); // 4
    `)
    

    Run Go inside JavaScript!

    vm.Set("sayHello", func(call otto.FunctionCall) otto.Value {
        fmt.Printf("Hello, %s.\n", call.Argument(0).String())
        return otto.Value{}
    })
    
    vm.Set("twoPlus", func(call otto.FunctionCall) otto.Value {
        right, _ := call.Argument(0).ToInteger()
        result, _ := vm.ToValue(2 + right)
        return result
    })
    
    result, _ = vm.Run(`
        sayHello("Xyzzy");      // Hello, Xyzzy.
        sayHello();             // Hello, undefined
    
        result = twoPlus(2.0); // 4
    `)
    
  • About go.sum file submit repository

    About go.sum file submit repository

    We continue to discuss whether go.sum is submitted to the repository.

    I suggest to submit this file.

    As @eslizn quoted Go official discussion on this issue: https://github.com/golang/go/wiki/Modules#releasing-modules-all-versions

    Related documents:

    submit go.sum the reason:

    • reliance on version unification.
    • Provide package management dependent content verification in a distributed environment

    Many open source projects are like this.

Nextengine-sdk-go: the NextEngine SDK for the Go programming language

NextEngine SDK for Go nextengine-sdk-go is the NextEngine SDK for the Go programming language. Getting Started Install go get github.com/takaaki-s/nex

Dec 7, 2021
Commercetools-go-sdk is fork of original commercetools-go-sdk

commercetools-go-sdk The Commercetools Go SDK is automatically generated based on the official API specifications of Commercetools. It should therefor

Dec 13, 2021
Sdk-go - Go version of the Synapse SDK

synapsesdk-go Synapse Protocol's Go SDK. Currently in super duper alpha, do not

Jan 7, 2022
Redash-go-sdk - An SDK for the programmatic management of Redash, in Go
Redash-go-sdk - An SDK for the programmatic management of Redash, in Go

Redash Go SDK An SDK for the programmatic management of Redash. The main compone

Dec 13, 2022
Go written SDK for Notion.so API

go-notion Go written Notion SDK. Note: The Notion API is in beta phase Supported APIs It supports all APIs for Notion API (as for 2021-05-15). Blocks

Dec 10, 2021
Inofficial SDK for gameanalytics written in Golang

gameanalytics-go gameanalytics-go is an inofficial sdk for gameanalytics which is written in go. It currently can send the following events: Business

Sep 3, 2022
AWS SDK for the Go programming language.

AWS SDK for Go aws-sdk-go is the official AWS SDK for the Go programming language. Checkout our release notes for information about the latest bug fix

Dec 31, 2022
A Facebook Graph API SDK For Go.

A Facebook Graph API SDK In Golang This is a Go package that fully supports the Facebook Graph API with file upload, batch request and marketing API.

Dec 12, 2022
A Golang SDK for Medium's OAuth2 API

Medium SDK for Go This repository contains the open source SDK for integrating Medium's OAuth2 API into your Go app. Install go get github.com/Medium/

Nov 28, 2022
MinIO Client SDK for Go

MinIO Go Client SDK for Amazon S3 Compatible Cloud Storage The MinIO Go Client SDK provides simple APIs to access any Amazon S3 compatible object stor

Dec 29, 2022
Simple no frills AWS S3 Golang Library using REST with V4 Signing (without AWS Go SDK)

simples3 : Simple no frills AWS S3 Library using REST with V4 Signing Overview SimpleS3 is a golang library for uploading and deleting objects on S3 b

Nov 4, 2022
Twilight is an unofficial Golang SDK for Twilio APIs
Twilight is an unofficial Golang SDK for Twilio APIs

Twilight is an unofficial Golang SDK for Twilio APIs. Twilight was born as a result of my inability to spell Twilio correctly. I searched for a Twillio Golang client library and couldn’t find any, I decided to build one. Halfway through building this, I realized I had spelled Twilio as Twillio when searching for a client library on Github.

Jul 2, 2021
Wechat Pay SDK(V3) Write by Go.

WechatPay GO(v3) Introduction Wechat Pay SDK(V3) Write by Go. API V3 of Office document is here. Features Signature/Verify messages Encrypt/Decrypt ce

May 23, 2022
An easy-to-use unofficial SDK for Feishu and Lark Open Platform

go-lark go-lark is an easy-to-use unofficial SDK for Feishu and Lark Open Platform. go-lark implements messaging APIs, with full-fledged supports on b

Jan 2, 2023
A go SDK for the data available via data.gov.gr

go-data-gov-gr-sdk A Go based SDK to access the public data provided by the Greek Government and are available at https://www.data.gov.gr/ Quick Start

Jan 24, 2022
weixin/wechat/微信公众平台/微信企业号/微信商户平台/微信支付 go/golang sdk
weixin/wechat/微信公众平台/微信企业号/微信商户平台/微信支付 go/golang sdk

wechat SDK for golang https://github.com/chanxuehong/wechat 招人啦 golang 后端的坑, 趣头条集团下面的创新团队, 现在步入正常轨道了, 前景很好. 要求: golang中高级 自驱、有责任心 沟通没有问题 待遇: open, 看能力

Dec 30, 2022
SDK for Yigim Payment Gateway

Yigim gateway SDK The package provides ability to access the Yigim payment's api via the Go language. Usage To install run: go get github.com/paladium

Oct 5, 2021
DipDup Golang SDK

General instruments for DipDup in golang

Dec 14, 2022
Unofficial SDK of official notion API in Go

notion-go A go client for the Notion API Description This aims to be an unofficial Go version of the official SDK which is written in JavaScript. Inst

May 12, 2022