如何用6行代码写出微信微信智能聊天机器人人

拒绝访问 | www.1398.org | 百度云加速
请打开cookies.
此网站 (www.1398.org) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(38a6ae-ua98).
重新安装浏览器,或使用别的浏览器后使用快捷导航没有帐号?
Python实现微信聊天机器人(功能增强版)
03:28| 发布者:
简介:欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。对商业智能BI、数据分析挖掘、大数据、机器学习,python,R感兴趣同学加微信:fridaybifly,邀请你进入头条数据爱好者交流群 ...
欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。对商业智能BI、数据分析挖掘、大数据、机器学习,python,R感兴趣同学加微信:fridaybifly,邀请你进入头条数据爱好者交流群,数据爱好者们都在这儿。之前写过一篇 8行代码实现微信聊天机器人 - 知乎专栏 文章,代码很简洁,机器人也能自动回复群消息和好友消息。但是,想禁言的群,结果机器人却很活跃的在群内回复,打扰了大家清净,也惹了很多麻烦。这次我换用 itchat 库,熬了两天也没完全实现上面说的功能,不过也新增了些功能:1、能让机器人要么回复群消息,要么不回复。2、自动同意陌生人好友申请3、到整点时间,机器人会对微信群 群播报新闻这些功能很适合做微信营销运营、社区运营的人,有利于减少运营人员的枯燥乏味的重复性工作。不说这么多了,直接上代码:(不好排版,建议查看原文链接哈)import itchatimport timeimport requestsimport hashlib# 图灵机器人def get_response(msg, FromUserName):api_url = '/openapi/api'apikey = # data中有userd才能实现上下文一致的聊天效果。hash = hashlib.md5userid = hash.update(FromUserName.encode('utf-8'))data = {'key': apikey, 'info': msg, 'userid': userid }try:req = requests.post(api_url, data=data).jsonreturn req.get('text')except: returnitchat.auto_login#适合 个人间聊天@itchat.msg_register(['Text', 'Map', 'Card', 'Note', 'Sharing'])def Tuling_robot(msg):respones = get_response(msg['Content'], msg['FromUserName'])itchat.send(respones, msg['FromUserName']) #返回图片,录音,视频@itchat.msg_register(['Picture', 'Recording', 'Attachment', 'Video'])def download_files(msg):fileDir = '%s%s'%(msg['Type'], int(time.time)) msg['Text'](fileDir)itchat.send('%s received'%msg['Type'], msg['FromUserName'])itchat.send('@%s@%s'%('img' if msg['Type'] == 'Picture' else 'fil', fileDir), msg['FromUserName']) #自动同意陌生人好友申请@itchat.msg_register('Friends')def add_friend(msg): itchat.add_friend(**msg['Text'])itchat.send_msg('Nice to meet you!', msg['RecommendInfo']['UserName'])Message = '整点新闻:如何留住制造业人才 董明珠霸气送房'GroupsContainer = set"""#整点发新闻检测时间,到时间节点就触发程序执行群发消息的任务。本例子中是八点整触发程序执行群内新闻播报通过监控群聊,收集微信群的UserName并保存起来,方便后续群发。"""@itchat.msg_register('Text', isGroupChat = False) #isGroupChat为True,机器人可以回复群内消息,为False不能回复群内消息def broadcast(msg):response = get_response(msg['Content'], msg['FromUserName'])itchat.send(response, msg['FromUserName'])groups_json_list = itchat.get_chatroomsgroupsName = [nm.get('UserName')for nm in groups_json_list]groupsName = set(groupsName)for grpn in groupsName:GroupsContainer.add(grpn)while True:current_time = time.localtime(time.time)if ((current_time.tm_hour == 8) and (current_time.tm_min == 0) and (current_time.tm_sec == 0)):for grn in GroupsContainer: itchat.send(Message, grn)itchat.run欢迎关注 简书账号 邓旭东HIT欢迎关注 知乎账号 邓旭东HIT对商业智能BI、大数据分析挖掘、机器学习,python,R感兴趣同学加微信:fridaybifly,邀请你进入头条数据爱好者交流群,数据爱好者们都在这儿。转载请保留以下内容:本文来源自天善社区邓旭东HIT的博客(公众号)。
(window.slotbydup=window.slotbydup || []).push({
id: '2389871',
container: s,
size: '270,300',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2389872',
container: s,
size: '270,300',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2389873',
container: s,
size: '270,300',
display: 'inlay-fix'
关于威腾网什么是威腾网?
网站地图快速找到你想要的
微信扫一扫关注我们如何用 6 行代码写出微信聊天机器人
1. 与微信机器人的结缘
我一直和我的小伙伴在业余时间拍摄舞蹈教学视频,叫“舞哩”,原创了几百个视频,近千万的播放,所以就建了微信群来和粉丝交流。
当微信群超过100人以后,就必须要靠群主来手工拉人了,所以我在pad上注册了一个微信小号,让大家通过加小号进微信群,每天晚上9点,我登上这个小号,通过所有的好友请求,然后拉他们进来。有的时候会有几十个好友请求,我就先按一遍通过,然后用手机把这些新好友拍成照片,对照照片去通讯录里一个一个的找到这些好友,拉到微信群里。
直到有一次我出国玩,觉得Pad太沉了就没有带,这意味着有10天无法处理微信小号,等我回来以后,我发现了一个非常悲剧的事情......大概100多个好友请求,仅仅只是拍下这些好友请求,我就得拍好几十张照片!
这明明就是一些机械化的流水作业啊!这怎么能让一个程序员去完成呢?于是我开始梳理了我的需求,其实只有三个:
自动通过好友请求。
当我的粉丝和我微信聊天的时候,能通过关键词进行自动回复。毕竟问题80%都是一样的。
自动的把他们拉进群里。
所以我在GitHub上找到了Wechaty,发现只要几十行代码,就可以满足我的需求。最主要的是,机械化的流水操作,机器人做的比人工要好很多。
2. 一款简单的微信机器人框架介绍
GitHub上与微信机器人相关的开源项目有很多,通过JavaScript、Electron、Go、Perl、Python等等都可以实现。
因为我只对JavaScript比较熟悉,所以选择了Wechaty,他是使用Typescript进行编写的Node项目,是一个专门为个人微信号搭建的bot框架,使用Wechaty的API,只需要6行Javascript代码就可以搭建一个最简单的微信机器人,支持 Linux, Windows, Darwin(OSX/Mac) 和Docker。
我特别喜欢Wechaty的一点是,我不用关心任何实现逻辑,仅仅用JS写业务逻辑层面的事情,就可以了。当我把我需要做什么想清楚以后,JS实现起来,是非常简单便捷的。
Wechaty基本的实现原理,是通过Chrome实时监听微信网页版的各类信息,然后将抓取的信息封装成接口,供开发者使用。 她有9个基本的事件,基本上涵盖了我们Web微信上的所有事件,分别是:
scan事件会在需要扫码登陆微信的被触发
login事件会在机器人成功登陆后被触发
logout事件会在机器人掉线以后被触发
message事件会在有新消息的时候被触发
error事件会在程序出现error的时候被触发
friend事件会在有好友请求的时候被触发
room-join事件会在有人加入群时被触发
room-leave事件会在群主移好友出群时被触发
room-topic事件会在群名称被修改时被触发
另外,Wechaty将机器人、联系人、微信群、好友请求封装成类,分别是Wechaty、Contact、Message、和FriendRequest,这样我只要import这些包,就可以直接使用这些类里面的函数模拟微信的各种操作了。比如给指定的人发送消息,我只要用contact.say(‘hello’) 就可以了。Wechaty里面的函数名称起的非常人性化,使用JS进行业务逻辑编写的时候,读代码像和读英文文档一样流畅舒服。
3. 如何安装Wechaty
安装Wechaty有两种方式:
非常推荐使用Docker安装Wechaty,虽然我最开始是使用第二种方式,也正是因为我两种方式都试过,才会深深感慨出“Docker大法好” 。
两种方式的安装---Docker和NPM 我在这里进行简单的介绍:
安装Docker以后(可以点击这里查看如何安装docker),运行下面的命令,Wechaty就已经成功安装在电脑上了。
docker run -ti --rm --volume="$(pwd)":/bot zixia/wechaty run demo
首次运行以后会有如下的截图:
Docker会自动的将相关的包部署到电脑里面,安装成功后,以后再运行就会是如下的截图了:
Wechaty的编写者对这种特殊字体的热爱到疯狂的地步了,为了让大家了解的更清楚,我就把所有截图内容也就都放上来了。
通常情况下,我会将这串命令alias给wechaty:
alias wechaty='docker run -t -i --rm -e WECHATY_LOG="silly" --volume="$(pwd)":/bot zixia/wechaty:0.5.9’
并加入-e WECHATY_LOG="silly" 和后面的版本号:zixia/wechaty:0.5.9,然后这样运行:
wechaty run demo
-e WECHATY_LOG="silly" 是为了把wechaty的系统日志都打印出来,方便发现问题和代码调试,zixia/wechaty:0.5.9 在后面加了版本号,因为作者经常更新代码,最近的代码偶尔会出问题,0.5.9是我认为相对比较稳定的版本。
NPM $ npm install --save wechaty
$ node mybot.js
有以下几点值得注意的是:
Wechaty需要的Node版本最少在6以上,我现在在使用7。
有一些环境是需要安装Chromedriver的,根据版本不同,大家可能需要注意一下。
如果是在服务器上,需要到Script的脚本中,运行下xvfb.sh的脚本,为Chrome提供一个虚拟的运行环境,并根据运行后的提示,设置程序运行的环境变量。
同样可以设置WECHATY_LOG的值来打印系统日志:WECHATY_LOG=SILLY node mybot.js
关于服务器的说明
Wechaty依赖的很多包都在墙外,建议使用国外的VPS,我使用的是digitalocean 如果只是跑一个机器人服务的话,建议使2GB/2 CPUs 以上的配置,一个机器人服务会占用1G内存左右,如果配上swap的话,短期使用也可以。
4. 如何使用wechaty
环境部署好以后下面6行代码,就可以成功的实现基础的bot功能:将微信机器人收到的所有消息打印出来: const { Wechaty } = require('wechaty')
Wechaty.instance()
.on('scan', (url, code) =& console.log(`Scan QR Code to login: ${code}\n${url}`))
.on('login',
user =& console.log(`User ${user.name()} logined`))
.on('message',
message =& console.log(`Message: ${message.content()}`))
下面对这段代码进行简单的介绍:
scan事件:两个返回值
code:返回了扫描的状态
0:初始状态
200:已经成功登陆
201:微信已经扫码,等待确认
408:等待微信扫码中
url:登陆需要扫描的二维码图片的地址,你需要将这个url粘贴到浏览器中打开,进行扫码登陆
login事件:返回的user,代表登陆的用户,返回的是一个Contact的类型,打印出来,是可以看到你当前登陆的用户昵称的。通过user.id()可以获取用户唯一id,user.name()可以获取用户的微信昵称,user.weixin()可以获取用户的微信号。
message事件:返回的是message,代表收到的消息,是一个Message类型。通过message.content()可以获取到消息的内容,message.from()可以获取到消息的发送者,返回的是一个Contact类型。以上只是一些简单的接口介绍,更多详细的接口文档可以点击查看:Wechaty的接口文档 接口文档还在更新中,如果希望更多接口,直接clone源码查看代码,你会发现很多惊喜好玩的小东西。
除此之外,我还希望分享两个实用的Wechaty的工具:
qrcode-terminal
仅仅把需要扫描的二维码图片作为链接打印在屏幕上,复制链接到浏览器中再去扫描,依然很麻烦,我更希望在terminal上直接扫描二维码登陆进来,这样才能到达demo中的炫酷效果,只需要两步:
1.安装依赖包:
npm install qrcode-terminal
2.稍微修改下scan事件后的代码就可以了: wechaty.on('scan', (url, code) =& {
if (!/201|200/.test(String(code))){
let loginUrl = url.replace(/\/qrcode\//, '/l/')
require('qrcode-terminal').generate(loginUrl)
console.log(`${url}\n[${code}] Scan QR Code in above url to login: `)
虽然机器人可以稳定的跑在VPS中,但是网页版微信会经常把用户踢下线,所以我需要知道Wechaty的各种异常情况,有一个简单的第三方工具:Server酱,他是一个能从服务器推报警和日志到手机的工具,非常简单易操作:
1.用GitHub账号登入后,获得一个SCKEY(在「发送消息」页面) 按照引导,点击“微信推送”,扫码关注“方糖”后即可完成绑定2.在login、logout、scan、和error事件触发后,将一些关键信息往
发Get请求,我自己的微信里就收到消息了。
这样,当我的机器人出现各种异常情况,我随时随地都可以知道,需要再扫码进入的时候,方糖这公众号就会把二维码推到我的手机上,我只要用机器人的微信扫码就可以了。
恩,就是这样,我实现了闭着眼镜就可以拉人的美梦中。
当我开始使用机器人做所有的重复操作的时候,对于加群的工作,我有了进一步的思考,比如我把很多微商拉入黑名单,他们再也无法进入我的微信群;另外我写了个功能,在微信群中加入了管理员功能,这样管理员即使不是群主,也可以把用户踢出微信群;有的时候脑洞大开,还会做个恶作剧,专门收集群友撤回信息,娱乐大众......
忽然想起了一句话: “People should think, Bot should work”。 当机器能够帮助我们把机械化的工作完成之后,我们才会有更多的时间,思考真正有价值的事情。
Wechaty解放了我的一些重复性工作,我也希望能为Wechaty做点什么,所以我现在在业余时间更新Wechaty的文档,有的时候也会分享一些我在使用Wechaty时候遇到的问题,希望帮助更多的人能够快速上手使用Wechaty。
如果你对Wechaty感兴趣,希望一起交流,一起分享,共同学习,可以扫码添加"桔小秘"为好友,回复wechaty加入WECHATY DEVELOPERS' HOME。也可以顺便体验下wechaty实现的小功能。
<div class="like-count align-center" data-v-关注微口网微博
微信号:iweikou
源出处:i春秋(微信号: icqedu),作者傲客转发自:宅客频道(微信号:letshome)已获转发授权写在前面微信作为时下最in最热的移动端即时通讯App,把咱们的工作和日子严密联络到了一同。一个脑洞大开的程序猿写了用开源程序改了一个微信谈天机器人,而且在不断调试中给它赋予了n多好玩的功用比方防撤回信息之类。然后好死不死他在声称白帽黑客欢欣地的&“i春秋-信息安全魔法学院”微信群中做机器人的调试,所以分分钟被凶横的坏蛋们玩坏,这个小程序猿也被微信封号处理,作用坚强不息的程序员为了打破微信封闭又做了许多逗逼测验……由于工作过于搞笑,雷锋网特意向i春秋学院约稿,把故事前因作用收拾出来。截图较多,可是高潮迭起,值得看完。前段时刻用开源程序做了一个微信谈天机器人,放到i春秋魔法学院群里做调试。然后被一群黑客玩坏了。可是悉数进程仍是比照好玩的,所以记载下来这个工作的来龙去脉,不过提早声明,这么做是不对的,没有考虑作用就轻率跑代码测验也是不担任任的,分外是你不知道黑客们会用啥办法帮你测验,真的有封号的危险哦,请咱们不要学我!(真要测验也要用小号测验)来源--为啥要做这个死近来由于某些要素,想给自个找点工作干添补闲暇时刻,前一段时刻在Github上看到一个微信机器人的代码,大致功用即是用python完结一个命令行版的微信,内置了两个谈天机器人的API能够完结主动回复,但默许不敞开,所以方案试一下。程序跑起来大约即是这个姿态:&(图一)微信扫码登录后:(图二)去小黄鸡和小逗机器人API网站注册两个测验key,在代码中找到主动回复的变量设置成true就能够完结音讯主动回复,改好代码运转,在群里稍加引导,就被咱们玩起来了。(图三)(图四)防撤回机器人原理群里正玩着快乐,我开端看代码,音讯监听有些的代码大致是这么的:(图五)(图六)分类那么详尽,还有撤回音讯,我决断动起了做防撤回机器人的想法,即是在有人撤回音讯的时分用这个谈天机器人把撤回的音讯原封不动地发回来,这个想法出来后我就离作死越来越近了。有了上面代码的根底,撤回机器人的完结就不是难事了。最早处理最简略的文字撤回,在榜首个音讯分类中参加代码逻辑,将悉数文字音讯的文字和发信人缓存到一个字典中,构成这么一个字典构造:{&#39;某S&#39;: &#39;各位表哥,有机遇一同睡觉&#39;, &#39;某客&#39;: &#39;好啊好啊&#39;, &#39;大叔&#39;: &#39;py买卖&#39;}当有人撤回时,程序履行到撤回分支中,用撤回的人去找方才字典的key,取出字典中的value发送出去,拼接成如下代码:self.webwxsendmsg(&#39;\&&#39;+celSrc+&#39;\&撤回了音讯,撤回的音讯是:&#39;+self.msgdic.get(celSrc), msg[&#39;FromUserName&#39;])其间celSrc是撤回人,比方大叔撤回了音讯,那么“celSrc”即是大叔,从字典中找到key为“大叔”的方针,对应的value即是“py买卖”这么再把音讯发回到音讯源中就完结了这么的作用:“大叔”撤回了音讯,撤回的音讯是:py买卖。正本这种写法是有bug的,我先不说,能够鄙人面回复我,最佳带处理方案哦。调试进程我并没有分外好的python功底(我是做.NET、前端和node.js的,不过我胆大,啥代码都敢碰),而且手头没有python断点调试东西,只能经过print打印调试,而且犯二的用了自个的微信号调试,调试进程还算顺畅,很快就满意了底子需求:&(图三)&(图四)看着代码安稳运转了,我就去干其他了,就在这时分被群友玩坏了:(图九)(图一十)相似的超长音讯发了十几条摆布被我发现了,立刻封闭了程序,但现已晚了,我被微信关了小黑屋……&(图一十一)我知道到我没有写字数约束,致使群里发多长的音讯再撤回我都原封不动的宣告来,构成炸群做法。记住我被封杀前的终究几条音讯即是说我要写字数约束,可是微信并没有给我这个改正的机遇。&(图一十二)铁窗泪--微信小黑屋规矩探究微信被封是啥味道的?首要,发音讯必定没戏。&(图一十三)发个兄弟圈告诉下咱们吧,门都没有。&(图一十四)我底子与外界隔绝了联络,扔掉了任何期望,只望厚道改正,好好做人,就在这时,傲客(注:i春秋魔法学院微信群群主)给我发了个红包,我发现我居然能够正常抢红包。&(图一十五)红包功用不受约束的话,我是不是能够运用一下?&(图一十六)&(图一十七)哈哈哈,机(dou)智(bi)的傲客,我发红包他也发红包。发现这个新内地今后我最少能够用红包简略地跟我的微信老友交流了,能够让常联络的人加我小号,不会认为我不见。我找到了封号后的交流办法。感触与考虑早年在知乎上看到这么一篇文章,一个俄罗斯程序员,日子在终端里,只需任何工作花费时刻逾越了90秒,他必定会写一个脚本主动化完结。比方工作日黑夜九点今后这名程序员的运维效劳器中还有正在运转的SSH进程,就会给老婆发一个今日加班的短信,并从文本库中随机选择一句加班理由。早上8点45分效劳器中仍然没有活动的SSH进程会主意向BOSS发一封“今日我身体不适的”的邮件,并随机附上一段请假理由。还有一个老子要喝咖啡的脚本,这个脚本在履行今后,会先准确等候17秒,然后翻开一个SSH进程,长途衔接到公司的咖啡机,然后传送成堆代码曩昔,咖啡机就会煮一份中杯半咖啡因的拿铁咖啡,然后准确等候24秒后,再倒进咖啡杯里。这个脚本运转的全程,正好是这名程序员从自个的工作桌前动身,走到咖啡机前所需求花费的时刻。(此项目开源在github中:hacker-scripts)我的这次作死阅历也能够探究出更多的主动化处理方案,防撤回仅仅微信机器人的一个风趣的玩法,主动请假彻底不在话下,抛开微信,日子中那么多重复性操作也能够作为探究用代码去完结。试想一个iOS开发狗的某一天,清晨,音箱从你近来听过的播映列表中选择你最喜爱的歌曲叫你起床,并主动播报当气候候和空气质量,提示你是不是需求带伞带口罩,面包机早已烤好面包。出门后效劳器主意向优步宣告叫车恳求。到公司后主动将未完结的工作发到你的邮箱,并主动从项目处理体系中搜集新的bug,从AppStore中抓取低星评估并奉告你。你的微信能够主动回复客服推上来的重复性疑问,工作时刻长了主动提示你活动一下,女神来音讯主动回复永不失掉,写好的PPT、陈述、流程图放到某个文件夹中主动发送邮件给有关人,黑夜加班晚了主动发微信奉告老婆/爸爸妈妈……这悉数都来自你的代码,想想是不是蛮激动的?(宅客君标明,奇特的代码,跪服)尾巴高中时,黑夜做完工作,窝在一间小屋子中,拿着爸爸妈妈换下来的单色屏旧手机,背着爸爸妈妈悄悄的给心动的女性发短信,或核对当天的工作,或宛转的谈天表达心中的波涛。每条一毛钱,70字以内,安全的送抵达对方的手机上,放心、结壮。现在,微信成为了咱们最首要的交流办法。咱们多久没有发过短信,多久没有登过QQ?咱们的手机号码都已不再首要了,有微信就够了。微信供给的效劳当然便当,咱们的交际圈子大了,微信加的老友不断添加,人与人之间如同也越来越近,咱们如同能够联通悉数国际。但当微信真的无法为咱们效劳的时分,会发现,有那么一有些人只能存在你的回想中了……编者语这次“作死”工作的主角图南是一枚浸淫多年的程序猿,由于爱好,在i春秋进行了网络安全方面的学习,而这次损坏微信撤回机制的恶作剧也从一个周围面反映了微信的安全缝隙,幻想假定每自个都把这个防撤回机制编写入自个的微信,那么咱们往常谈天会由于错发、误发走漏多少隐私。嗯,这儿给i春秋点个赞,培育“人”的安全基因,让开发工程师具有安全知道,这么,在软件的开发进程中有备无患,处理危险于未然,才让信息年代充溢安全感。这篇文章编号1801,今后想阅览这篇文章直接输入1801即可。●这篇文章分类“黑客”,查找分类名能够获得有关文章。●输入m能够获取到文章目录这篇文章内容的有关群众号引荐黑客技能与网络安全↓↓↓(图一十八)Python编程↓↓↓(图一十九)更多引荐请看<>包含:程序人生、算法与数据构造、黑客技能与网络安全、大数据技能、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。传达核算机学习阅历、引荐核算机优异本钱:点击前往<>
关键字: 微信,聊天,机器人,死的,黑客,调试,程序,转载,信息,春秋,信号
看过本文的人还看过
人气:1334 更新:
人气:656 更新:
人气:536 更新:
人气:481 更新:
程序猿的更多文章
大家在看 ^+^
推荐阅读 ^o^
『中國邊疆研究與歷史書寫』研討會日程安排
过真伤己、过直伤人
中国人走得太远太快,灵魂跟不上了(深度好文)
他说第二,有人敢说第一吗?
猜你喜欢 ^_^
24小时热门文章
微信扫一扫
分享到朋友圈

我要回帖

更多关于 微信聊天机器人小冰 的文章

 

随机推荐