微信机器人
基于 Docker 的微信机器人项目,实现群聊自动化管理、关键词回复、ChatGPT 问答等功能
项目简介
微信机器人项目是我在加入信安 Aurora 后,发现群里有个机器人,但微信网页版已经无法使用,因此开始研究如何实现微信机器人。通过这个项目,我学习了 Python 面向对象编程、Linux 基础、服务器运维和 Docker 等相关知识。
技术实现
1. Windows 版本
最初使用的是 Windows 版本,但每次都需要在本地电脑上运行,还需要降级微信版本,使用几天后觉得太麻烦就放弃了。
2. Docker 版本
后来找到了一个 wechat-bot 的 Docker 项目,购买服务器后部署了这个 Docker 容器。通过特定端口访问服务器登录微信,然后启动 hook 程序即可。主要的开发工作集中在 hook 消息后的功能开发。
实现功能
1. 进群欢迎
处理邀请与扫描入群的不同情况。
from wesdk import *
if __name__ == "__main__":
bot = Bot()
bot.register("on_open", lambda ws: logging("Connecting to WeChat service .."))
bot.register("on_close", lambda ws: logging("Byebye~"))
bot.register("join_room", lambda msg: (
bot.send_msg('\n٩(๑^o^๑)۶\n欢迎新来的小老虎!!!\n这里是深大福建同乡会\n请将群备注修改为:\n年级【研/本】-姓名-专业-地区\n如需帮助请说:\n小福!help!help!',
msg['content']['id1'], msg['content']['id1'],
msg['content']['content'].split('"')[-2])
if('邀请' in msg['content']['content'])
else bot.send_msg('\n٩(๑^o^๑)۶\n欢迎新来的小老虎!!!\n这里是深大福建同乡会\n请将群备注修改为:\n年级【研/本】-姓名-专业-地区\n如需帮助请说:\n小福!help!help!',
msg['content']['id1'], msg['content']['id1'],
msg['content']['content'].split('"')[1])
if('扫描' in msg['content']['content'])
else None
), print(msg))
bot.run()
2. 关键词回复
支持自定义关键词回复功能,可以动态添加和删除关键词。
key_replys = {
"你好": "你好",
"晚安": "晚安",
"早安": "早安",
"早上好": "早上好",
}
def addkey(keyword):
if(keyword == '.k -a'):
content = ''
for i in key_replys:
content = content + f'{i}:{key_replys[i]}\n'
else:
keywords = keyword.split(" ", 2)
if(len(keywords) != 3):
content = '输入格式错误,请重新输入'
else:
key_replys[keywords[1]] = keywords[2]
content = '添加匹配规则成功'
return content
3. ChatGPT 问答
集成 ChatGPT 功能,支持智能问答。
def get_chatgpt(keyword):
if(keyword.startswith('小福小福')):
keyword = keyword[5:]
elif(keyword.startswith('.chat')):
keyword = keyword[6:]
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(("服务器地址", 1234))
data = keyword
s.sendall(data.encode())
data1 = s.recv(1024)
data1 = data1.decode()
data1 = data1[1:]
return(data1)
4. 天气查询
支持查询指定地区的天气信息。
def get_weather(keyword):
if(keyword == '.w'):
keyword = "广东省深圳市南山区"
else:
keyword = keyword[3:]
url = f'https://www.msn.cn/zh-cn/weather/forecast/in-{keyword}'
resp = requests.get(url)
resp.encoding = 'utf-8'
html = etree.HTML(resp.text)
# 解析天气信息...
return content
5. 每日运势
随机生成每日运势,增加趣味性。
def get_ys():
list_1 = ['$大凶$', '$中凶$', '$凶$', '$小凶$', '$小吉$', '$吉$', '$中吉$', '$大吉$']
weight = [1, 2, 3, 4, 4, 3, 2, 1]
# 根据运势生成宜忌内容...
return content
6. 功能锁
支持动态开启和关闭特定功能。
functionlock = {
'.w': 1,
'.l': 0,
'.k': 1,
'.dk': 1,
'.chat': 1,
'小福小福 ': 1
}
项目总结
通过这个项目,我深入学习了:
- Python 面向对象编程
- Linux 系统基础操作
- Docker 容器化部署
- WebSocket 通信
- 服务器运维
这个项目不仅解决了实际需求,也让我在技术实践中获得了宝贵的经验。