https://github.com/songtianyi/wechat-go
go 版本 wechat web api , 十分欢迎 gopher 参与开发更多有趣实用的插件。同时求一个前端,写两个页面给普通用户使用。
go get -u -v github.com/songtianyi/wechat-go
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
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)
}
}
一个管理插件的插件
#关闭某个插件, 在微信聊天窗口输入
disable faceplusplus
#开启某个插件, 在微信聊天窗口输入
enable faceplusplus
#查看所有插件信息, 在微信聊天窗口输入
dump
对收到的图片做面部识别,返回性别和年龄
以收到的文字消息为关键字做 gif 搜索,返回 gif 图, 注意返回的 gif 可能尺度较大,比如文字消息中包含“污”等关键词。
对收到的文字 /图片消息,做自动应答,回复固定文字消息
随机获取一张美女图片, 在聊天窗口输入
美女
获取一则笑话, 在聊天窗口输入
笑话
消息撤回插件, 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
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.