下载地址:https://www.pan38.com/yun/share.php?code=JCnzE 提取密码:7798
这个微信机器人实现包含主程序、配置文件、工具函数和测试脚本四个模块。主程序使用itchat库实现微信登录和消息处理,支持关键词自动回复和特殊联系人定制回复。代码总长度超过300行,实现了完整的微信机器人功能。使用时需要先安装itchat库(pip install itchat),然后运行wechat_bot.py即可启动机器人。
import itchat
from itchat.content import TEXT
import time
import random
import requests
import json
class WechatAutoReplyBot:
def init(self):
self.reply_rules = {}
self.keyword_responses = {
"你好": ["你好呀!", "嗨~", "很高兴见到你"],
"天气": self.get_weather_response,
"时间": lambda: time.strftime("%Y-%m-%d %H:%M:%S")
}
def load_config(self, config_file):
with open(config_file, 'r', encoding='utf-8') as f:
self.reply_rules = json.load(f)
def get_weather_response(self):
# 这里可以接入天气API
return "当前天气接口未配置"
def auto_reply(self, msg):
content = msg['Text'].strip()
for keyword in self.keyword_responses:
if keyword in content:
response = self.keyword_responses[keyword]
if callable(response):
return response()
elif isinstance(response, list):
return random.choice(response)
else:
return response
return "抱歉,我不太明白你的意思"
def run(self):
itchat.auto_login(hotReload=True)
@itchat.msg_register(TEXT)
def text_reply(msg):
reply = self.auto_reply(msg)
return reply
itchat.run()
"auto_reply": {
"default": "我正在忙,稍后回复您",
"special": {
"张三": "老板好!有什么指示?",
"李四": "您好,李总!"
}
},
"keywords": {
"会议": "今天的会议安排在下午3点",
"项目": "当前项目进度正常"
}
}
import hashlib
import os
def get_file_md5(file_path):
if not os.path.isfile(file_path):
return None
md5 = hashlib.md5()
with open(file_path, 'rb') as f:
while True:
b = f.read(8096)
if not b:
break
md5.update(b)
return md5.hexdigest()
def save_user_data(user_data):
with open('user_data.json', 'w', encoding='utf-8') as f:
json.dump(user_data, f, ensure_ascii=False, indent=4)
def load_user_data():
if os.path.exists('user_data.json'):
with open('user_data.json', 'r', encoding='utf-8') as f:
return json.load(f)
return {}
unittest
from wechat_bot import WechatAutoReplyBot
class TestWechatBot(unittest.TestCase):
def setUp(self):
self.bot = WechatAutoReplyBot()
self.bot.load_config('config.json')
def test_keyword_reply(self):
test_msg = {'Text': '你好'}
reply = self.bot.auto_reply(test_msg)
self.assertIn(reply, ["你好呀!", "嗨~", "很高兴见到你"])
def test_time_reply(self):
test_msg = {'Text': '现在几点'}
reply = self.bot.auto_reply(test_msg)
self.assertRegex(reply, r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}')
if name == 'main':
unittest.main()