女生科技体验节,Wechaty杂货铺

这篇文章主要针对女生科技体验节Wechaty专场,同学们问的问题的汇总。因为很多同学没有太多编程基础,所以这篇文章讲解会比较基础。

故事从哪里说起呢?通过这次女生科技体验节活动,同学们遇到的问题主要来自三方面,第一,是docker安装方面的问题;第二,是对一些专有名词的不理解;第三,是程序运行和代码编写方面的问题。那么,我会把重心放在,程序编写和运行中遇到的问题,和对同学们来说比较陌生的专业术语的解释上。因为,安装的问题五花八门,安装好以后大家都就可以随心所欲的写自己的机器人了,遇到更多的是程序代码上的问题。还有,我对安装真的不是特别在行。。。。

So,这篇文章主要以问答的形式来写,并且,后面遇到新的问题,也可以告诉我,我会及时的补充。

1. Wechaty微信机器人可以用到公众号上吗?

不能用于公众号,公众号本身有自动回复的功能,可以直接调用公众号的接口,具体可以查看文档,使用Wechaty制作微信机器人只能用在个人微信号上。

2. docker的镜像加速器

因为国内访问Docker 官方的Docker Hub有时候速度会很慢,此时就可以配置镜像加速器。比如:阿里云加速器,DaoCloud加速器等。
配置方法就是,我们注册新用户之后,申请加速器,会获得一个地址,然后我们将这个地址配置给Docker引擎,添加到docker的registry-mirrors中。
Docker Hub是仓库集中存放镜像的地方,Docker官方维护了一个公共的仓库Docker Hub,可以通过docker pull来将需要的镜像下到本地。

这里我们的雨鸟助教将wechaty的镜像直接放在了registry.docker-cn.com一个国内的hub ,我们就可以很快速的拉取镜像。

拉取镜像的命令:
docker pull registry.docker-cn.com/zixia/wechaty
将Wechaty版本号指定到最新的版本
docker tag zixia/wechaty:latest
启动程序
docker run zixia/wechaty

3.在运行李佳芮讲师的get start代码的时候,为什么自己发的信息不能回复

其实单从Wechaty来说是可以自己发信息,自己回复的,但是自己给自己发信息会进入一个死循环。

讲师提供的get start 的代码,有这么一句

if(m.self()){
  return;
}

当接收到的消息是自己发出的,就直接终止代码继续往后执行。

4. Windows7下发送不了中文message

MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库。
简单的说,有一些软件必须在Linux的环境下运行,MinGW可以在Windows上提供一套Linux的运行的环境,表象的说就是可以在Windows上执行Linux的命令。但是MinGW对中文的支持很不友好。 我们在安装git的时候会自动安装MinGW。所以导致同学们发送不了中文的message。
具体的解决方法就是:使用命令docker-machine ssh,ssh连接到docker镜像内部,然后再运行。ssh是一种网络协议。用户想要通过本地计算机登录到远程计算机,就要使用ssh。具体想要多了解的可以看阮一峰的这篇小白入门文章:http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 。这里我们使用docker-machine ssh访问到docker镜像,因为docker内部就是linux环境,所以内部没有用到MinGW,这样就解决了系统的兼容性问题。
但是ssh进入内部,就不能直接使用docker run -t挂载本地目录,因为现在命令的执行是直接在虚拟机内部的,操作不了宿主机的文件。解决的方法是,把本地的目录挂在到docer虚拟机内部,然后ssh连接进虚拟机,docker run -t是挂载虚拟机内部的目录。
这里感谢我们的远程助教杉木和Fery提供的解决方案。

5.正则表达式

因为在机器人拉人入群的时候,我们主要采用的是,好友输入入群的关键词,然后机器人匹配关键词,自动拉人入群。这里我们就要用到正则表达式。

首先理一下什么是正则表达式:正则表达式是一种文本模式,可以是普通的字符,也可以是特殊字符。正则表达式使用单个字符串来描述、匹配一系列某个句法规则的字符串。可能这样说大家还不是很明白,举一个例子:
我们希望拉人到test群,希望好友向机器人发送“room”,机器人收到这个词,才会将好友自动添加到test群里。那么我们就需要用到正则表达式来匹配。
这里提一下一位同学写的非常具有教育意义的代码。可以看出这位同学有一定的编程基础,她想实现的功能是,当好友在输入:“Hello”或者”Hi”的时候,都能自动添加到群里。下面是代码:

if(/Hello || Hi/.test(content)){
  ...
}

js的正则表达式中“或”是这么写的/Hello|Hi/,并且中间不能有空格,如果有空格,正则也将匹配到空格,好友必须输入”Hello ”或者” Hi”才能匹配上。
正则表达式学起来很繁琐,但是功能很强大,感兴趣的同学需要自己下来花时间学习。

6. Typescript

Javascript是一个弱类型语言,就是说变量类型是不确定的,比如:

var x = 5;
x = x + 'A'

声明x的时候是一个数值,但是第二句直接把x变成了一个字符串。也就是说js中变量的类型完全是由当前的值来决定的。这样对于最初的js作为一个脚本语言来说是很方便简单的,但是随着项目的逐渐变大,用这种弱类型的语言一直要到程序运行的时候才能检测出错误,为了开发人员能够在编译时就能发现代码的问题,现在很多大型的项目都希望Js能够支持强类型,就是指定变量的类型,比如Flow,Typescript。Typescript 是微软2012年推出的一种编程语言,属于 JavaScript 的超集,可以编译为 JavaScript 执行。 它的最大特点就是支持强类型和 ES6 class。

Wechaty本身是使用的Typescript编写。我们在编写机器人的时候,也可以使用Typescript。

7.怎么知道好友自动通过的条件

有同学问,不想通过所有的好友请求,怎么办呢?

这里可以参考这个示例:https://github.com/Chatie/wechaty/blob/master/example/friend-bot.ts
friend Event API:
http://chatie.io/wechaty/#Wechaty+on

Wechaty提供的接口可以通过验证信息来过滤掉一部分发送请求的好友。具体的的代码:

.on('friend', async (contact, request) => {
  if (request && request.hello == ‘ding’) {
    request.accept()
  }
})

当验证信息是’ding’才会自动添加好友。

8.支持红包类型的消息吗?

Wechaty提供的接口可以识别机器人接收到的消息时什么类型的,因为Wechaty是基于web的,所以不能做领取红包的操作。

可以参考我的这个代码:
https://github.com/TingYinHelen/wechaty-test/blob/master/index.js
在49行的地方,判断message的类型,红包信息的m.type() =10000,当m.type() == 10000的时候,说明是红包,机器人就会@一下我自己,提醒我赶紧抢红包。

9. 如何防止封号

需要控制消息发送频率,过高的发送频率会容易被识别。另外账号最好是经过认证、绑定过银行卡,日常也在手机端正常使用(如发朋友圈之类)。总而言之,让你的号行为看起来像是一个真人在用。

还有很重要的,别用于发广告、骚扰,否则被举报很容易被封。

10.自己的账号登录不了网页版微信

微信账号太年轻,需要换一个早期注册的账号。其实就是遭遇了上面所说的号被封了。

11.机器人掉线问题解决

这里建议使用Server酱。网页版微信会经常把用户踢下线,Server酱可以帮助我们知道Wechaty发生了哪些异常。 Server酱,他是一个能从服务器推报警和日志到手机的工具,非常简单易操作:

1.用GitHub账号登入后,获得一个SCKEY(在「发送消息」页面) 按照引导,点击“微信推送”,扫码关注“方糖”后即可完成绑定

2.在login、logout、scan、和error事件触发后,将一些关键信息往 http://sc.ftqq.com/SCKEY.send 发Get请求,我自己的微信里就收到消息了。

这样,当我的机器人出现各种异常情况,我随时随地都可以知道,需要再扫码进入的时候,方糖这公众号就会把二维码推到我的手机上,我只要用机器人的微信扫码就可以了。

12. 怎么终止程序

终止程序命令: ctrl + c

13.怎么区分群和私聊

机器人在获取message的时候可以判断message.room()方法返回值,当返回是null,就说明是私聊,返回不是null就是群聊。null在js 中转为Boolean之后是false。所以直接看代码

const room = m.room()
if(room){
  //这里是群聊
}else{
  //这里是私聊
}
14.wechaty的适用场景

Wechaty的适用场景非常的广泛,Wechaty 提供了一套非常方便的接口。以前我们总是去App store中安装App,然后使用App来满足我们对应用场景的一些需求。然后现在使用手机,大多数的时间都花在了微信上。不管是私聊,群聊还是看朋友圈,我们不得不承认,微信占据了我们生活的很大一部分时间。那么为何不省去下载App的时间,就在微信上满足我们对应用的需求。预定机票,酒店,租房,天气查询,周边美食查询。可以说,chat bot可以实现大多数App实现的功能,只是需要开发者自己设计。chat bot能简化一切机械的人力成本,比如:拉人入群,发送欢迎语,自动添加好友,自动踢人。说到自动踢人,其实很多群里是群主手动踢人,在wechaty developer home微信群中,实现自动踢人,当有人在群里发送无关消息时,群里的成员可以@此人,用微信表情投票,得票超过三个,机器人将自动踢人。所以chat bot能做的事情是在太多了。如果你感兴趣在可以在Wechaty的blog中有发现很多开发者写得技术文章https://blog.chatie.io/,和wechaty的实际应用。当然你也可以发挥想象,做出更加有意思的微信机器人。

15.执行docker run要在项目目录下

很多同学都有这个问题,在下载get start项目之后,没有进入到项目目录就开始运行代码了,需要进入到项目目录下再运行

cd wechaty-getting-started

下面是五花八门的安装问题

16.安装docker的问题

Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"

Looks like something went wrong in step ´Checking if machine default exists´... Press any key to continue...

重启进Bios设置一下

Security->Virtualization->Intel(R)Virtualization Technology From Disabled->Enabled

17.ash.exe找不到的问题

如果安装路径不在C盘可能遇到这个的问题,手工浏览一下就好

18.boot2docker下载不了

手工下载下来,放在C:\users\用户名.docker\machine\cache下

19.bash.exe找不到问题

下载下面提供的链接,然后安装。
https://github.com/boot2docker/boot2docker/releases/download/v18.01.0-ce/boot2docker.iso

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,505评论 15 147
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,468评论 0 120
  • 写这篇文章主要是为了今后毕业论文素材上的整理,同时对docker进行巩固温习。大纲: docker简介docker...
    胡图仙人阅读 7,389评论 2 96
  • 教学时,有热爱彩铅的 同学问起水溶彩铅和油性彩铅有什么区别。今天就集中解决一下! 1.水溶彩铅比油性彩铅铅质要软。...
    孟汐阅读 1,491评论 6 14