Comments (16)
你的插件加载并激活了不?参照 示例代码main函数里的逻辑。
from wechat-go.
可以看下我写的有啥问题不:
https://github.com/laike9m/WechatShadowClone/blob/master/main.go
from wechat-go.
确认过了,即使不修改跑示例程序也会出现相同警告
from wechat-go.
你的代码 copy之后没有修改。
我改了下提pr到你的项目了。
from wechat-go.
你的 pr 里的代码跑起来没有警告,不过我之前试过直接加一个 wxweb.MSG_INIT 的 handler:
session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "receiver")
session.HandlerRegister.Add(wxweb.MSG_INIT, wxweb.Handler(demo), "receiver")
session.HandlerRegister.Add(wxweb.MSG_IMG, wxweb.Handler(demo), "receiver")
这样是会出现警告的。wxweb.MSG_TEXT
是必须要处理的消息类型,没法省略吧。
from wechat-go.
@laike9m
receiver和之前的重复了,实际上没加成功,你可以打印它的返回值看看。
from wechat-go.
感觉我没看懂那个例子
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")
}
这里,插件名叫做 demo
,然后下面注释里说 // 第三个参数: 自定义插件名,不能重名,switcher插件会用到此名称
.我不是很明白为什么要自定义插件名?以及自定义的插件名和 demo
的关系是啥?
from wechat-go.
@laike9m
有个插件管理接口是通过这个名字来匹配的。其实也可以设计为允许重名,但是管理插件的时候较为混乱。
from wechat-go.
@laike9m
自定义插件名和demo没有联系,demo是函数名,插件名是用来开关插件的。
from wechat-go.
其实我问的是 textdemo
, imgdemo
和 demo
这个插件名的关系,这里太 confusing 了
from wechat-go.
或者能不能举个例子,如果要用 demo 这个插件,代码是怎样的?EnableByName
里传的应该是 textdemo
和 imgdemo
?
from wechat-go.
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")
}
这里实际上在一个插件demo里加了两个handler进去,一个叫 textdemo 一个叫imgdemo,只是它们公用了一个处理函数demo,且写在了同一个插件包里。开关插件(其实应该叫开关handler)的时候使用handler的名字,而不是插件包名。加载插件使用插件包名。
handler可以叫任意名字,只是不能和已有的重复。
我不该举这样的例子,插件只是handler的分类/集中管理方式, 也可以完全抛弃插件的写法,在任意地方 执行
session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "textdemo")
经你提醒,我发现我的插件包设计 并没带来多少便利。可以深入讨论下。
from wechat-go.
我现在算是明白了。
感觉这个设计的主要问题就是用户在使用插件的时候还需要去启动 handler 。从用户的角度来说,理想情况是只需知道插件的功能就够了,要么用要么不用,而不应该需要去理解插件的内部实现,分别启动每个
handler。
虽然我理解你那样设计可以让使用更灵活,但对并不熟悉代码的用户其实是不够友好的。
from wechat-go.
@laike9m
说的对,这里可以定两个原则。
一个插件只完成一个功能,不在一个插件里加入多个handler
插件默认开启
from wechat-go.
@laike9m
已按照这两个原则修改了插件。
from wechat-go.
from wechat-go.
Related Issues (20)
- 请问支持添加好友吗? HOT 10
- 请问怎么获取群的成员列表 HOT 1
- 求助,如果用于微信自动回复 HOT 11
- no handlers for key HOT 1
- 接受好友请求后似乎就报错无法使用了
- 第三方平台支持 HOT 1
- 微信收款信息是乱码,需要解密吧 HOT 1
- 还更新吗? HOT 3
- 频繁掉线,自动重新登陆失败 HOT 3
- 请问怎么判断联系人是否是公众号呢? HOT 1
- 弱弱的问一下appid和发送消息的文档在哪里可以查看申请。。 HOT 1
- 如何主动给好友发消息 HOT 2
- go mod的问题
- 微控BUG反馈帖 HOT 3
- 微信网页版登陆接口增加了环境监测实在cookie中设置的
- 不好意思,想问下如何发送本地文件夹下图片 HOT 2
- 如何邀请自己好友进群? HOT 2
- 能否弄一些管理工具函数
- 还有维护吗 HOT 5
- 能获取小程序登陆的二维码码 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wechat-go.