一个简单有趣的微信聊天机器人
微信已經(jīng)成了中國人生活中基本的通訊工具(除了那些自由開源人士以外),前兩天發(fā)現(xiàn)微信機器人的項目,其實早就有了。想著自己也做一個吧,順便加了一些小小的功能。
釋放我的機器人
微信掃一掃加他,跟他尬聊吧,把他拽到群里調戲他。
qrcode.jpg具體功能下面會介紹。
工具
-
手機
微信登陸必須得有手機端登陸才能使用網(wǎng)頁登陸,因為要掃一掃
-
Python 平臺
該項目基于 Python 開發(fā),所以至少得來個嵌入式的開發(fā)板,或者電腦,或者...云服務器 ;-),如果要保證長時間開啟與話,最好使用云服務器。
開發(fā)微信機器人
該項目基于 Github 上的 wxpy,使用文檔在 這里。中文版的,所以我就不介紹這個怎么使用了。簡單描述一下
創(chuàng)建機器人
from wxpy import * bot = Bot()注冊消息回復
機器人對好友、群聊中 at 他的人進行回復,在群聊中同時統(tǒng)計每個人的發(fā)言次數(shù)和第一次發(fā)言的時間,將這些信息實時存儲在本地,以防程序錯誤導致數(shù)據(jù)丟失。
消息回復中的機器人使用 圖靈機器人, 可免費申請 API,調用他。也可以使用 小 I 機器人。這兩個都是深度整合在項目里的。
@bot.register([Friend, Group]) def reply_friend(msg):"""消息自動回復"""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)自動接受好友申請
@bot.register(msg_types=FRIENDS) def auto_accept_friends(msg):"""自動接受好友請求"""# 接受好友請求new_friend = msg.card.accept()# 向新的好友發(fā)送消息new_friend.send('哈哈,我們現(xiàn)在是超級好的好朋友了呢~~')添加計劃任務
光回復怎么夠,還要做一些小小的有趣的功能,我這里添加了兩個統(tǒng)計,一個是起床時間統(tǒng)計,另一個是發(fā)言統(tǒng)計。
當天群聊的用戶第一次發(fā)言作為起床時間,雖然有些不嚴謹,但畢竟功能是受限制的。
然后每天的 9 點發(fā)布一次起床排行榜, 20 點發(fā)布一次發(fā)言排行榜。當然其實主動發(fā)送 “起床排行榜”、“發(fā)言排行榜” 也會回復當前的排行。
起床排行榜
rank_getup.jpg發(fā)言排行榜
rank_speak.jpg實現(xiàn)
class ScheduleThread(threading.Thread):"""計劃任務線程"""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 = "排行日報\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 = "排行日報\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聊聊
展示兩個機器人互相尬聊的情況是怎么樣的。
chat.jpg部署
創(chuàng)建機器人時添加一個 console_qr 參數(shù), True 時表示在終端顯示二維碼,False 表示用圖片程序打開二維碼。按情況來,如果在沒有界面的云服務器上,那就在終端打開,如果只能連 tty ,那最好的辦法就是生成一張圖片,放到指定的 FTP 或者云盤目錄,然后本地打開掃描,或者建個簡單的 HTTP 服務器展示圖片,方法很多,根據(jù)自己情況來吧。
原文地址:一個簡單有趣的微信聊天機器人
我的博客:時空路由器
總結
以上是生活随笔為你收集整理的一个简单有趣的微信聊天机器人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试中的数据统计分析的验证:python
- 下一篇: 在线免费接口