#开源项目#wechat-go 微信机器人/web 协议 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
spice630
V2EX    分享创造

#开源项目#wechat-go 微信机器人/web 协议

  •  
  •   spice630 2017 年 4 月 21 日 14043 次点击
    这是一个创建于 3197 天前的主题,其中的信息可能已经有所发展或是发生改变。

    wechat-go

    https://github.com/songtianyi/wechat-go

    go 版本 wechat web api , 十分欢迎 gopher 参与开发更多有趣实用的插件。同时求一个前端,写两个页面给普通用户使用。

    • 支持多用户(多开)
    • 防掉线
    • 功能以插件的形式提供,可以根据用户(比如付费情况)选择加载或者不加载某插件
    • 对于加载的插件, 用户可以通过微信动态开启 /关闭.
    • 目前已提供头像识别, gif 搜索, 笑话大全, 阅后即焚等多个有趣插件
    • 插件编写简单
    • 可以发送图片 /文字 /gif 等多种消息

    Install

    go get -u -v github.com/songtianyi/wechat-go 

    golang.org/x dep install

    mkdir $GOPATH/src/golang.org/x cd $GOPATH/src/golang.org/x git clone https://github.com/golang/net.git git clone https://github.com/golang/text.git 

    Demo project

    go-aida

    Example code

    Create your own chatbot
    package main import ( "github.com/songtianyi/rrframework/logs" "github.com/songtianyi/wechat-go/plugins/faceplusplus" "github.com/songtianyi/wechat-go/wxweb" "github.com/songtianyi/wechat-go/plugins/wxweb/gifer" "github.com/songtianyi/wechat-go/plugins/wxweb/replier" "github.com/songtianyi/wechat-go/plugins/wxweb/switcher" ) func main() { // create session session, err := wxweb.CreateSession(nil, nil, wxweb.TERMINAL_MODE) if err != nil { logs.Error(err) return } // add plugins for this session, they are disabled by default faceplusplus.Register(session) replier.Register(session) switcher.Register(session) gifer.Register(session) // enable plugin session.HandlerRegister.EnableByName("switcher") session.HandlerRegister.EnableByName("faceplusplus") if err := session.LoginAndServe(); err != nil { logs.Error("session exit, %s", err) } } 

    Plugins

    switcher

    一个管理插件的插件

    #关闭某个插件, 在微信聊天窗口输入 disable faceplusplus #开启某个插件, 在微信聊天窗口输入 enable faceplusplus #查看所有插件信息, 在微信聊天窗口输入 dump 
    faceplusplus

    对收到的图片做面部识别,返回性别和年龄

    gifer

    以收到的文字消息为关键字做 gif 搜索,返回 gif 图, 注意返回的 gif 可能尺度较大,比如文字消息中包含“污”等关键词。

    replier

    对收到的文字 /图片消息,做自动应答,回复固定文字消息

    laosj

    随机获取一张美女图片, 在聊天窗口输入

    美女 
    joker

    获取一则笑话, 在聊天窗口输入

    笑话 
    revoker

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

    制作自己插件

    package demo // 以插件名命令包名 import ( "github.com/songtianyi/rrframework/logs" // 导入日志包 "github.com/songtianyi/wechat-go/wxweb" // 导入协议包 ) // 必须有的插件注册函数 // 指定 session, 可以对不同用户注册不同插件 func Register(session *wxweb.Session) { // 将插件注册到 session // 第一个参数: 指定消息类型, 所有该类型的消息都会被转发到此插件 // 第二个参数: 指定消息处理函数, 消息会进入此函数 // 第三个参数: 自定义插件名,不能重名, switcher 插件会用到此名称 session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "textdemo") // 可以多个个消息类型使用同一个处理函数,也可以分开 session.HandlerRegister.Add(wxweb.MSG_IMG, wxweb.Handler(demo), "imgdemo") } // 消息处理函数 func demo(session *wxweb.Session, msg *wxweb.ReceivedMessage) { // 可选:避免此插件对所有群 /联系人生效 可以用 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 } 

    Show

    example

    第 1 条附言    2017 年 4 月 21 日

    抱歉,上面的example code 没及时更新,有编译错误,更正为:

    package main import ( "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" ) func main() { // create session session, err := wxweb.CreateSession(nil, nil, wxweb.TERMINAL_MODE) if err != nil { logs.Error(err) return } // add plugins for this session, they are disabled by default faceplusplus.Register(session) replier.Register(session) switcher.Register(session) gifer.Register(session) // enable plugin session.HandlerRegister.EnableByName("switcher") session.HandlerRegister.EnableByName("faceplusplus") if err := session.LoginAndServe(false); err != nil { logs.Error("session exit, %s", err) } } 

    更多代码参见 demo project:https://github.com/songtianyi/go-aida/tree/master/demo

    第 2 条附言    2017 年 4 月 21 日
    已加入 travis 持续集成工具,不会再出现编译问题了,不过依赖包确实有点多,网络不通畅可能会比较烦。。
    第 3 条附言    2017 年 4 月 22 日
    欢迎提 issue 和 pr 。
    目前只有我一个 commiter ,会优先考虑广泛的需求。
    第 4 条附言    2017 年 5 月 8 日
    update 2017-05-08
    改用 vendor 管理依赖
    第 5 条附言    2017 年 5 月 10 日
    update 2017-05-08
    1. fix issue #4
    2. 移除 vendor,issue 都解决之后发第一个版本 release
    第 6 条附言    2017 年 5 月 11 日
    update 20-17-05-11
    fix issue #3 修复了一个在树莓派上运行出错的 bug
    第 7 条附言    2017 年 5 月 12 日
    update 2017-05-12
    第一个 release ~~
    https://github.com/songtianyi/wechat-go/releases
    第 8 条附言    2017 年 5 月 12 日
    update 2017-05-12
    添加 消息跨群转发 插件 forwarder
    第 9 条附言   2017 年 5 月 17 日
    第 10 条附言    2017 年 5 月 18 日
    update 2017-05-18
    新增中英互译插件,基于有道翻译 API:)可以撩外国妹纸撩撩撩。。
    94 条回复    2019-06-19 17:32:07 +08:00
    missdeer
        1
    missdeer  
       2017 年 4 月 21 日
    终于有 go 版本的来了
    spice630
        2
    spice630  
    OP
       2017 年 4 月 21 日   1
    @missdeer 好久了,但是一直不完善,最近几天完善了很多,主要是支持多开,然后插件化管理了,方便二次开发。
    cccssss
        3
    cccssss  
       2017 年 4 月 21 日
    恕我愚钝, go get 一溜遍,然后复制粘贴 demo 到 main.go

    然后 go run ,出来一个
    "github.com/songtianyi/wechat-go/plugins/faceplusplus" 找不到

    好先屏蔽,然后再运行
    .\main.go:31: not enough arguments in call to session.LoginAndServe
    have ()
    want (bool)

    好吧,加个 false
    出来一堆不知道什么东西

    然后就没有然后了,楼主你确定没闹?
    ob
        4
    ob  
       2017 年 4 月 21 日 via Android
    想知道防掉线是怎么实现的?
    心跳包检测地址那么多个,发现一直只有一个能用,如何第一个检测失败,后面的也一定失败。
    然后只能重新登录。
    spice630
        5
    spice630  
    OP
       2017 年 4 月 21 日
    @ob
    你说的是 synccheck 地址?每次会遍历所有(任何一个能用就 ok )。
    防掉线其实就是有异常 用历史 cookie 等信息重新登录。
    spice630
        6
    spice630  
    OP
       2017 年 4 月 21 日
    @cccssss
    很抱歉, example code 没及时更新,以后我会注意。
    demo project 可以直接编译运行,因为每次更新我都会重编它,有时候会忘记更新 README
    spice630
        7
    spice630  
    OP
       2017 年 4 月 21 日
    @cccssss
    已 APPEND 正确代码, github 已同步更新。
    spice630
        8
    spice630  
    OP
       2017 年 4 月 21 日
    已加入 travis 持续集成工具,不会再出现编译问题了,不过依赖包确实有点多,网络不通畅可能会比较烦。。
    buf1024
        9
    buf1024  
       2017 年 4 月 21 日
    微信的通讯协议自己破解的?
    spice630
        10
    spice630  
    OP
       2017 年 4 月 21 日
    @buf1024
    web 协议,人人都能看到的,模拟网页版。
    zhaolion
        11
    zhaolion  
       2017 年 4 月 21 日
    使用一点基本的依赖管理吧, go vendor 已经有一些能用的了,至少不会让开发一开始就一脸蒙蔽的去 go get
    blackFool
        12
    blackFool  
       2017 年 4 月 21 日
    最多多少钱不掉线,是可以一直不掉线吗?
    yangxuan8282
        13
    yangxuan8282  
       2017 年 4 月 22 日
    好像类似 itchat? 能不能把二维码发送到邮箱,然后在邮箱那边扫码登录
    spice630
        14
    spice630  
    OP
       2017 年 4 月 22 日
    @zhaolion
    嗯,有时间加上。我个人一直不喜欢加这些东西,强迫自己保证所有软件兼容,哈哈。
    spice630
        15
    spice630  
    OP
       2017 年 4 月 22 日
    @yangxuan8282
    嗯,是 go 版本的 itchat 。可以做到,在什么情况下需要这样?目前想做个网页版扫码。
    spice630
        16
    spice630  
    OP
       2017 年 4 月 22 日
    @blackFool
    我自己运行过几个小时吧,具体的没测试过,手机版网络掉线会影响到 bot 。而且腾讯的反 robot 机制也很厉害,可能会强制重登。
    spice630
        17
    spice630  
    OP
       2017 年 4 月 22 日
    @yangxuan8282
    目前只有我一个 commiter 所以会优先考虑必要的功能,有需求可以提 issue/pr 。
    ob
        18
    ob  
       2017 年 4 月 22 日 via Android
    @spice630 对, synccheck 。
    我知道有好多地址可以遍历,但是我发现如果第一个失败,你接下来遍历的结果都是失败(遍历的地址我也是抓最新的那几个)
    所以感觉地址加那么多个没啥用,就
    wx2.push.qq.com 一个就够了。
    不知道地址有没有记对。
    ob
        19
    ob  
       2017 年 4 月 22 日 via Android
    @blackFool 试过几天没掉。
    junred
        20
    junred  
       2017 年 4 月 22 日
    我现在一直在琢磨着 py 版本的~

    网页版接口限制比较多,掉线比较正常~
    yangxuan8282
        21
    yangxuan8282  
       2017 年 4 月 22 日
    @spice630 用途类似这个 drone ci 的插件: https://github.com/appleboy/drone-line ,.drone.yml 里填写邮箱,然后发二维码到邮箱扫码登录,等 build 完 docker 镜像给微信号发个通知,不过这样可能每次都要扫码,如果能扫一次然后就保存登录状态就好了
    spice630
        22
    spice630  
    OP
       2017 年 4 月 22 日
    @ob
    怎么会?
    我印象中是 wx.push.qq.com
    今天不掉应该算是不错的了
    spice630
        23
    spice630  
    OP
       2017 年 4 月 22 日
    @junred
    py 版本比我这个成熟,起码稳定性要高,我现在还没到追求稳定性那个 阶段。
    spice630
        24
    spice630  
    OP
       2017 年 4 月 22 日
    @yangxuan8282
    只用扫一次,至于掉不掉要看代码是否有问题和腾讯的反 robot 机制了。
    spice630
        25
    spice630  
    OP
       2017 年 4 月 22 日
    @yangxuan8282
    line 不错 啊,还专门把 api 开放了。
    yangxuan8282
        26
    yangxuan8282  
       2017 年 4 月 22 日
    @spice630 嗯, telegram 好像也有官方的 api ,微信比较封闭
    HanSonJ
        27
    HanSonJ  
       2017 年 4 月 22 日
    搭车推广 https://github.com/hanson/vbot

    想问问楼主所说的防掉线是怎样的一个思路?
    spice630
        28
    spice630  
    OP
       2017 年 4 月 22 日
    @HanSonJ
    防掉线就是利用历史信息,省掉扫码的步骤,重新登录。
    buf1024
        29
    buf1024  
       2017 年 4 月 22 日
    @spice630 web 协议的相关代码可能需要更新一下哦,我测试一下,在 WebNewLoginPage 的请求中,应答报文,并非是易<error>为根节点的 xml 数据,而是“<script>window.location.href="https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?fun=old&lang=zh_CN&scan=1492832403&ticket=A8tgH5hhPC2NuYYHLo8AapBB%40qrticket_0&uuid=wZKWg0iSWg%3D%3D"</script>”类似这样的页面刷新哦。
    welsmann
        30
    welsmann  
       2017 年 4 月 22 日
    aida....
    HanSonJ
        31
    HanSonJ  
       2017 年 4 月 22 日
    @spice630 #28 那只是通过 cookie 免扫码登录,不算防掉线
    Orlion
        32
    Orlion  
       2017 年 4 月 22 日 via Android
    用 golang 快写完了突然发现还不如用 java 写,方便在安卓上跑。
    ob
        33
    ob  
       2017 年 4 月 23 日
    @spice630
    @Orlion
    想起一个问题请教下,你们微信登录的时候,每次获取到的同一个用户 id 值那一串是固定的,还是登录一次换一次?
    类似 @fdsafdsafsdafsafds 这样。
    Orlion
        34
    Orlion  
       2017 年 4 月 23 日 via Android
    @ob 好像是会换了,忘记了
    spice630
        35
    spice630  
    OP
       2017 年 4 月 24 日 via iPhone
    @ob
    协议会换的 UserName 每次不一样
    spice630
        36
    spice630  
    OP
       2017 年 4 月 24 日 via iPhone
    @Orlion
    有道理。
    不过机器人作为后端 跟前端用什么关系不大
    spice630
        37
    spice630  
    OP
       2017 年 4 月 24 日 via iPhone
    @HanSonJ
    换个什么说法比较好
    HanSonJ
        38
    HanSonJ  
       2017 年 4 月 24 日
    @spice630 #37 只是免扫码登录
    spice630
        39
    spice630  
    OP
       2017 年 4 月 24 日 via iPhone
    @buf1024
    并非如此。您的请求参数是什么?这个问题我一开始也遇到过 忘记是什么原因了,目前的代码是没有这个问题的。
    spice630
        40
    spice630  
    OP
       2017 年 4 月 24 日 via iPhone
    @junred
    感觉网页版只能算个玩具 手机版的协议也有人做 不过没有公开的
    spice630
        41
    spice630  
    OP
       2017 年 4 月 24 日 via iPhone
    @HanSonJ
    嗯 我换个说法 免得误导别人,出门没带 电源 脑壳疼 23333
    ob
        42
    ob  
       2017 年 4 月 24 日 via Android
    @spice630 那每次根据什么确定同一个用户?有些用户没有微信号,昵称又可以改,用什么办法唯一确定?
    jiumingmao
        43
    jiumingmao  
       2017 年 4 月 24 日
    @ob 设置备注
    ob
        44
    ob  
       2017 年 4 月 24 日 via Android
    @jiumingmao 非好友,微信群,全部一个一个备注就太麻烦了。
    buf1024
        45
    buf1024  
       2017 年 4 月 24 日
    @spice630 这是跑你的 demo 的结果……
    a308057848
        46
    a308057848  
       2017 年 4 月 25 日
    本地已跑通 log 模块死活加载不上,后面看代码用了:github.com/astaxie/beego/logs
    trys1
        47
    trys1  
       2017 年 4 月 26 日 via Android
    已星
    spice630
        48
    spice630  
    OP
       2017 年 4 月 26 日 via Android
    @buf1024
    那只能麻烦你提供复现代码了 可以提到 github 上
    @a308057848
    恩 logs 模块直接用的 beego 的
    @trys1 感谢
    spice630
        49
    spice630  
    OP
       2017 年 4 月 26 日 via Android
    @a308057848
    具体是什么错误呢
    spice630
        50
    spice630  
    OP
       2017 年 5 月 8 日
    已改用 vendor 来管理依赖
    spice630"
        51
    spice630  
    OP
       2017 年 5 月 9 日
    移除了 vendor,真心不喜欢这种依赖管理方式,代码后续会提供 release。
    spice630
        52
    spice630  
    OP
       2017 年 5 月 9 日
    @buf1024
    关于这个问题,基本能确定和帐号有关,被腾讯认定为机器人,见 issue
    https://github.com/songtianyi/wechat-go/issues/4
    buf1024
        53
    buf1024  
       2017 年 5 月 10 日
    @spice630 这个回答不成立。原因如下:
    1. 用 web 浏览器可以登录 -- 这个没有完全模拟浏览器行为?
    2. 用这个可以登录使用 https://github.com/Urinx/WeixinBot
    3. 自己用浏览器开发者工具查看微信交互过程,设置好 user-agent,refer,cookie 等信息,可能登录。
    spice630
        54
    spice630  
    OP
       2017 年 5 月 10 日
    @buf1024
    fixed
    spice630
        55
    spice630  
    OP
       2017 年 5 月 11 日
    update 20-17-05-11
    fix issue #3 修复了一个在树莓派上运行出错的 bug
    spice630
        56
    spice630  
    OP
       2017 年 5 月 12 日
    update 2017-05-12
    第一个 release ~~
    https://github.com/songtianyi/wechat-go/releases
    spice630
        57
    spice630  
    OP
       2017 年 5 月 12 日
    update 2017-05-12
    添加 消息跨群转发 插件 forwarder
    guotie
        58
    guotie  
       2017 年 5 月 13 日
    怒赞!
    spice630
        59
    spice630  
    OP
       2017 年 5 月 17 日
    spice630
        60
    spice630  
    OP
       2017 年 5 月 18 日
    update 2017-05-18
    新增中英互译插件,基于有道翻译 API:)可以撩外国妹纸撩撩撩。。
    only0jac
        61
    only0jac  
       2017 年 5 月 22 日 via Android
    试了一下,一小时内必掉线,且无法自动登录,楼主有这种情况吗?
    spice630
        62
    spice630  
    OP
       2017 年 5 月 22 日
    @only0jac
    贴下错误信息看下呢?
    only0jac
        63
    only0jac  
       2017 年 5 月 22 日
    only0jac
        64
    only0jac  
       2017 年 5 月 22 日
    @spice630 还有,不是说可以自动登陆么?
    spice630
        65
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    需要自己加这个逻辑
    ```
    for {
    if err := session.LoginAndServe(false); err != nil {
    logs.Error("session exit, %s", err)
    for i := 0; i < 3; i++ {
    logs.Info("trying re-login with cache")
    if err := session.LoginAndServe(true); err != nil {
    logs.Error("re-login error, %s", err)
    }
    time.Sleep(3 * time.Second)
    }
    if session, err = wxweb.CreateSession(nil, session.HandlerRegister, wxweb.TERMINAL_MODE); err != nil {
    logs.Error("create new sesion failed, %s", err)
    break
    }
    } else {
    logs.Info("closed by user")
    break
    }
    }
    ```

    我抽空在 windows 测试下
    spice630
        66
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    代码有点乱,参考 travis/bot.go
    only0jac
        67
    only0jac  
       2017 年 5 月 23 日
    @spice630 谢谢,刚发现一个 bug,挂了有五六个小时,前一段时间正常,最后虽然后台显示没掉线,但已经收不到消息了,并且登陆手机微信也没显示网页在线
    only0jac
        68
    only0jac  
       2017 年 5 月 23 日
    @spice630 最后状态是 1102
    spice630
        69
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    1102 没有做处理, 之前并没有遇到过这个值。拉下最新的代码,已经把所有的异常 ret 都当错误抛出去了,这样会进入重登逻辑。
    目前还不清楚 1102 的意思。
    挂机期间 网络有波动不?
    spice630
        70
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    另外,你的截图里 有个%s,能贴下代码不,应该不是示例代码吧。
    only0jac
        71
    only0jac  
       2017 年 5 月 23 日
    @spice630 vps 挂机,国内 Windows 阿里云和国外 centos 都试过,无网络波动,在线不会超过半天,必掉线,截图的%s,是我把你的 logs 替换成了 fmt.println,不过我又换回来了,用的你原先的代码,然后错误却不输出了
    only0jac
        72
    only0jac  
       2017 年 5 月 23 日
    @spice630

    这个是编译最新的 bot.go,一发消息就挂

    spice630
        73
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    go 版本
    spice630
        74
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    方便的话提个 issue,便于跟踪问题,也有利于其他遇到相同问题的人:)
    spice630
        75
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    刚在 windows 下跑了下,问题确实多,尽快解决。
    only0jac
        76
    only0jac  
       2017 年 5 月 23 日 via Android
    @spice630 go 是最新版本,linux 下也没法用,老掉线
    spice630
        77
    spice630  
    OP
       2017 年 5 月 23 日
    @only0jac
    目前还没 时间做 稳定性方面的优化 :( , 你可以用 web 版挂机试下 可以挂多久。
    leopku
        78
    leopku  
       2017 年 5 月 24 日 via Android
    之前星了,支持一下
    spice630
        79
    spice630  
    OP
       2017 年 5 月 24 日
    @leopku
    感谢,
    spice630
        80
    spice630  
    OP
       2017 年 5 月 24 日
    @only0jac
    windows 端的,请在 mac 或者 linux 下使用交叉编译。
    GOOS=windows GOARCH=amd64 go build travis/windows/windows_bot.go
    二维码在 ../public/qrcode 下
    only0jac
        81
    only0jac  
       2017 年 5 月 24 日
    @spice630 我在 Windows 下交叉编译 Linux 的,Windows 直接生成 exe 不行?
    spice630
        82
    spice630  
    OP
       2017 年 5 月 24 日
    @only0jac
    嗯,原因还不明确。
    spice630
        83
    spice630  
    OP
       2017 年 5 月 24 日
    @only0jac
    等我搞一套好用的开发环境再去 debug
    spice630
        84
    spice630  
    OP
       2017 年 5 月 27 日
    @only0jac
    windows 下推荐使用 cmder,可以用 TERMINAL_MODE
    spice630
        85
    spice630  
    OP
       2017 年 5 月 27 日
    https://www.zhihu.com/lives/846360223609413632
    https://github.com/rixingyike/goeve-wechat-robot
    都有人拿我的项目去变现了,感谢认可,也很鼓励大家这么做,这样这个项目也更有意义。但是源码中的 license 请保留,不单单是为了我自己,也为后续的贡献者。
    spice630
        86
    spice630  
    OP
       2017 年 6 月 6 日
    wechat-go 的示例项目,目标是可以方便用户在页面上扫码登录并管理插件
    https://github.com/songtianyi/go-aida
    myself659
        87
    myself659  
       2017 年 6 月 9 日
    大赞
    spice630
        88
    spice630  
    OP
       2017 年 6 月 12 日
    go-aida restful api 开发完成,这周页面应该可以好。
    spice630
        89
    spice630  
    OP
       2017 年 6 月 16 日
    [email protected]
    新增插件 verify
    自动接受好友请求
    spice630
        90
    spice630  
    OP
       2017 年 6 月 16 日
    新增插件 share
    资源自动分发示例,纸牌屋第五季!
    spice630
        91
    spice630  
    OP
       2017 年 7 月 29 日
    go-aida 的坑埋了
    https://github.com/songtianyi/go-aida
    界面很简陋,很丑,先将就用。
    spice630
        92
    spice630  
    OP
       2017 年 9 月 21 日
    ibreaker
        93
    ibreaker  
       2019 年 1 月 19 日
    @spice630 交流群打不开了
    useben
        94
    useben  
       2019 年 6 月 19 日
    之前用给一个 py 的做过,重构到 go 也不错
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1293 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 17:22 PVG 01:22 LAX 09:22 JFK 12:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86