hexsum / mojo-weixin Goto Github PK
View Code? Open in Web Editor NEW使用Perl语言(不会没关系)编写的个人账号微信/weixin/wechat客户端框架(非GUI),可通过插件提供基于HTTP协议的api接口供其他语言或系统调用
License: Other
使用Perl语言(不会没关系)编写的个人账号微信/weixin/wechat客户端框架(非GUI),可通过插件提供基于HTTP协议的api接口供其他语言或系统调用
License: Other
运行脚本之后,提示登陆成功,然后一直提示”info] C[微信用户:虚拟用户]已加入”,几分钟都不停,等把所有微信群加入频道之后就自动退出登陆了。
最新版的Mojo-weixin,使用以下两个脚本结果都是:
#!/usr/bin/env perl
use Mojo::Weixin;
my $client = Mojo::Weixin->new();
$client->load("ShowMsg");
$client->load("IRCShell",data=>{ listen=>[ {host=>"127.0.0.1",port=>6667},],
load_friend => 1,
});
$client->load("ShowMsg");
#$client->load("Beauty");
$client->load("Beauty",data=>{
file => './Beauty.dat', #可选,数据库保存路径,默认当前目录
board=>[
{command=>"看妹子", url=>'http://huaban.com/boards/19570858/'},
{command=>"搞基" , url=>'http://huaban.com/boards/28226262/'},
{command=>"看帅哥", url=>'http://huaban.com/boards/27865046/'},
]
});
#$client->load("Translation");
##$client->load("Weather"); #提示出错
#$client->load("XiaoiceReply");
#$client->load("XiaoiceReply",data=>{
# is_need_at => 1, #可选,是否需要艾特我来触发智能回复
# comamnd_on => "小冰启动", #可选,启动智能回复的命令,在手机端发送给任何人/群该消息内容即可
# comamnd_off => "小冰停止", #可选,停止智能回复的命令,在手机端发送给任何人/群该消息内容即可
# });
$client->load("SmartReply");
#$client->load("KnowledgeBase");
$client->load("KnowledgeBase2",data=>{
#allow_group => ["PERL学习交流"], #可选,允许插件的群,可以是群名称或群号码
# ban_group => ["私人群1","私人群2"], #可选,禁用该插件的群,可以是群名称或群号码
file => './KnowledgeBase2.txt', #数据库保存路径,纯文本形式,可以编辑
learn_command => 'learn', #可选,自定义学习指令关键字
delete_command =>'del', #可选,自定义删除指令关键字
learn_operator => ["QQ1","QQ2"], #允许学习权限的操作人qq号
delete_operator => ["QQ1"], #允许删除权限的操作人qq号
mode => 'fuzzy', # fuzzy|regex|exact 分别表示模糊|正则|精确, 默认模糊
check_time => 10, #默认10秒检查一次文件变更
show_keyword => 1, #消息是否包含触发关键字信息,默认开启
});
#$client->load("Riddle");
#$client->load("Riddle",data=>{
# command => "猜谜", #可选,触发关键字
# #apikey => "xxxx", #可选,参见 http://apistore.baidu.com/apiworks/servicedetail/440.html?qq-pf-to=pcqq.c2c
# timeout => 30, #等待答案的超时时间,超时后会自动公布答案
# });
#$client->load("IRCShell");
$client->run();
第二个
#!/usr/bin/env perl
use Mojo::Weixin;
my $client = Mojo::Weixin->new();
$client->load("ShowMsg");
$client->load("IRCShell"); #加载IRCShell插件
$client->run();
另外有很多插件不能同时启动是什么原因呢?
建议增加群发功能。
Openwx 支持如下好友管理功能:
貌似只支持perl进行插件开发? openwx 只有发送API, 并无接收API, 如果要做一个机器人 除了用perl来开发, 还支持其他语言嘛?
找到了openwx 有自定义消息上报接口. 可以close掉了
管理群时可能会有一些类似的分析功能
情况
好友名字中含有特殊字符,如表情之类,这样在程序识别的时候,就会出现如下例子:
陈[未知表情][未知表情]闯
如果/query nickname 这个格式的话,输入名字比较麻烦。
提个方法 :把好友的名字用编号代替,如1、2、3……55、73等 ,这样就可以用下面的格式开启新的单独窗口了/query 3
环境太难搞。
教程又写的一笔带过
真是搞不动!!
今天频发 请求失败: 503 Service Unavailable 错误
[16/11/04 17:55:26] [warn] https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=mgIyyKlnZiDGe7KI&skey=@crypt_c2ccac53_4489f76561c01b25a866a1dc7144c664&pass_ticket=Fm51aFC23d7gbCX6QWNblyvh0dTU5fUA6Aa%252F9kKeQYVP6r4xZeYLHSKAa8eB6TT7 请求失败: 503 Service Unavailable
[16/11/04 17:55:27] [warn] https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=mgIyyKlnZiDGe7KI&skey=@crypt_c2ccac53_4489f76561c01b25a866a1dc7144c664&pass_ticket=Fm51aFC23d7gbCX6QWNblyvh0dTU5fUA6Aa%252F9kKeQYVP6r4xZeYLHSKAa8eB6TT7 请求失败: 503 Service Unavailable
[16/11/04 17:55:28] [warn] https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=mgIyyKlnZiDGe7KI&skey=@crypt_c2ccac53_4489f76561c01b25a866a1dc7144c664&pass_ticket=Fm51aFC23d7gbCX6QWNblyvh0dTU5fUA6Aa%252F9kKeQYVP6r4xZeYLHSKAa8eB6TT7 请求失败: 503 Service Unavailable
[16/11/04 17:55:29] [warn] https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=mgIyyKlnZiDGe7KI&skey=@crypt_c2ccac53_4489f76561c01b25a866a1dc7144c664&pass_ticket=Fm51aFC23d7gbCX6QWNblyvh0dTU5fUA6Aa%252F9kKeQYVP6r4xZeYLHSKAa8eB6TT7 请求失败: 503 Service Unavailable
今天准备开始写机器人 然后发现一个问题. 我注册了一个小号. 用来作为机器人. 然后手机扫描二维码登录之后, 我手机切换至主号上. 准备跟小号对话 来调试 发现 手机上小号刚退出 Mojo-weixin 就退出了. 接着我尝试 用主号 启动两个web 微信 (一个Mojo-weixin, 一个web 微信) 发现 只要第二个扫描认证后 登录 第一个已经登录的web 微信 就会自动退出. 而通过注册小号方式来做机器人 就要求 手机上的小号微信不能退出. 有点失落.. 这样没法玩了 555
这个可以获取到群号吗?我看有人写的机器人可以获取群号的,下线后再登录群号也不变
发送信息的时候,如果含有#字符,程序将会自动截去掉后面的所有内容
一、Mojo::Webqq启动脚本:
use Mojo::Webqq;
my $qq = 123456789; #修改为你自己的实际QQ号码
my $client = Mojo::Webqq->new(qq=>$qq);
$client->load("ShowMsg");
$client->load("IRCShell"); #加载IRCShell插件
$client->run();
二、Mojo::Weixin启动脚本:
use Mojo::Weixin;
my $client = Mojo::Weixin->new();
$client->load("ShowMsg");
$client->load("IRCShell",data=>{host=>"127.0.0.1",port=>8888,}); #加载IRCShell插件
$client->run();
正常来说,一个是监听6667端口,一个是8888端口,没有“占用”问题。
如果把webqq先启动了,这时6667就被使用了,可以被IRC客户端去连接的,没有问题。可这时,若把weixin也启动了,则正常登陆没有问题,若用IRC客户端去连接8888端口则无法实现,因为8888端口根本没有被监听……经测试,其实还是用着6667端口,只是因为被占用,而无法被IRC客户端连接……这就说明weixin在这种情况下的启动脚本是根本没有实现功能的。
怎么办?
RT.
运行
`#!/usr/bin/env perl
use Mojo::Weixin;
my ($host,$port,$post_api);
$host = "127.0.0.1"; #发送消息接口监听地址,修改为自己希望监听的地址
$port = 3000; #发送消息接口监听端口,修改为自己希望监听的端口
my $client = Mojo::Weixin->new(log_level=>"info",http_debug=>0);
$client->load("ShowMsg");
$client->load("Openwx",data=>{listen=>[{host=>$host,port=>$port}], post_api=>$post_api});
$client->run();
`
就一直是登入 登出
我是采用Mojo-ActivePerl-master 方式安装
似乎是调用webwxsendappmsg 接口,然后类型改为5,但试了好久都没有成功。。
attr子程序的
return exists $_[0]{$attr} ? $_[0]{$attr} : ($_[0]{$attr} = $value)
if @_ == 1;
这句永远都不会被执行吧
返回「api not found」,这个 API 关闭了?
我看到Mojo-Weixin的介绍说可以实现图片的接收发送, 所以我想在irssi里面直接发送图片,请问这可以做到吗?能否给个示例,或者需要修改IRCShell的实现,以支持这种操作.
使用demo中的openqq-client.pl 打印好友列表、收到的响应有乱码,发送给对方是中文时,对方微信收到的也是乱码
好友:
璇煶鎻愰啋 gh_22b87fa7cb3c
寰俊鏀粯 @82c3efa759834c229f923d6cca657360
{"code":0,"status":"鍙戦€佹垚鍔?,"msg_id":1454936158172} at wc2.pl line 68
我发现一个问题 腾讯新闻会主动推新闻给机器人,机器人收到的是一堆xml
上报消息时,只上报接收到的消息,假如通过手机APP发送的消息,则忽略掉不上报。由于我需要收集所有的对话记录,方便日后查询历史记录,如不记录我手机APP发送出来的消息,那整个对话流程不完整。
after login, it retrieves a few groups from my wechat account. but then logout and login again and again.
[16/06/24 18:48:25] [info] 更新群组[ 79006 ]信息成功 <= should stay in but it tries to relogin here again and again.
[16/06/24 18:48:32] [info] 正在重新登录...
[16/06/24 18:48:32] [info] 客户端注销...
[16/06/24 18:48:32] [info] 客户端准备登录...
[16/06/24 18:48:39] [info] 清除残留的历史二维码图片
[16/06/24 18:48:39] [info] 二维码已下载到本地[ /tmp/mojo_weixin_qrcode_default.jpg ]
[16/06/24 18:48:39] [info] 二维码原始下载地址[ https://login.weixin.qq.com/qrcode/IZU0EHSxqg== ]
[16/06/24 18:48:39] [info] 等待手机微信扫描二维码...
What could be the problem?
Another thing is: If i login in once, can it login automatically without asking to scan the QR code again?
Thank you,
--David
PS: the lib is pretty impressive. great job.
目前的new_group_member事件信息如下:
{
"params": [
{
"city": "",
"displayname": "xxx",
"display": "",
"markname": "",
"province": "",
"sex": "",
"id": "@5981c40166a4768a0d37d3bdxxxdd9d12d9c8004e6db97eb8ae2ddf75b9e3e8be",
"account": "",
"name": "xxx",
"signature": ""
}
],
"event": "new_group_member",
"post_type": "event"
}
建议增加此用户加入的群组相关信息。
如题,如何修改默认“小灰”的称呼?
你好,能否给一个简单的说明,如何在irrsi里面聊天。我可以通过 /msg username blabla发送消息, 但是朋友回发的消息不能在irssi展示出来。
请问下如下代码,不需要cookie吗?我是搞php,看的不是太懂;我用php写的,卡在这个地方了,Ret一直返回1
sub Mojo::Weixin::_webwxinit{
my $self = shift;
my $api = "https://". $self->domain . "/cgi-bin/mmwebwx-bin/webwxinit";
my @query_string = (
r => sub{use integer;unpack 'i',~ pack 'l',$self->now() & 0xFFFFFFFF}->(),
);
push @query_string,(pass_ticket => $self->url_escape($self->pass_ticket)) if $self->pass_ticket;
my $post = {
BaseRequest => {
Uin => $self->wxuin,
Sid => $self->wxsid,
Skey => $self->skey,
DeviceID => $self->deviceid,
},
};
my $json = $self->http_post($self->gen_url($api,@query_string),{json=>1,Referer=>'https://'.$self->domain .'/'},json=>$post);
return if not defined $json;
return if $json->{BaseResponse}{Ret}!=0;
用了IRCShell, 客户端使用的是irssi, 连接上我的vps, irssi提示连接成功, 然后/join 我的好友, 也成功了. 然后/query 私聊一个好友, 手机上没有同步消息. 然后对方也没有收到消息. 对方发送的消息. irssi上也无法收到. 通过vps上的终端查看. 是有内容来往的. 我的启动脚本如下:
#!/usr/bin/env perl
use Mojo::Weixin;
my $client = Mojo::Weixin->new();
$client->load("ShowMsg");
#$client->load("ShowQRCodeInTerm");
$client->load("UploadQRcode");
$client->load("IRCShell"); #加载IRCShell插件
$client->run();
另外对于如果我跑vps上 想24小时不离线, 安全性如何保证? 我看咱们这个IRC Server是开放式的. 没有什么授权机制, 或者密码之类的东西. 任何人只要知道我的IRC端口 都可以进入我的IRC Server ,如果此时他/join 我的好友 会发生什么?
刚刚忘记写了,再建议实现一个功能。
微信里有很多悄悄把自己删除了的联系人,一个一个的去删除很费时间和力气。网传群发消息可以找出谁删除了你是不可行的。所以可不可以实现发条指令查询出谁删除了自己?然后再发一条指令删除这些已经删除了你的好友。
原是在一个python项目看到,利用微信网页版的接口, 将好友35人拉入一个群聊, 再移出, 反复进行多组, 无法成功拉入则说明他把你拉黑了,删除本来主有好友本来就有这个功能……
接收到照片的话,会在/tmp下面生成html文件,但又是0K大小。
正常工作在 1.2.1 版本的调用代码:
$client->load("XiaoiceReply"); $client->load("XiaoiceReply",data=>{ is_need_at => 0, comamnd_on => "启动小冰", comamnd_off => "停止小冰", });
更新到 1.2.5 之后, 在任一个对话窗口发送启动指令"启动小冰", 会提示"小冰已启动", 但对方发送的对话没有转发到小冰公众号, 所以也无法调用小冰自动回复. 如果自己单独发对话给小冰是正常的.
多实例下,登陆二维码能不能不要覆盖掉。
不知道可不中以实现一个可以交互的日程管理插件:
时间
获取现在时间(年月日周时分秒)
日程/约会/生日/纪念日
什么时间 要做什么事
会议
会议时间 参会人员 会议主题
备忘
如果需要很长一段时间后处理,则做一个备忘。参照以上。
可以按标签列出(办公,家里,外出……)
提醒方式
**时间:**单次提醒tmier/循环提醒interval
提醒途径:
微信个人消息
微信群消息(发到某一个群,适合有其他人参与的场景)
QQ个人消息
QQ群(发到某一个群,适合有其他人参与的场景)
邮件(适合有其他人参与的场景,发送消息到相应人员的电子邮箱)
应用实例:
1、比如12月1日上午10:00要开销售会议,
报时 #可选。确定现在的日期时间
指令 执行时间 主题 内容 提醒方式:时间&消息接受者(不定义则发给自己,定义则用指定方式发给相关人员)
todo 2016年12月1日10:00 销售会议 参会人员A,B,C和D 。讨论客户开发及销售业绩总结。 提醒方式:时间&群/个人/邮件
清单/list 列出清单。
编辑(增加,修改,删除……)功能等
[16/05/25 20:22:49] [info] 当前正在使用 Mojo-Weixin v1.1.3
[16/05/25 20:22:49] [info] 客户端准备登录...
[16/05/25 20:23:00] [info] 清除残留的历史二维码图片
[16/05/25 20:23:00] [info] 二维码已下载到本地[ /var/folders/... ]
[16/05/25 20:23:00] [info] 等待手机微信扫描二维码...
[16/05/25 20:23:23] [info] 手机微信扫码成功,请在手机微信上点击 [登录] 按钮...
[16/05/25 20:23:24] [info] 正在进行登录...
[16/05/25 20:23:29] [error] 登录返回数据格式异常
[16/05/25 20:23:29] [error] 登录失败
[16/05/25 20:23:29] [info] 客户端停止运行
RT,此外微信群的ID保证不变么?
请问在IRCShell里面可以链接其它的IRC频道吗,比如#ubuntu之类的。
[root@mojowebqq ~]# curl -v "http://127.0.0.1:3000/openwx/send_friend_message?account=zjcnew&content=hi"
GET /openwx/send_friend_message?account=zjcnew&content=hi HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: 127.0.0.1:3000
Accept: /
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< Date: Wed, 23 Nov 2016 07:50:08 GMT
< Content-Length: 54
< Server: Mojolicious (Perl)
<
1、语音、小视频、GIF动画、动画表情、网页链接等,期待加入。
2、更为重要的一个——文件传输,呵呵。
网页版中有的功能若都实现的话,肯定要花费很多精力和时间,但如果真的要做的话,还是更一个图形界面的觉得更合适吧。
发图片的功能有计划么。
扫描二维码后点击登录,显示获取联系人失败。然后又重新生成二维码要求重新登录,请问是什么情况呢?
微信使用,遇到约有 10% 左右的 media 消息,media_path = "non-exist-path",仅影响视频和表情,手机上可以查看,请问该如何解决?
目前的该事件上报存在BUG,成员的信息展现不全。
{
"params": [
{
"city": "",
"displayname": "xxxx",
"display": "",
"markname": "",
"province": "",
"sex": "",
"id": "@5981c40166a4768a0d37d3bdf3dd9d12d9c8004e6db97eb8ae2ddf75b9e3e8be",
"account": "",
"name": "xxx",
"signature": ""
}
],
"event": "new_group_member",
"post_type": "event"
}
比如上面的例子中,只给出了displayname,id和name信息,别的信息都是Null。
名片类信息目前没有添加消息上报,请添加
$module = $module_name;
if(substr($module_name,0,1) eq '+'){
substr($module_name,0,1) = "";
$module = $module_name;
}
为什么要考虑 module的名字带有+ 号?
服务器端安装的1.2.8版本,提示需要安装gcm插件。
我今天安装好之后进行试用,下载下来的二维码图片无法打开,提示不是有效的png图片
,修改后缀名为jpg
之后打开正常~
PS: 感谢你的库,非常好用!
语音消息接受不到吗?
每次登陆都会提示更新群组,但是群组一般都更新不全,未更新的群,如果收到消息,能更新进来,但是这样一来就不能主动给很多群发消息了,而且下次微信重启的时候,上次未加载的群,依然没有被加载!
PostQRcode的正文显示的是乱码,并且附件的图片会损坏(测试下来是正文乱码导致的)
正文:
请使用手机微信扫描附件中的二维码
ps:测试使用的是qq邮箱
另外,如果没有设置参数subject的话,下面这行会报错,$client->user在这个阶段并没有初始化。
$data->{subject} = "微信帐号 " . $client->user->displayname . " 扫描二维码" if not defined $data->{subject};
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.