codecamp
命令行聊QQ、微信 - 极客们的另类体验

背景起源

身为一个IT人员,工作中有很大一部分时间都需要面对着黑的白字的命令行界面,比如:

  • 在命令行上执行各种命令操作
  • 在命令行上编写和调试代码
  • 在命令行上使用IRC工具聊天

习惯了Linux的简洁高效,会发现越来越讨厌视窗或鼠标一类的东西,某一天在知乎上看到了某人的提问:

有没有一个可以在 Linux 命令行下使用的 QQ 客户端?

最终折腾了一番,真的实现了,分享给有兴趣的小伙伴们 项目采用Perl语言编写目前已经开源托管在github上,项目地址:

Mojo-Webqq / Mojo-Weixin

只需要熟悉linux操作环境即可,并不需要了解项目的实现语言,按照教程安装、运行即可

实现原理

Linux的命令行上已经有比较成熟的聊天方案,那就是基于IRC协议的一大堆命令行聊天工具,比如:

  • weechat
  • irssi

这些聊天工具已经提供了比较完善的聊天交互方式,我们需要做的就是如何把QQ或微信的协议转换成IRC协议即可

由于QQ和微信协议都是基于网页版,原理基本相同,使用方法也基本相同,因此下文只以QQ举例说明

+-------------------+ +----------------+ Tencent Any IRC Client SmartQQ Server wechat、irssi +---v-------------^-+ +-v------------^-+
QQ协议交互 IRC协议交互
+-- --- --  - -  -- - - -   --   -  -   --- ---  ----- --+
+---v-------------^--+                  +----v------------^-+
<——————————————————<
SmartQQ Client QQ - IRC IRC Server
协议转换 监听本机6667端口
>——————————————————>
+--------------------+                  +-------------------+
我们程序实现的部分
    +---  - - - -  -- - --  ----  ------  -------  ------  ---    ----+

效果预览

IT男装逼利器:如何像黑客一样聊天(图片来自 @動感光波)

安装基础运行环境

如果使用docker方式请参见 Docker镜像安装及使用方法

  1. 安装perl

    安装之前请先确认下你的系统是否已经安装了Perl,因为除了windows,其他大部分的平台默认都可能已经预装过

并且你的Perl版本至少5.10.1+,推荐5.14+


Linux上如果你的perl版本较低,想要升级perl,可以考虑使用工具 [perlbrew](https://perlbrew.pl/)

Perl官网下载页面 有包含Unix/Linux、Mac OS X、Windows多平台比较全面详细的安装说明,可选择的方式包括:


* yum/apt 等包管理器
* 官方源码编译
* [Active-Perl](http://www.activestate.com/activeperl/downloads)
* [DWIM-Perl](http://dwimperl.com/linux.html)

  1. *安装cpanm包管理工具(如果系统已经安装了cpanm可以忽略此步骤)**

方法a: 通过cpan安装cpanm

$ cpan -i App::cpanminus


方法b: 直接在线安装cpanm

$ curl -kL https://cpanmin.us | perl - App::cpanminus

    
    官方服务器在国外,如果无法访问,可以选择下面的命令:

    
    $ curl http://share-10066126.cos.myqcloud.com/cpanm.pl|perl - App::cpanminus

  1. 使用cpanm在线安装 Mojo::Webqq 模块(如果系统已经安装了该模块,执行此步骤会对模块进行升级)

$ cpanm Mojo::Webqq $ cpanm Mojo::IRC::Server::Chinese


如果安装过程中一直提示下载失败,很可能是因为访问到国外服务器网络比较差


这种情况下可以尝试按如下方式手动指定国内的镜像站点


    $ cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq
    $ cpanm --mirror http://mirrors.163.com/cpan/ Mojo::IRC::Server::Chinese

  1. 安装失败可能有帮助的解决方法

    如果你运气不佳,通过cpanm没有一次性安装成功,这里提供了一些可能有用的信息

在安装 Mojo::Webqq 的过程中,cpan或者cpanm会帮助我们自动安装很多其他的依赖模块


在众多的依赖模块中,安装经常容易出现问题的主要是 IO::Socket::SSL


IO::Socket::SSL 主要提供了 https 支持,在安装过程中可能会涉及到SSL相关库的编译

对于 Linux 用户,通常采用的是编译安装的方式,系统缺少编译安装必要的环境,则会导致编译失败


对于 Windows 用户,由于不具备良好的编译安装环境,推荐采用一些已经打包比较全面的Perl运行环境


例如比较流行的 strawberryperl 或者 activeperl 的最新版本都默认包含 Mojo::Webqq 的核心依赖模块

RedHat/Centos:

$ yum install -y openssl-devel

    
Ubuntu:

$ sudo apt-get install libssl-dev


搞定了编译和运行环境之后,再重新回到 步骤2 安装Mojo::Webqq即可

创建运行脚本

#!/usr/bin/env perl
use Mojo::Webqq;
my $client = Mojo::Webqq->new();
$client->load("ShowMsg");
$client->load("IRCShell"); #加载IRCShell插件
$client->run();

运行程序

将上述代码保存成 xxxx.pl 文件(必须UTF8编码),使用perl解释器运行

执行的结果是完成QQ的扫码登录、同时本机启动一个监听6667端口的IRC Server

perl xxxx.pl

你会看到命令行窗口打印类似如下运行日志:

[15/09/30 15:11:59] [info] 初始化 smartqq 客户端参数... [15/09/30 15:11:59] [info] 检查验证码... [15/09/30 15:11:59] [info] 检查结果: 很幸运,本次登录不需要验证码 [15/09/30 15:11:59] [info] 正在获取登录二维码... [15/09/30 15:11:59] [info] 二维码已下载到本地[ /tmp/mojo_webqq_qrcode_xxx.png ] [15/09/30 15:12:00] [info] 登录二维码已经发送到邮箱: ** [15/09/30 15:12:00] [info] 等待手机QQ扫描二维码... [15/09/30 15:12:43] [info] 手机QQ扫码成功,请在手机上点击[允许登录smartQQ]按钮... [15/09/30 15:12:46] [info] 检查安全代码... [15/09/30 15:12:47] [info] 设置登录验证参数... [15/09/30 15:12:47] [info] 尝试进行登录(2)... [15/09/30 15:12:47] [info] 登录成功 [15/09/30 15:12:47] [info] 更新个人信息... [15/09/30 15:12:47] [info] 更新好友信息... [15/09/30 15:12:47] [info] 更新[ PERL学习交流 ]信息 [15/09/30 15:12:52] [info] 更新[ Mojolicious ]信息 [15/09/30 15:12:55] [info] 开始接收消息...

开始命令行聊天

使用任意支持IRC协议的客户端连接127.0.0.1:6667的IRC Server即可开始聊天

常见的irc客户端有weechat、irssi等,这里以irssi为例

建立服务端

irssi -c 127.0.0.1 -p 6667


IRC客户端常用操作命令


/nick 你的QQ昵称          #设置irc的昵称,建议和自己的QQ昵称相同
/list                     #列出自己加入的QQ群
/join #我的QQ群名称       #加入指定的某个QQ群
/part                     #退出该QQ群

更多irc的使用方就不一一列举了,自行百度即可

其他应用

其实,这是一个开源框架,命令行聊天只是框架的一个插件功能,更多创意应用等待大家发掘,相关应用文章参考:

官方交流

有任何问题欢迎加官方QQ群(498880156)进行交流

温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }