如题,废话不说,直接上代码。首先是登录QQ的小脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#!/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();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
##之后就是调用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模块的提供者。