一个简单有趣的微信聊天机器人
微信已經(jīng)成了中國(guó)人生活中基本的通訊工具(除了那些自由開(kāi)源人士以外),前兩天發(fā)現(xiàn)微信機(jī)器人的項(xiàng)目,其實(shí)早就有了。想著自己也做一個(gè)吧,順便加了一些小小的功能。
釋放我的機(jī)器人
微信掃一掃加他,跟他尬聊吧,把他拽到群里調(diào)戲他。
qrcode.jpg具體功能下面會(huì)介紹。
工具
-
手機(jī)
微信登陸必須得有手機(jī)端登陸才能使用網(wǎng)頁(yè)登陸,因?yàn)橐獟咭粧?/p>
-
Python 平臺(tái)
該項(xiàng)目基于 Python 開(kāi)發(fā),所以至少得來(lái)個(gè)嵌入式的開(kāi)發(fā)板,或者電腦,或者...云服務(wù)器 ;-),如果要保證長(zhǎng)時(shí)間開(kāi)啟與話,最好使用云服務(wù)器。
開(kāi)發(fā)微信機(jī)器人
該項(xiàng)目基于 Github 上的 wxpy,使用文檔在 這里。中文版的,所以我就不介紹這個(gè)怎么使用了。簡(jiǎn)單描述一下
創(chuàng)建機(jī)器人
from wxpy import * bot = Bot()注冊(cè)消息回復(fù)
機(jī)器人對(duì)好友、群聊中 at 他的人進(jìn)行回復(fù),在群聊中同時(shí)統(tǒng)計(jì)每個(gè)人的發(fā)言次數(shù)和第一次發(fā)言的時(shí)間,將這些信息實(shí)時(shí)存儲(chǔ)在本地,以防程序錯(cuò)誤導(dǎo)致數(shù)據(jù)丟失。
消息回復(fù)中的機(jī)器人使用 圖靈機(jī)器人, 可免費(fèi)申請(qǐng) API,調(diào)用他。也可以使用 小 I 機(jī)器人。這兩個(gè)都是深度整合在項(xiàng)目里的。
@bot.register([Friend, Group]) def reply_friend(msg):"""消息自動(dòng)回復(fù)"""print(msg)if isinstance(msg.chat, Group):group = msg.chat.namename = msg.member.nameif group in stat:if name in stat[group]['count']:stat[group]['count'][name] += 1else:stat[group]['count'][name] = 1flag = Truefor rank in stat[group]['rank']:if name == rank['name']:flag = Falsebreakif flag:stat[group]['rank'].append({'name': name, 'time': time.strftime("%H:%M:%S", time.localtime())})else:stat[group] = {"count": {name: 1}, 'rank': [{'name': name, 'time': time.strftime("%H:%M:%S", time.localtime())}, ]}if msg.text == "發(fā)言排行榜":g = bot.groups().search(group)[0]if not stat[g.name]:returnmsg_text = ""index = 1count = stat[g.name]['count']for name in sorted(count, key=lambda x: count[x], reverse=True):# print("{}: {} {}".format(index, rank['name'], rank['time']))msg_text += "{}: {} 發(fā)言了 {} 次\n".format(index, name, count[name])index += 1if msg_text:msg_text = "發(fā)言排行榜:\n" + msg_textg.send(msg_text)if msg.text == "起床排行榜":g = bot.groups().search(group)[0]if not stat[g.name]:returnmsg_text = ""index = 1for rank in stat[g.name]['rank']:# print("{}: {} {}".format(index, rank['name'], rank['time']))msg_text += "{}: {} {}\n".format(index, rank['name'], rank['time'])index += 1if msg_text:msg_text = "起床排行榜:\n" + msg_textg.send(msg_text)with open('stat.json', 'w') as fh:fh.write(json.dumps(stat))if not msg.is_at:returnreturn tuling_auto_reply(msg)自動(dòng)接受好友申請(qǐng)
@bot.register(msg_types=FRIENDS) def auto_accept_friends(msg):"""自動(dòng)接受好友請(qǐng)求"""# 接受好友請(qǐng)求new_friend = msg.card.accept()# 向新的好友發(fā)送消息new_friend.send('哈哈,我們現(xiàn)在是超級(jí)好的好朋友了呢~~')添加計(jì)劃任務(wù)
光回復(fù)怎么夠,還要做一些小小的有趣的功能,我這里添加了兩個(gè)統(tǒng)計(jì),一個(gè)是起床時(shí)間統(tǒng)計(jì),另一個(gè)是發(fā)言統(tǒng)計(jì)。
當(dāng)天群聊的用戶第一次發(fā)言作為起床時(shí)間,雖然有些不嚴(yán)謹(jǐn),但畢竟功能是受限制的。
然后每天的 9 點(diǎn)發(fā)布一次起床排行榜, 20 點(diǎn)發(fā)布一次發(fā)言排行榜。當(dāng)然其實(shí)主動(dòng)發(fā)送 “起床排行榜”、“發(fā)言排行榜” 也會(huì)回復(fù)當(dāng)前的排行。
起床排行榜
rank_getup.jpg發(fā)言排行榜
rank_speak.jpg實(shí)現(xiàn)
class ScheduleThread(threading.Thread):"""計(jì)劃任務(wù)線程"""def run(self):global schedule_timeglobal botglobal statwhile 1:time.sleep(300)cur_hour = time.strftime("%H", time.localtime())# print("cur:{}\tschedule:{}".format(cur_hour, schedule_time))if cur_hour == schedule_time:continueelif cur_hour == '09':for group in bot.groups():print(group.name)if not stat[group.name]:continuemsg_text = ""index = 1for rank in stat[group.name]['rank']:# print("{}: {} {}".format(index, rank['name'], rank['time']))msg_text += "{}: {} {}\n".format(index, rank['name'], rank['time'])index += 1if msg_text:msg_text = "排行日?qǐng)?bào)\n起床排行榜:\n" + msg_textgroup.send(msg_text)elif cur_hour == '20':for group in bot.groups():print(group.name)if not stat[group.name]:continuemsg_text = ""index = 1count = stat[group.name]['count']for name in sorted(count, key=lambda x: count[x], reverse=True):# print("{}: {} {}".format(index, rank['name'], rank['time']))msg_text += "{}: {} 發(fā)言了 {} 次\n".format(index, name, count[name])index += 1if msg_text:msg_text = "排行日?qǐng)?bào)\n發(fā)言排行榜:\n" + msg_textgroup.send(msg_text)elif cur_hour == '00':stat = dict()with open('stat.json', 'w') as fh:fh.write('')schedule_time = cur_hour聊聊
展示兩個(gè)機(jī)器人互相尬聊的情況是怎么樣的。
chat.jpg部署
創(chuàng)建機(jī)器人時(shí)添加一個(gè) console_qr 參數(shù), True 時(shí)表示在終端顯示二維碼,False 表示用圖片程序打開(kāi)二維碼。按情況來(lái),如果在沒(méi)有界面的云服務(wù)器上,那就在終端打開(kāi),如果只能連 tty ,那最好的辦法就是生成一張圖片,放到指定的 FTP 或者云盤(pán)目錄,然后本地打開(kāi)掃描,或者建個(gè)簡(jiǎn)單的 HTTP 服務(wù)器展示圖片,方法很多,根據(jù)自己情況來(lái)吧。
原文地址:一個(gè)簡(jiǎn)單有趣的微信聊天機(jī)器人
我的博客:時(shí)空路由器
總結(jié)
以上是生活随笔為你收集整理的一个简单有趣的微信聊天机器人的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 测试中的数据统计分析的验证:python
- 下一篇: 在线免费接口