摘要:微信已經(jīng)成了中國人生活中基本的通訊工具除了那些自由開源人士以外,前兩天發(fā)現(xiàn)微信機(jī)器人的項(xiàng)目,其實(shí)早就有了。開發(fā)微信機(jī)器人該項(xiàng)目基于上的,使用文檔在這里。原文地址一個(gè)簡單有趣的微信聊天機(jī)器人我的博客時(shí)空路由器
釋放我的機(jī)器人微信已經(jīng)成了中國人生活中基本的通訊工具(除了那些自由開源人士以外),前兩天發(fā)現(xiàn)微信機(jī)器人的項(xiàng)目,其實(shí)早就有了。想著自己也做一個(gè)吧,順便加了一些小小的功能。
微信掃一掃加他,跟他尬聊吧,把他拽到群里調(diào)戲他。
具體功能下面會(huì)介紹。
工具
手機(jī)
微信登陸必須得有手機(jī)端登陸才能使用網(wǎng)頁登陸,因?yàn)橐獟咭粧?/pre>
Python 平臺(tái)
該項(xiàng)目基于 Python 開發(fā),所以至少得來個(gè)嵌入式的開發(fā)板,或者電腦,或者...云服務(wù)器 ;-),如果要保證長時(shí)間開啟與話,最好使用云服務(wù)器。開發(fā)微信機(jī)器人該項(xiàng)目基于 Github 上的 wxpy,使用文檔在 這里。中文版的,所以我就不介紹這個(gè)怎么使用了。簡單描述一下
創(chuàng)建機(jī)器人from wxpy import * bot = Bot()注冊消息回復(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)申請 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.name name = msg.member.name if group in stat: if name in stat[group]["count"]: stat[group]["count"][name] += 1 else: stat[group]["count"][name] = 1 flag = True for rank in stat[group]["rank"]: if name == rank["name"]: flag = False break if 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]: return msg_text = "" index = 1 count = 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ā)言了 {} 次 ".format(index, name, count[name]) index += 1 if msg_text: msg_text = "發(fā)言排行榜: " + msg_text g.send(msg_text) if msg.text == "起床排行榜": g = bot.groups().search(group)[0] if not stat[g.name]: return msg_text = "" index = 1 for rank in stat[g.name]["rank"]: # print("{}: {} {}".format(index, rank["name"], rank["time"])) msg_text += "{}: {} {} ".format(index, rank["name"], rank["time"]) index += 1 if msg_text: msg_text = "起床排行榜: " + msg_text g.send(msg_text) with open("stat.json", "w") as fh: fh.write(json.dumps(stat)) if not msg.is_at: return return tuling_auto_reply(msg)自動(dòng)接受好友申請@bot.register(msg_types=FRIENDS) def auto_accept_friends(msg): """ 自動(dò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)前的排行。
起床排行榜 發(fā)言排行榜 實(shí)現(xiàn)class ScheduleThread(threading.Thread): """ 計(jì)劃任務(wù)線程 """ def run(self): global schedule_time global bot global stat while 1: time.sleep(300) cur_hour = time.strftime("%H", time.localtime()) # print("cur:{} schedule:{}".format(cur_hour, schedule_time)) if cur_hour == schedule_time: continue elif cur_hour == "09": for group in bot.groups(): print(group.name) if not stat[group.name]: continue msg_text = "" index = 1 for rank in stat[group.name]["rank"]: # print("{}: {} {}".format(index, rank["name"], rank["time"])) msg_text += "{}: {} {} ".format(index, rank["name"], rank["time"]) index += 1 if msg_text: msg_text = "排行日報(bào) 起床排行榜: " + msg_text group.send(msg_text) elif cur_hour == "20": for group in bot.groups(): print(group.name) if not stat[group.name]: continue msg_text = "" index = 1 count = 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ā)言了 {} 次 ".format(index, name, count[name]) index += 1 if msg_text: msg_text = "排行日報(bào) 發(fā)言排行榜: " + msg_text group.send(msg_text) elif cur_hour == "00": stat = dict() with open("stat.json", "w") as fh: fh.write("") schedule_time = cur_hour聊聊展示兩個(gè)機(jī)器人互相尬聊的情況是怎么樣的。
部署創(chuàng)建機(jī)器人時(shí)添加一個(gè) console_qr 參數(shù), True 時(shí)表示在終端顯示二維碼,False 表示用圖片程序打開二維碼。按情況來,如果在沒有界面的云服務(wù)器上,那就在終端打開,如果只能連 tty ,那最好的辦法就是生成一張圖片,放到指定的 FTP 或者云盤目錄,然后本地打開掃描,或者建個(gè)簡單的 HTTP 服務(wù)器展示圖片,方法很多,根據(jù)自己情況來吧。
原文地址:一個(gè)簡單有趣的微信聊天機(jī)器人
我的博客:時(shí)空路由器
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38642.html
摘要:模塊是一個(gè)文件,以結(jié)尾,包含了對(duì)象定義和語句模塊讓你能夠有邏輯地組織你的代碼段。把相關(guān)的代碼分配到一個(gè)模塊里能讓你的代碼更好用,更易懂。命令執(zhí)行成功,執(zhí)行結(jié)果命令執(zhí)行失敗一秒后執(zhí)行關(guān)機(jī)命令 Python 模塊(Module) 是一個(gè) Python 文件,以 .py 結(jié)尾,包含了 Python 對(duì)象定義和Python語句 模塊讓你能夠有邏輯地組織你的 Python 代碼段。 把相關(guān)的代...
摘要:我的前一篇文章微信程序開發(fā)系列教程一開發(fā)環(huán)境搭建已經(jīng)介紹了微信服務(wù)器的開發(fā)環(huán)境搭建。本文作為開發(fā)系列的第二篇文章,介紹如何給您的微信訂閱號(hào)開發(fā)一個(gè)最簡單的問答服務(wù),非常好玩。 我的前一篇文章微信程序開發(fā)系列教程(一)開發(fā)環(huán)境搭建?已經(jīng)介紹了微信服務(wù)器的開發(fā)環(huán)境搭建。本文作為開發(fā)系列的第二篇文章,介紹如何給您的微信訂閱號(hào)開發(fā)一個(gè)最簡單的問答服務(wù),非常好玩。 這個(gè)系列的完整代碼在我的git...
摘要:行代碼實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人一寫在前面今天下午又學(xué)到了另一種有趣的玩法微信自動(dòng)回復(fù)機(jī)器人。將返回消息返回給微信消息的發(fā)送人。以此實(shí)現(xiàn)將微信個(gè)人號(hào)變身為聊天機(jī)器人。 30行代碼實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人 一、寫在前面 今天下午又學(xué)到了itchat另一種有趣的玩法---微信自動(dòng)回復(fù)機(jī)器人。 程序很簡單僅僅三十行代碼左右,實(shí)現(xiàn)了機(jī)器人自動(dòng)與你的微信好友聊天,下面是我的機(jī)器人小籠包跟自己微信好友聊...
摘要:學(xué)習(xí)筆記七數(shù)學(xué)形態(tài)學(xué)關(guān)注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學(xué)習(xí)筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現(xiàn)代方法基于區(qū)域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機(jī)制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個(gè)提問: pyth...
閱讀 1370·2021-09-30 09:55
閱讀 1895·2021-08-27 13:10
閱讀 2243·2019-08-29 17:22
閱讀 1297·2019-08-29 16:30
閱讀 3463·2019-08-26 18:37
閱讀 2347·2019-08-26 11:47
閱讀 1161·2019-08-23 14:44
閱讀 1739·2019-08-23 13:46