Git Product home page Git Product logo

wxbot's Introduction

WxBot

What's this?

一个还算有意思的wechat robot项目,理想将其设计成一个多功能的机器人助手 😈

🔔 注意:

  1. 使用本项目之前需要您已经配置好相关的 微信的hook 类软件,那么只需要在这类软件上设置回调地址即可
  2. 本项目已接入Dean DLL千寻vlw三个框架,如果您有其他框架,可自行添加(参考framework目录,实现IFramework接口即可),或联系我添加
  3. 本项目不提供任何hook类软件,您需要利用搜索引擎自行寻找
  4. 本项目暂时只支持HTTP协议,关于websocket协议支持目前不考虑
  5. 简而言之,本项目是一个消息处理的中间件,微信消息监听获取是从框架获取
  6. 本项目仅供学习交流使用,不得用于商业用途,否则后果自负
  7. 使用本项目造成封禁账号等后果,本项目不承担任何责任,实际上您使用任何非官方的微信机器人都有可能造成账号封禁,所以请谨慎使用
  8. 如果您阅读了上面的内容,觉得没有问题,那么请继续阅读下面的内容

功能示例:

img

已对接框架

🎁 已接入框架,展开看👇

已对接API

🎁 已对接API,展开看👇
// IFramework 这是接入框架所定义的接口
type IFramework interface {
	// Callback 这是消息回调方法,vx框架回调消息转发给该Server
	Callback(func(*Event, IFramework))

	// GetMemePictures 获取表情包图片地址(迷因图)
	// return: 图片链接(网络URL或图片base64)
	GetMemePictures(message *Message) string

	// SendText 发送文本消息
	// toWxId: 好友ID/群ID
	// text: 文本内容
	SendText(toWxId, text string) error

	// SendTextAndAt 发送文本消息并@,只有群聊有效
	// toGroupWxId: 群ID
	// toWxId: 好友ID/群ID/all
	// toWxName: 好友昵称/群昵称,留空为自动获取
	// text: 文本内容
	SendTextAndAt(toGroupWxId, toWxId, toWxName, text string) error

	// SendImage 发送图片消息
	// toWxId: 好友ID/群ID
	// path: 图片路径
	SendImage(toWxId, path string) error

	// SendShareLink 发送分享链接消息
	// toWxId: 好友ID/群ID
	// title: 标题
	// desc: 描述
	// imageUrl: 图片链接
	// jumpUrl: 跳转链接
	SendShareLink(toWxId, title, desc, imageUrl, jumpUrl string) error

	// SendFile 发送文件消息
	// toWxId: 好友ID/群ID/公众号ID
	// path: 本地文件绝对路径
	SendFile(toWxId, path string) error

	// SendVideo 发送视频消息
	// toWxId: 好友ID/群ID/公众号ID
	// path: 本地视频文件绝对路径
	SendVideo(toWxId, path string) error

	// SendEmoji 发送表情消息
	// toWxId: 好友ID/群ID/公众号ID
	// path: 本地动态表情文件绝对路径
	SendEmoji(toWxId, path string) error

	// SendMusic 发送音乐消息
	// toWxId: 好友ID/群ID/公众号ID
	// name: 音乐名称
	// author: 音乐作者
	// app: 音乐来源(VLW需留空),酷狗/wx79f2c4418704b4f8,网易云/wx8dd6ecd81906fd84,QQ音乐/wx5aa333606550dfd5
	// jumpUrl: 音乐跳转链接
	// musicUrl: 网络歌曲直链
	// coverUrl: 封面图片链接
	SendMusic(toWxId, name, author, app, jumpUrl, musicUrl, coverUrl string) error

	// SendMiniProgram 发送小程序消息
	// toWxId: 好友ID/群ID/公众号ID
	// ghId: 小程序ID
	// title: 标题
	// content: 内容
	// imagePath: 图片路径, 本地图片路径或网络图片URL
	// jumpPath: 小程序点击跳转地址,例如:pages/index/index.html
	SendMiniProgram(toWxId, ghId, title, content, imagePath, jumpPath string) error

	// SendMessageRecord 发送消息记录
	// toWxId: 好友ID/群ID/公众号ID
	// title: 仅供电脑上显示用,手机上的话微信会根据[显示昵称]来自动生成 谁和谁的聊天记录
	// dataList:
	// 	- wxid: 发送此条消息的人的wxid
	// 	- nickName: 显示的昵称(可随意伪造)
	// 	- timestamp: 10位时间戳
	// 	- msg: 消息内容
	SendMessageRecord(toWxId, title string, dataList []map[string]interface{}) error

	// SendMessageRecordXML 发送消息记录(XML方式)
	// toWxId: 好友ID/群ID/公众号ID
	// xmlStr: 消息记录XML代码
	SendMessageRecordXML(toWxId, xmlStr string) error

	// SendFavorites 发送收藏消息
	// toWxId: 好友ID/群ID/公众号ID
	// favoritesId: 收藏夹ID
	SendFavorites(toWxId, favoritesId string) error

	// SendXML 发送XML消息
	// toWxId: 好友ID/群ID/公众号ID
	// xmlStr: XML代码
	SendXML(toWxId, xmlStr string) error

	// SendBusinessCard 发送名片消息
	// toWxId: 好友ID/群ID/公众号ID
	// targetWxId: 目标用户ID
	SendBusinessCard(toWxId, targetWxId string) error

	// AgreeFriendVerify 同意好友验证
	// v3: 验证V3
	// v4: 验证V4
	// scene: 验证场景
	AgreeFriendVerify(v3, v4, scene string) error

	// InviteIntoGroup 邀请好友加入群组
	// groupWxId: 群ID
	// wxId: 好友ID
	// typ: 邀请类型,1-直接拉,2-发送邀请链接
	InviteIntoGroup(groupWxId, wxId string, typ int) error

	// GetObjectInfo 获取对象信息
	// wxId: 好友ID/群ID/公众号ID
	// return: User, error
	GetObjectInfo(wxId string) (*User, error)

	// GetFriends 获取好友列表
	// isRefresh: 是否刷新 false-从缓存中获取,true-重新遍历二叉树并刷新缓存
	// return: []*User, error
	GetFriends(isRefresh bool) ([]*User, error)

	// GetGroups 获取群组列表
	// isRefresh: 是否刷新 false-从缓存中获取,true-重新遍历二叉树并刷新缓存
	// return: []*User, error
	GetGroups(isRefresh bool) ([]*User, error)

	// GetGroupMembers 获取群成员列表
	// groupWxId: 群ID
	// isRefresh: 是否刷新 false-从缓存中获取,true-重新遍历二叉树并刷新缓存
	// return: []*User, error
	GetGroupMembers(groupWxId string, isRefresh bool) ([]*User, error)

	// GetMPs 获取公众号订阅列表
	// isRefresh: 是否刷新 false-从缓存中获取,true-重新遍历二叉树并刷新缓存
	// return: []*User, error
	GetMPs(isRefresh bool) ([]*User, error)
}

已有插件

🎁 已有插件 👇

指令大全

点击查看机器人有哪些指令

How to use?

本地运行

  1. 克隆代码
git clone https://github.com/yqchilde/wxbot.git
  1. 配置config.yaml

  2. 调试运行或编译

    • 调试运行执行 go run main.go
    • 编译执行 make release

Releases包

  1. Releases下载对应系统的编译包,解压后执行二进制文件即可

Docker运行

  1. 方式一:一键脚本启动
bash -c "$(curl -fsSL https://raw.fastgit.org/yqchilde/wxbot/hook/docker/run.sh)"
  1. 方式二:命令启动,注意提前配置config.yaml,否则会报错
docker run -d \
  --name="wxbot" \
  -p 9528:9528 \
  -v $(pwd)/config.yaml:/app/config.yaml \
  -v $(pwd)/data:/app/data \
  yqchilde/wxbot:latest

Actions编译

  1. fork本项目
  2. https://github.com/settings/tokens 这里获取一个token用于给actions使用
  3. 给项目添加一个秘钥,名字为WXBOT_TOKEN,值为上面获取的token
  4. 自行创建一个tag,如v1.0.0,然后等待actions编译完成,编译完成后会在release中生成对应的wxbot文件

How to develop?

制作插件或接入其他框架

🤔如果您想要扩展自己的插件,可以参考plugins目录下的插件

🤔如果您想要扩展其他框架,可以参考frameworks目录下的框架

🤔如果您需要增减插件,可编辑 plugins.yaml 中代码中去掉对应插件的导入或者添加对应插件的导入,照猫画虎即可

🔴修改完plugins.yaml后需要执行一次make pluginsgo generate -tags plugins ./engine/plugins生成对应的plugins.go文件再去编译

- "github.com/yqchilde/wxbot/plugins/baidubaike"   # 百度百科
- "github.com/yqchilde/wxbot/plugins/chatgpt"      # GPT聊天
- "github.com/yqchilde/wxbot/plugins/crazykfc"     # 肯德基疯狂星期四*话
- "github.com/yqchilde/wxbot/plugins/ghmonitor"    # 公众号消息监控转发
- "github.com/yqchilde/wxbot/plugins/manager"      # 群组管理相关
- "github.com/yqchilde/wxbot/plugins/memepicture"  # 表情包原图
- "github.com/yqchilde/wxbot/plugins/moyuban"      # 摸鱼办
- "github.com/yqchilde/wxbot/plugins/pinyinsuoxie" # 拼音缩写翻译
- "github.com/yqchilde/wxbot/plugins/plmm"         # 漂亮妹妹
- "github.com/yqchilde/wxbot/plugins/weather"      # 天气查询
- "github.com/yqchilde/wxbot/plugins/zaobao"       # 每日早报
- "github.com/yqchilde/wxbot/plugins/wordcloud"    # 聊天热词
- "github.com/yqchilde/wxbot/plugins/chaid"        # 查wxId
- "github.com/yqchilde/wxbot/plugins/youdaofanyi"  # 有道翻译

参考案例

查看更多使用案例

调试-环境变量

环境变量名 变量类型 说明
DEBUG bool 优先级大于其他DEBUG_开头的变量,开启后开启所有DEBUG模式
用于调试HTTP请求和调用日志文件名和行号
DEBUG_LOG bool 用于调试调用日志文件名和行号

提交Pr注意项

  1. import包时顺序要规范,先import标准库,再import第三方库,最后import自己的库,例如:
import (
	"errors"
	"fmt"
	"strings"
	"sync"
	"time"

	"github.com/PullRequestInc/go-gpt3"

	"github.com/yqchilde/wxbot/engine/control"
	"github.com/yqchilde/wxbot/engine/pkg/log"
	"github.com/yqchilde/wxbot/engine/pkg/sqlite"
	"github.com/yqchilde/wxbot/engine/robot"
)
  1. 若提交的是插件,请在plugins.yaml中添加对应的插件
  2. 若提交的是插件,请在README.md中已有插件部分添加对应的插件
  3. 若提交的是插件,请在plugins/README.md中添加对应的插件
  4. 提交代码请先make pluginsgo generate -tags plugins ./engine/plugins 生成对应的plugins.go文件

Feature

开发计划:🕒 开发计划
如果您感觉这个项目有意思,麻烦帮我点一下star
这个项目待(不)补(完)充(善)很多东西,由于工作关系会抽出时间弄,感谢您发现并使用此仓库

如果您有疑惑可以加Q群讨论

打个广告

Thanks

JetBrains 开源证书支持

yqchilde/wxbot 项目一直以来都是在 JetBrains 公司旗下的 GoLand 集成开发环境中进行开发,基于 free JetBrains Open Source license(s) 正版免费授权,在此表达我的谢意。

开源项目

  • 非Hook版机器人核心由 openwechat SDK实现,在nohook分支,已暂停维护

  • Hook版机器人框架我使用的是 《我的框架》已跑路,现在用的是千寻,Dean DLL,为hook分支

  • hook分支大量借鉴了一个十分优秀的项目ZeroBot-Plugin的设计方案 👍🏻,其中很多基础代码来自ZeroBot-Plugin,在此基础上扩展了支持wechat的方式,非常感谢,Thanks♪(・ω・)ノ

License

AGPL-3.0 license. See the LICENSE file for details.

wxbot's People

Contributors

dependabot[bot] avatar ghsau avatar wight3 avatar yqchilde avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wxbot's Issues

定时提醒功能可否能增加"工作日"周期

例如:每个工作日早上10:00:00提醒我上班打卡
例如:每个工作日下午18:20:00提醒我还有十分钟下班
工作日提醒,休息日不提醒,自动根据国家节假日策略执行

全角符号被转译为 [emoji=xxx] 格式

如下图所示,其中 [emoji=ff1a] 原始字符是全角冒号,另外全角句号 会被转义为 [emoji=3002] 等等
image

daen 框架的httpapi.go 文件中有以下逻辑,
对go语音不太了解,看函数名猜测,如果是汉字或者字母则直接写入,如果不是则根据占据的字节数量判断是UTF8还是UTF16再被改为[emoji=xxx]格式。
测试了几个日文、韩文、阿拉伯文也是可以正常输出的。

vlm 框架下也有类似逻辑,只测试了 daen 框架。

请问这个逻辑存在的意义是什么,是否可以去除?
微信中对于 emoji 图标也是使用 /敲打 [翻白眼] [Sweats] 这种形式的,未使用unicode编码格式

image

Chatgpt 代理问题

我机器开了梯子的情况下网页可以打开https://api.openai.com/v1/chat/completions,但是回答依然是
ChatGPT出错了,Err:Post "https://api.openai.com/v1/chat/completions": dial tcp 199.16.158.182:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
是必须开做一个代理页面?

[注意] 统一出现了一次TX扫号

如果您刚看到这个项目,我将告诉您一个不好的消息
千寻刚经历了一次被腾讯扫号,所以近期先不更新了,(我自己的测试号需要稳稳

重新编译出错,大佬指导下

小白,不太懂怎么编译,自己在chatGPT稍作修改,可是今天发现更新1.4后有个web插件,编译始终不过,还请大佬指导下哪里出错了。
root:/volume2/docker/wxbot/wxbot-1.5.0# docker image build -t yqchilde/wxbot:v1.5.0 .
Sending build context to Docker daemon 22.36MB
Step 1/19 : FROM golang:1.19-alpine as builder
---> feb4bbda921c
Step 2/19 : ENV GOPROXY="https://goproxy.cn,direct"
---> Using cache
---> fe3cfd0f3543
Step 3/19 : ARG VERSION
---> Using cache
---> bc436d7cd61f
Step 4/19 : WORKDIR /app/
---> Using cache
---> 0d0583c5e232
Step 5/19 : COPY go.mod .
---> 67d0db210f41
Step 6/19 : COPY go.sum .
---> dc444d486073
Step 7/19 : RUN go generate -tags plugins ./engine/plugins
---> Running in 4f56f5e5a431
Removing intermediate container 4f56f5e5a431
---> 4186c36ad119
Step 8/19 : RUN go mod download
---> Running in 2ff03746e437
Removing intermediate container 2ff03746e437
---> 95d36f127613
Step 9/19 : COPY . .
---> cf76a8367b4e
Step 10/19 : RUN CGO_ENABLED=0 go build -ldflags="-s -w -X github.com/yqchilde/wxbot/engine/robot.version=${VERSION}" -o ./bin/wxbot
---> Running in 61d41e0247ff
web/web.go:8:1: expected 'package', found '<'
The command '/bin/sh -c CGO_ENABLED=0 go build -ldflags="-s -w -X github.com/yqchilde/wxbot/engine/robot.version=${VERSION}" -o ./bin/wxbot' returned a non-zero code: 1

这个是web文件夹空的,我手动下载的文件
屏幕截图 2023-03-04 202412

docker运行后没有插件

如题,docker运行后。总让配置chatgpt api,发了也不认,总是让配置,其它插件也无法配置。

框架很不错,几个小建议

已经用起来了,自己写了个插件,感觉很好用,大佬可以建个群交流交流,有几个小建议
1、群回复 可不可以搞个开关
2、增加管理员发更新和重启程序等指令

invalid character '\x11' in string literal

千寻遇到这种问题,通常是启动时获取机器人信息失败,返回的response数据不对,不是一个json导致

排查方式如下,使用对应指令在终端下执行一次看看具体响应,如果你对命令行不熟,可以直接用postman / apifox测试,记得要替换命令中的千寻IP千寻HTTP端口你机器人的wxid

Linux、Mac下

curl --location --request POST 'http://千寻IP:千寻HTTP端口/DaenWxHook/httpapi/?wxid=你机器人的wxid' --header 'Content-Type: application/json' --data-raw '{"type": "Q0003", "data": {}}'

Windows下

Invoke-RestMethod -Method POST -Uri 'http://千寻IP:千寻HTTP端口/DaenWxHook/httpapi/?wxid=你机器人的wxid' -Headers @{'Content-Type'='application/json'} -Body '{"type": "Q0003", "data": {}}'

请求一下看一下具体的响应返回了什么?

在返回的response里应该是有乱码的数据,导致json解析失败,如果你出现了,请联系我,我帮你解决

[REQUEST] 建议接入ChatGPT网页版的非官方API

OpenAi开放了ChatGPT 3.5的接口,但是要算token,一个账号只有18美元的试用。
GitHub上有ChatGPT网页版的逆向API,经测试是完全免费的。
是否可以考虑接入网页版的非官方API?

(Python)revChatGPT
https://github.com/acheong08/ChatGPT

(golang)ChatGPT client (unofficial)
https://github.com/abhayptp/go-chatgpt

(Node.js)ChatGPTUnofficialProxyAPI
https://github.com/transitive-bullshit/chatgpt-api

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.