wechaty撸一个属于自己的微信机器人(Python版接入文心一言)

2023-11-09 17:11

本文主要是介绍wechaty撸一个属于自己的微信机器人(Python版接入文心一言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

说明:

机器人的框架找了很久,由于很多框架都不能使用了或者封号率极高,最后选择了wewechaty,wechaty是可以使用ipad协议,主要是以node写的,因为打算机器人接入爬虫项目,所以特意用了python版本,对于python版网上教程太少且模糊且时间过于久远,所做以此文为采坑记录。

前期准备:

token:
padlocal (新用户可以免费领取七天)

百度智能云:千帆模型 (不需要接入文心一言的可以绕过)

可能用到的网站:

wechaty中文文档 :node版本可以查看相关语法与使用,大致python差不多

python-wechaty:python文档没有node版本齐全 大致也能搭建

快速搭建

提示:本文默认都对Docker的基本使用有所了解的基础下进行

总体来说分为两步:

1.Docker启动Padlocal网关服务的容器(固定)

2.Docker启动自己的python服务的容器连接启动的网关服务(自己的机器人代码)

第一步:

新建SH文件 start.sh

export WECHATY_LOG="verbose"
export WECHATY_PUPPET="wechaty-puppet-padlocal"
export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal_51d6b6a6a60546a7b33a5041c1e44a72"
export WECHATY_PUPPET_SERVER_PORT="8004"
export WECHATY_TOKEN="0c7b8f97-f3cc-40a5-a537-d492fd689801"
sed -i s/token=.*/token=$WECHATY_TOKEN/g .envdocker run -ti \--name wechaty_puppet_service_token_gateway \--rm \-e WECHATY_LOG \-e WECHATY_PUPPET \-e WECHATY_PUPPET_PADLOCAL_TOKEN \-e WECHATY_PUPPET_SERVER_PORT \-e WECHATY_TOKEN \-p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT" \wechaty/wechaty:0.65

主要参数说明:

WECHATY_PUPPET:协议标识 这里我们使用wechaty-puppet-padlocal作为ipd协议

WECHATY_PUPPET_PADLOCAL_TOKEN:上文中提到的申请的token,必填必正常否则无法使用

WECHATY_PUPPET_SERVER_PORT :端口号,需要服务器开放该端口,供python服务调用

WECHATY_TOKEN:随机生成UUID,避免服务被他人窃取 可用import uuid;print(uuid.uuid4())或者在线生成uuid

其余参数可以不变

运行该文件,启动Padlocal网关,启动后如提示信息为微信登录图片,可复制到浏览器扫码登录。

第二步:

新增python项目,bot.py文件,以下为官方示例删减后代码,主要图一个方便理解

import asyncio, os
from wechaty import Wechatyclass MyBot(Wechaty):async def on_message(self, msg):from_contact = msg.talker()text = msg.text()room = msg.room()if text == 'ding':conversation = from_contact if room is None else roomawait conversation.ready()await conversation.say('dong')os.environ['TOKEN'] = "1fe5f846-3cfb-401d-b20c-XXXXX"
os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT'] = "127.0.0.1:9001"
bot = MyBot()#bot.on('scan', lambda status, qrcode, data: print(
#    'Scan QR Code to login: {}\nhttps://wechaty.js.org/qrcode/{}'.format(status, qrcode)))
#bot.on('login', lambda user: print('User {} logged in'.format(user)))
#bot.on('message', lambda message: print('Message: {}'.format(message)))

主要说一下作用:收到消息为ding的消息,回复dong

msg.talker() 获取消息的发送者

msg.text() 获取消息内容

msg.room() 群里消息,如果消息不是来自群聊, 则返回None 特别注意:如果是群里对象msg.talker()也会有值,值为当前群里发送消息的人

conversation.ready() 当所有数据加载完成时发出(如果是个人使用主体为talker()回复,如是群使用主体为room())

conversation.say() 发送消息(同上如果是个人使用主体为talker()回复,如是群使用主体为room()),
如果是群聊发送指定人则填入第二个参数即可,第二个参数为:msg.talker().contact_id

os.environ['TOKEN'] 填入之前生成的随机数uuid

os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT']刚部署的服务器地址 端口需要与之前第一步设定的一致

bot.on方法

监听事件:

例如scan事件:当需要扫码登录时触发,还有比如login登录成功后触发,room-join加入群聊触发更多详情可建文档

还需要注意的几个重要方法:

1.msg.is_self() 是否自己(机器人)发出的消息,机器人发的消息也会进入当前函数

2.msg.type() 判断消息类型,注意:比如加入群聊或者退出群里都会进入当期函数

更多可见文档

本地运行的话就可以实现一个简单的机器人,向其发送ding则会收到dong的回复

至此,微信机器人搭建,可根据个性需求回复个性内容。

如需要部署到服务器还需要构建docker镜像,以下为懒人办法创建Dockerfille,Makefile,requirements.txt,如以下目录
在这里插入图片描述

Dockerfille


WORKDIR /botCOPY requirements.txt requirements.txtCOPY Makefile MakefileRUN make installCOPY . .CMD [ "make", "run"]

基于python3.8的环境

Makefile

P=$(shell pwd).PHONY: build
build: docker build -t py-wechaty-template-bot:latest ..PHONY: dockerrun
dockerrun:docker run -it -d -v $(P):/bot --name bot -p 8005:8005 py-wechaty-template-bot:latest.PHONY: bot 
bot:make buildmake dockerrun.PHONY: install
install:pip install -r requirements.txt.PHONY: run
run:python bot.py

注意端口不能与之前的服务端口重复

requirements.txt

wechaty
wechaty-plugin-contrib
quart
python-dotenv
docker
apscheduler
dataclasses-json
urllib3 == 1.26
pymysql

特别注意:urllib3最好安装1.26版本本人经过几次失败后总结

在当前目录运行 make bot 即可部署上服务器

文心一言

第一步开通服务

打开千帆模型,选中左侧菜单计费管理,选择开通服务
在这里插入图片描述

选中预置服务 勾选前三个 点击下一步
在这里插入图片描述

根据提示直到开通成功

选择左边应用接入,创建应用,输入应用名称描述、创建
在这里插入图片描述

记住API Key和Secret Key 鉴权接口需要
在这里插入图片描述

第二步调用api

获取鉴权的token
鉴权文档
在这里插入图片描述

使用ERNIE-Bot模型 文档地址:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/jlil56u11

重点说一下messages参数格式

messages是一个聊天上下文信息,一个成员代表单轮对对话,数组长度必须为奇数

例如:

 messages=[{"role": "user","content": "你好"},{"role": "assistant","content": "你好!"},{"role": "user","content": "你叫什么名字"}]

role:user: 表示用户 assistant: 表示对话助手

content:对话内容

每次为奇数也就是代表用户最后的提问,如果长度为1那么就是一次新的回话

接下来封装api,结合微信机器人就可以打造自动回复的微信机器人了

这篇关于wechaty撸一个属于自己的微信机器人(Python版接入文心一言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/m0_50934746/article/details/133136991
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/377473

相关文章

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.