wechat-go, go Web API 和消息框架构建微信机器人

分享于 

7分钟阅读

GitHub

  繁體 雙語
go version wechat web api and message framework for building chat bot
  • 源代码名称:wechat-go
  • 源代码网址:http://www.github.com/songtianyi/wechat-go
  • wechat-go源代码文档
  • wechat-go源代码下载
  • Git URL:
    git://www.github.com/songtianyi/wechat-go.git
    Git Clone代码到本地:
    git clone http://www.github.com/songtianyi/wechat-go
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/songtianyi/wechat-go
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    微信

    Build StatusJoin the chat at https://gitter.im/wechat-go/LobbyGo Report Cardcodebeat badgelicense

    • 支持多用户( 多开)
    • 对于加载的插件,使用机器人的终端用户可以通过微信聊天界面动态开启/关闭。
    • 可以发送图片/文字/gif/视频/表情等多种消息
    • 支持Linux/MacOSX/Windows, 树莓派也可以:)

    
    mkdir -p $GOPATH/src/golang.org/x
    
    
    cd $GOPATH/src/golang.org/x
    
    
    git clone https://github.com/golang/net.git
    
    
    
    go get -u -v github.com/songtianyi/wechat-go
    
    
    cd $GOPATH/src/github.com/songtianyi/wechat-go
    
    
    go get./...
    
    
    
    

    linux/mac
    
    go build examples/linux/terminal_bot.go
    
    
    ./terminal_bot
    
    
    
    
    Windows
    
    GOOS=windows GOARCH=amd64 go build examples/windows/windows_bot.go
    
    
    ./windows_bot.exe
    
    
    扫码图片需要用软件打开,路径在输出日志内.
    
    
    
    

    • 只需少量代码即可基于wechat-go创建一个属于自己的个性化机器人,对于更复杂的需求( 扫码页面等) 可以使用go-aida
    • wechat-go专注在API的稳定性/框架的易用性/通用插件这三方面

    package mainimport (
     "github.com/songtianyi/rrframework/logs""github.com/songtianyi/wechat-go/plugins/wxweb/faceplusplus""github.com/songtianyi/wechat-go/plugins/wxweb/gifer""github.com/songtianyi/wechat-go/plugins/wxweb/replier""github.com/songtianyi/wechat-go/plugins/wxweb/switcher""github.com/songtianyi/wechat-go/wxweb")funcmain() {
     // 创建session, 一个session对应一个机器人// 二维码显示在终端上session, err:= wxweb.CreateSession(nil, nil, wxweb.TERMINAL_MODE)
     if err!= nil {
     logs.Error(err)
     return }
     // 注册插件, 所有插件默认是开启的 faceplusplus.Register(session)
     replier.Register(session)
     switcher.Register(session)
     gifer.Register(session)
     // 你也可以自己选择关闭插件里的handler(消息处理器) session.HandlerRegister.DisableByName("faceplusplus")
     // 登录并接收消息iferr:= session.LoginAndServe(false); err!= nil {
     logs.Error("session exit, %s", err)
     }
    }

    交换机
    
    #关闭某个插件, 在微信聊天窗口输入
    
    
    disable faceplusplus
    
    
    #开启某个插件, 在微信聊天窗口输入
    
    
    enable faceplusplus
    
    
    #查看所有插件信息, 在微信聊天窗口输入
    
    
    dump
    
    
    
    
    faceplusplus gifer 应答者 laosj
     
    美女
    
    
    
     
    小丑
     
    笑话
    
    
    
     
    吊销者

    消息撤回插件,3s后自动撤回手机端所发的文本消息。机器人发出的消息需要自己在对应插件里写撤回逻辑。

    系统 转发器

    消息跨群转发,在插件里修改群名的全拼即可。

    youdao

    中英互译插件,基于有道翻译API

    验证 共享 配置
    
    set config key value
    
    
    
    
     
    get config key
    
    
    
     
    import"github.com/songtianyi/wechat-go/kv"funcdemo() {
     kv.KVStorageInstance.Set("key", "value")
     v:= kv.KVStorageInstance.Get("key")
     if v == nil {
     return }
     // v.(string) etc.}

    • 一个插件只完成一个功能,不在一个插件里加入多个handler
    package demo // 以插件名命令包名import (
     "github.com/songtianyi/rrframework/logs"// 导入日志包"github.com/songtianyi/wechat-go/wxweb"// 导入协议包)// 必须有的插件注册函数// 指定session, 可以对不同用户注册不同插件funcRegister(session *wxweb.Session) {
     // 将插件注册到session// 第一个参数: 指定消息类型, 所有该类型的消息都会被转发到此插件// 第二个参数: 指定消息处理函数, 消息会进入此函数// 第三个参数: 自定义插件名,不能重名,switcher插件会用到此名称 session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "textdemo")
     // 开启插件iferr:= session.HandlerRegister.EnableByName("textdemo"); err!= nil {
     logs.Error(err)
     }
    }// 消息处理函数funcdemo(session *wxweb.Session, msg *wxweb.ReceivedMessage) {
     // 可选: 可以用contact manager来过滤, 比如过滤掉没有保存到通讯录的群// 注意,contact manager只存储了已保存到通讯录的群组contact:= session.Cm.GetContactByUserName(msg.FromUserName)
     if contact == nil {
     logs.Error("ignore the messages from", msg.FromUserName)
     return }
     // 可选: 根据消息类型来过滤if msg.MsgType == wxweb.MSG_IMG {
     return }
     // 可选: 根据wxweb.User数据结构中的数据来过滤if contact.PYQuanPin!= "songtianyi" {
     // 比如根据用户昵称的拼音全拼来过滤return }
     // 可选: 过滤和自己无关的群组消息if msg.IsGroup && msg.Who!= session.Bot.UserName {
     return }
     // 取出收到的内容// 取text logs.Info(msg.Content)
     ////取img//if b, err := session.GetImg(msg.MsgId); err == nil {// logs.Debug(string(b))//}// anything// 回复消息// 第一个参数: 回复的内容// 第二个参数: 机器人ID// 第三个参数: 联系人/群组/特殊账号ID session.SendText("plugin demo", session.Bot.UserName, wxweb.RealTargetUserName(session, msg))
     // 回复图片和gif 参见wxweb/session.go}


    WEB    API  构建  版本  Building  
    相关文章