如题,废话不说,直接上代码。首先是登录QQ的小脚本
#!/usr/bin/perl use Webqq::Client; use Data::Dumper; use Digest::MD5 qw(md5_hex); use LWP::UserAgent; use JSON; my $qq = QQ号; my $pwd = md5_hex('QQ密码'); my $client = Webqq::Client->new(debug=>0);#等于1开启debug #############验证码############## $client->load("PostImgVerifycode"); $client->on_input_img_verifycode() = sub{ my ($img_verifycode_file) = @_; my $smtp = { smtp =>'邮箱smtp服务器', user =>'邮箱user', pass =>'邮箱pass', from =>'邮箱地址', to =>'邮箱地址', from_title => 'QQ机器人', subject => '验证码', }; return &{$client->plugin("PostImgVerifycode")}($client,$img_verifycode_file,$smtp); }; ###################################### 登录QQ的时候可能会用到验证码,需要的话会以邮件的形式发送到邮箱,打开邮件里边的链接地址提交即可。 $client->login( qq=> $qq, pwd => $pwd); sub tuling{ my $info = $_[0]; my $UA = LWP::UserAgent->new; my $response = $UA->get(" #这里调用的事图灵机器人接口 实现了智能对话功能 用的话 自己去申请下地址 不用可以删掉该功能 my $str = $response->content; my $json = new JSON; my $json_obj = $json->decode("$str"); return $json_obj->{'text'} } $client->on_receive_message = sub{ my $msg = shift; my $group_uin = $msg->{from_uin}; if ($msg->{content} =~ m!(.*)@小傻(.*)!) { #定义@什么内容会触发下边的回复这里定义的是@小傻 可以根据需要做更改 my $msg_content = $1 . $2; my $s_msg_content = tuling("$msg_content"); my $s_msg = $client->create_group_msg(to_uin=>"$group_uin", content=> "$s_msg_content",); $client->send_group_message($s_msg); } }; $client->load("Openqq"); $client->on_run = sub{ $client->call("Openqq",host=>"0.0.0.0",port=>5000); ##这里是开启api,开启后本地会监听一个端口 通过该端口发送查询等一系列操作 }; $client->run();
##之后就是调用api发送qq消息的脚本啦 如下 #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use JSON; use URI::Escape; sub get_gid { my $group_name = $_[0]; my $UA = LWP::UserAgent->new; my $response = $UA->get(" #定义api地址 只需要替换ip my $str = $response->content; my $json = new JSON; my $json_obj = $json->decode("$str"); foreach my $group (@{ $json_obj }){ if ($group->{'ginfo'}->{'name'} eq "$group_name"){ return $group->{'ginfo'}->{'gid'} ; } } } sub send_qq_mess { my $content = $_[0]; my $gid = get_gid($_[1]); my $UA = LWP::UserAgent->new; my $response = $UA->get(" #api地址 #api地址格式为 ip:port/fucation(server端定义的ip 和 port) ###fucation包括以下几个 #信息获取 #/openqq/get_user_info #查询用户信息 #/openqq/get_friend_info #查询好友信息 #/openqq/get_group_info #查询群信息 #/openqq/get_discuss_info #查询讨论组信息 #/openqq/get_recent_info #查询最近联系人列表信息 #消息发送,均支持GET和POST #/openqq/send_message #发送好友消息 参数id=xxx&content=xxx #/openqq/send_group_message #发送群消息 参数gid=xxx&content=xxx #/openqq/send_discuss_message #发送讨论组消息 参数did=xxx&content=xxx (由于腾讯限制,当前无法成功发送) #/openqq/send_sess_message #发送群临时消息 参数 gid=xxx&id=xxx&content=xxx #/openqq/send_sess_message #发送讨论组临时消息 参数 did=xxx&id=xxx&content=xxx return $response->content; } my $c = uri_escape($ARGV[0]); print send_qq_mess($c,"Monitoring_alarm") ; # 这里的Monitoring_alarm是指要发送报警的群名称 必须是QQ所在的群
第一个脚本运行的话 加上nohup 否者验证码会丢tmp目录下 不会发邮件 QQ登录成功后 查看是否监听了5000端口(可改),一切ok了 执行第二个脚本 比如说名字是 send ,那么执行格式为send your_send_content 之后你刚才定义的群名称的那个群会收到消息 这个脚本因为有api可以任意调用,本人初学perl , 大神别见笑。
最后感谢Webqq::Client模块的提供者。
转载于:https://blog.51cto.com/zhaolin/1630115