首页 > 编程语言 >wechaty撸一个属于自己的微信机器人(Python版接入文心一言)

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

时间:2023-11-11 19:38:05浏览次数:57  
标签:WECHATY Python bot python wechaty PUPPET msg 文心

前言

说明:

机器人的框架找了很久,由于很多框架都不能使用了或者封号率极高,最后选择了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 .env

docker 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 Wechaty


class 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 room
            await 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,如以下目录

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

Dockerfille

WORKDIR /bot

COPY requirements.txt requirements.txt

COPY Makefile Makefile

RUN make install

COPY . .

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 build
   make 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 即可部署上服务器

文心一言

第一步开通服务

打开千帆模型,选中左侧菜单计费管理,选择开通服务

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

选中预置服务 勾选前三个 点击下一步

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

根据提示直到开通成功

选择左边应用接入,创建应用,输入应用名称描述、创建

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

记住API Key和Secret Key 鉴权接口需要

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

第二步调用api

获取鉴权的token鉴权文档

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

使用ERNIE-Bot模型 文档地址:cloud.baidu.com/doc/WENXINW…

重点说一下messages参数格式

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

例如:

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

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

content:对话内容

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

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

标签:WECHATY,Python,bot,python,wechaty,PUPPET,msg,文心
From: https://blog.51cto.com/u_16174484/8319160

相关文章

  • tensorflow版本与CUDA、cuDNN、Python适配表
    从源代码构建 | TensorFlow(google.cn)......
  • python 执行脚本,并将输出打印到文件
    转载请注明出处:在使用python直接执行脚本时,执行的相关输出会打印到当前的控制台,如果想输出到指定的文件,可以采用以下几种方式:1.在启动时,使用>操作符,该操作符会将输出写入到指定文件,并覆盖原来文件内容如创建一个python脚本,内容如下:print("Thisisatest......
  • SMOGN算法的Python实现:不平衡数据的深度学习回归
      本文介绍基于Python语言中的smogn包,读取.csv格式的Excel表格文件,实现SMOGN算法,对机器学习、深度学习回归中,训练数据集不平衡的情况加以解决的具体方法。  在不平衡回归问题中,样本数量的不均衡性可能导致模型在预测较少类别的样本时表现较差;为了解决这个问题,可以使用SMOTE(Syn......
  • python 编程模拟题(一)
    python编程模拟题,要求:源代码可以拍照发给老师,也可以手抄带过来。可以参考之前自己的代码或语法,也可以参考地址的语法讲解:https://www.runoob.com/python/python-basic-syntax.html 1.  获得用户输入的一个字符串,将字符串逆序输出,同时紧接着输出该字符串所包含字符......
  • python题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个
    程序分析:无。实例(Python2.0+)#!/usr/bin/python#-*-coding:UTF-8-*-if__name__=='__main__':i=0j=1x=0while(i<5):x=4*jforiinrange(0,5):if(x%4!=0):breakelse:i......
  • python flask虚拟环境 uwsgi nginx Supervisor 宝塔面板部署
    安装部署对应的python版本1.安装虚拟环境插件virtualenvpipinstallvirtualenv2.创建虚拟环境virtualenv/www/wwwroot/项目/envvirtualenv+路径3.激活虚拟环境source/www/wwwroot/项目/env/bin/activate4.退出虚拟环境的指令deactivate这里不用管,需要退出的时......
  • python3: dlt - 数据结构2
    python3:dlt-数据结构2    一、源程序1[wit@fedoranull]$cattest.py2#!/usr/bin/envpython334567#file_name=test.py8#python_verion=3.11.1910111213#testthisscript14defmsg():15print......
  • Python中的字符编码
    一、发展史 1、前提字符编码只跟文本数据和字符串有关系,它跟视频文件、音频文件等无关2、计算机只能识别二进制数,详解如下二进制数即由0和1组成的数字,例如010010101010。计算机是基于电工作的,电的特性即高低电平,人类从逻辑层面将高电平对应为数字1,低电平对应为数字0,这......
  • Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入
    从表格中选择数据要从MySQL中的表格中选择数据,请使用"SELECT"语句:示例选择"customers"表格中的所有记录,并显示结果:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",datab......
  • Python的流程控制
    一、流程控制控制事物的执行流程1.顺序结构#自上而下依次执行,我们前面写的代码都是顺序执行的2.分支结构#根据不同的条件执行不同的分支3.循环结构#言外之意就是重复执行二、分支结构1、单分支if 条件:    条件成立之后要执行的代码块2、双分支if 条......