开源个QQ机器人,借Mirai.Net对接部署的Mirai项目,调用OpenAI接口的。

Posted wosperry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源个QQ机器人,借Mirai.Net对接部署的Mirai项目,调用OpenAI接口的。相关的知识,希望对你有一定的参考价值。

PerryQBot

介绍

使用了Mirai.Net类库对接Mirai,能够自动处理QQ消息并回复。该项目的主要功能是管理QQ用户或者群聊中@机器人的人的消息,每个用户都有个独一份的预设和历史,可区分对话。
通过拼接参数并访问openai api,实现智能的自动回复。

此项目采用AGPL3.0开源协议,任何人都可以自由使用、复制、修改和传播该项目的代码。当您使用该项目及代码的时候,需要遵循AGPL3.0协议的规定,即在您发布基于该项目的代码时,必须发布您的代码,并且将其中的修改也一并开源。此外,您还需要将该项目的许可证和版权信息放在您发布的文档和代码文件中。

引用

使用了以下开源组件:

准备做的东西

  1. 对接GPT

  2. 命令

  3. 其他功能

项目结构

代码结构

PerryQBot                # 项目根目录
├──Commands              #   命令相关文件夹
│  └──Handlers           #       命令处理程序 可在此处参考原有的Handler创建新的命令,重新运行之后即可生效
├──EntityFrameworkCore   #   EFCore
│  ├──Configurations     #       实体配置文件夹
│  └──Entities           #   实体文件夹
├──OpenAI                #   OpenAI
│  ├──BackgroundJobs     #       后台任务执行OpenAI请求、发送QQ消息回复(这个考虑迁到QQBot)
│  └──HttpRequests       #       管理OpenAI请求参数等
├──Options               #   管理选项配置
└──QQBot                 #   QQ信息监听等,如果是添加命令建议直接添加命令Handler实现。

部署说明

使用 Docker Compose

  1. 需要安装 Docker 和 Docker Compose。
  2. docker-compose.yml 文件所在目录下,运行 docker-compose up -d
  3. 如果需要修改配置,请先将 appsettings.json 文件存放在正确的位置,并修改 .yml 文件中对应的挂载路径。如果不挂载配置文件,可以把docker-compose.yml内的挂载部分删掉。
  4. 首次运行的时候数据库是不存在的,你需要在项目所在的地方修改配置为真实的连接字符串,并执行EntityFrameworkCore.Tools的Update-Database命令,将数据库结构生成出来。
  5. 运行Bot的机器需要可以访问外网。

docker-compose.yml

version: "3.4"

# 定义网络
networks:
  pqcnet:
    driver: bridge

# 定义服务
services: 
  # 数据库
  perrybot_postgresql:
    image: postgres:latest
    # 容器名
    container_name: perrybot_postgresql
    restart: always
    # 映射宿主机端口12345到数据库容器的5432,用于外部使用工具访问数据库查看数据
    ports:
      - "65432:5432"
    # 挂载路径
    volumes:
      - /perry/PerryQBotDB:/var/lib/postgresql/data 
    environment:
      # 这里2个容器同在名为pqcnet的docker网络,直接使用容器名字和5432端口即可访问数据库
      # Bot里使用的连接字符串是appsettings.json里指定的 "Host=perrybot_postgresql;Database=PerryQQBot;User ID=postgres;Password=123456;"
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "Aa123456."
      POSTGRES_DB: "PerryQQBot"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    # 加入到网络 pqcnet
    networks:
      - pqcnet

  # QBot
  perrybot_bot:
    # 容器名
    container_name: perrybot_bot
    build:
      # 指定执行位置
      context: .
      # 指定Dockerfile
      dockerfile: ./PerryQBot/Dockerfile
    # 加入到网络 pqcnet
    networks:
      - pqcnet
    restart: always
    volumes:
      # 这里其实是由于开源项目,我的真实配置放在了 /perry/PerryQBotConfig/appsettings.json
      # 挂载路径下的appsettings.json文件到容器内的/app/appsettings.json使用
      # 这里容器里的/app,是Dockerfile内指定的工作目录,如果需要修改,则需要一起改。
      - /perry/PerryQBotConfig/appsettings.json:/app/appsettings.json

程序配置介绍


  "MiraiBotOptions": 
    "Host": "your-website.com",
    "Port": 9010,
    "QQ": "12345678",
    "AdminQQ": "1111111",
    "MaxHistory": 4,
    "VerifyKey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "CommandPrefix": "#"
  ,
  "OpenAiOptions": 
    "CompletionUrl": "https://api.openai.com/v1/chat/completions",
    "Key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  ,
  "ConnectionStrings": 
    "Default": "Host=localhost;Port=5432;Database=MyBotDB;User ID=postgres;Password=postgres;"
  ,
  "MessageCollectionOptions": 
    "MaxResultCount": 3 
  

  1. MiraiBotOptions

    • Host: Mirai所在的服务器地址
    • Port: Mirai放出来的端口
    • QQ: Mirai登录的QQ
    • AdminQQ: 管理员QQ,接收登录或者超时消息
    • MaxHistory: 连续对话最大历史条数
    • VerifyKey: Mirai 设置的http-client的 verifyKey
    • CommandStartChar: 命令前缀 如 #帮助 $$帮助
  2. OpenAiOptions

    • CompletionUrl: OpenAI的API地址,不用修改,如果要改,从官方文档查看。
    • Key: OpenAI的Key
  3. ConnectionStrings

    • Default: 数据库连接字符串,这里使用的是PostgreSQL,如果要使用其他数据库,需要修改对应的Nuget包,然后修改这里的连接字符串。并且修改程序里所依赖的 AbpEntityFrameworkCoreXXXModule 为对应的module
  4. MessageCollectionOptions

    • MaxResultCount: 每次查询的最大条数

命令

当收到私聊@机器人时,如果聊天开头是以命令开头的,则进入命令处理程序,不走OpenAI请求。

命令说明

命令前缀默认为"$$",如果需要修改,在配置文件的MiraiBotOptions下修改CommandPrefix的值。
以下是以"#"为前缀的命令说明

1. #帮助
   - 说明:显示帮助信息
2. #预设
   - 参数:预设文本
   - 说明:修改发送者的预设文本,同时清理发送者的历史消息
   - 示例:
      - #预设 你好,我的名字叫Perry。
      - #预设 我想让你充当英英词典,对于给出的英文单词,你要给出其中文意思以及英文解释,此外不要有其他反馈,第一个单词是“Hello"。
3. #清空历史
   - 说明:清空历史记录(不包含预设)
4. #收藏 [额外文本]
   - 参数:额外文本
   - 说明:收藏发送者引用的文本及当前发送的文本
   - 示例:
      - #收藏 你好,我的名字叫Perry。
      - #收藏 我想让你充当英英词典,对于给出的英文单词,你要给出其中文意思以及英文解释,此外不要有其他反馈,第一个单词是“Hello"。
      - [长按引用的前面的消息] #收藏 加上了我自己补充的内容
5. #查询收藏 [条件]
   - 说明:根据参数搜索查询收藏,最多返回展示3条结果
   - 示例:
      - #查询收藏 Perry
      - #查询收藏 MongoDB

命令处理程序

  1. 位置

    PerryQBot               # 项目根目录
    ├─Commands              #   命令相关文件夹
    │  └─Handlers           #       命令处理程序 可在此处参考原有的Handler创建新的命令,重新运行之后即可生效
    
  2. 添加自定义命令处理程序
    在1中位置,创建新的类,比如 GreetingCommandHandler.cs,要成为一个可被框架使用的命令,还需要满足以下条件:

    • 继承 CommandHandlerBase 并重写 HandleAndResponseAsync 方法,添加你的逻辑,并返回需要回复用户的消息。
    • 标记 [Command("[不带前缀的命令字符]")] 特性
    • 标记 [ExposeService(typeof(ICommandHandler))] 特性
      [ExposeService(typeof(ICommandHandler))] 可选,如果你认为Abp框架可以正常注入这个类型,则可以不写这个特性。
  3. 代码示例:

    using Volo.Abp.DependencyInjection;
    
    namespace PerryQBot.Commands.Handlers;
    
    [Command("你好")]
    [ExposeServices(typeof(ICommandHandler))]
    public class GreetingCommandHandler : CommandHandlerBase
    
        // 这里可以直接属性注入
        // 比如 public IOptions<XxxxOptions> Options  get; set; 
        // 或者 public IStringLocalizer<XxxxResource> L  get; set; 
    
        public override async Task HandleAndResponseAsync(CommandContext context)
        
            // 这里为了代码直观,直接等待完成了
            await Task.CompletedTask; 
    
            ResponseMessage = $"你好,context.SenderName";
        
    
    
  4. 效果

    wosperry 17:58:54
    #你好
    
    Mochi 17:58:54
    你好,wosperry
    
    

傻妞机器人新版安装教程

QQ群:323731210
TG群:https://t.me/muzikeji

本文由以下部分组成

分组成)

一、傻妞功能简介

1.傻妞青龙扩展
可以发送命令控制青龙任务,添加青龙变量,查看任务日志等等!可对接其他项目。
2.配置扩展
在sillyGirl/conf/config.yaml文件配置各种API,让傻妞功能丰富多彩。目前支持返回图片和文本(包括链接)。样例文件见文末。
3.自定义文件功能扩展
在sillyGirl/develop/replies/文件夹内放入js等文件。可实现自定义扩展,支持定时推送。比如你可以放早报、外卖返利定时推送等。样例文件见文末。
4.可以付费授权配置京东、淘宝等发单、比价。可以赚钱的,不会亏。

二、傻妞安装

一键拉去傻妞文件

1.一键安装傻妞(老用户先执行 delete silly compiled_at,菜🐔请直接删了原有傻妞)
国内用户安装完成后设置一个下载网络代理
后续更新直接给机器人发【升级】即可,设置命令下面二选一。

set sillyGirl download_prefix  http://github.yanyuge.workers.dev/

或者

set sillyGirl download_prefix  http://github.muzilee.workers.dev/

开始安装

一键安装命令如下。

s=sillyGirl;a=arm64;if [[ $(uname -a | grep "x86_64") != "" ]];then a=amd64;fi ;if [ ! -d $s ];then mkdir $s;fi ;cd $s;wget https://github.yanyuge.workers.dev/https://github.com/cdle/$s/releases/download/main/$s_linux_$a -O $s && chmod 777 $s;pkill -9 $s;$(pwd)/$s

2.等命令运行完毕。
ctrl +c 退出

开始部署QQ机器人必备环境

需要先装node.js

1、Node.js 下载
官方下载地址:[Node.js Download](Node.js Download)

1、右击指定位置,复制链接地址
2、进入Linux自定义目录下,通过 wget 命令获取 Node.js 安装程序比如我们安装在 usr/local目录,执行如下命令:

cd /usr/local  && wget https://nodejs.org/dist/v14.17.5/node-v14.17.5-linux-x64.tar.xz

2、Node.js 解压下载得到的 Node.js 是 ***.tar.xz 格式,需要使用解压命令首先对其进行解压

xz -dk node-v14.17.5-linux-x64.tar.xz  && tar -xvf node-v14.17.5-linux-x64.tar

3、Node.js 环境配置
1.进入配置文件:

vi /etc/profile

2.按键 i 进入编辑模式,在文件的最后面新行添加以下三行代码:

export NODE_HOME=/usr/local/node-v14.17.5-linux-x64
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules

3.Esc键退出编辑模式,:wq 退出该配置文件
4.生效配置文件

source /etc/profile

和装go环境一样不会用命令的,用SFTP(不知道SFTP是什么的自行百度,还不知道的劝你别弄了我帮你挂吧) 连接但服务器找到根目录/etc/profile文件打开,把下面代码复制粘贴到最后一行,保存然后再执行source /etc/profile 效果一样的。

4、检查是否安装成功
查看node版本 node -v
查询结果 V14.17.5
查看nmp版本 npm -v
查询结果 V6.14.xx
到此安装好node.js

安装个pm2

不然后第6步没法守护进程。
由于我们已经安装好了node.js所以直接用下面命令安装

npm install pm2 -g

执行pm2 -v查看是否安装成功

打开傻妞http服务。

由于需要访问傻妞http服务,所以我们得开启http服务。
有TG等机器人的直接机器人发送
set sillyGirl enable_http_server true
set sillyGirl port 8080
没其他机器人的打开/etc/sillyGirl/sets.conf这个文件把这两个写进去,然后手动重启一下傻妞,教程第五部分,手动重启。
文件格式样例如图

接入QQ机器人

QQ对接方法一

//node-onebot机器人接入到傻妞

1.克隆仓库
git clone https://github.com/takayama-lily/node-onebot.git

2.进入仓库
cd node-onebot

3.创建配置文件

vi config.js
module.exports = 
    //通用配置
    general: 
        platform:           1,     
        log_level:          "info",  //trace,debug,info,warn,error,mark
        use_cqhttp_notice:  false,   //是否使用cqhttp标准的notice事件格式

        host:               "0.0.0.0",  //监听主机名
        port:               5700,       //端口
        use_http:           false,      //启用http
        use_ws:             false,      //启用正向ws,和http使用相同地址和端口
        access_token:       "",         //访问api的token
        secret:             "",         //上报数据的sha1签名密钥
        post_timeout:       30,         //post超时时间(秒)
        post_message_format:"array",    //"string"或"array"
        enable_cors:        false,      //是否允许跨域请求
        enable_heartbeat:   false,      //是否启用ws心跳
        heartbeat_interval: 15000,      //ws心跳间隔(毫秒)
        rate_limit_interval:500,        //使用_rate_limited后缀限速调用api的排队间隔时间(毫秒)
        event_filter:       "",         //json格式的事件过滤器文件路径
        post_url: [ //上报地址,可以添加多个url
            // "http://your.address.com:80",
        ],
        ws_reverse_url: [ //反向ws地址,可以添加多个url
            "ws://127.0.0.1:8080/qq/receive",
        ],
        ws_reverse_reconnect_interval: 3000, //反向ws断线重连间隔(毫秒),设为负数直接不重连
        ws_reverse_reconnect_on_code_1000: true, //反向ws是否在关闭状态码为1000的时候重连
    ,

    //每个账号的单独配置(用于覆盖通用配置)
    147258369: 

    ,
;

5.登录,根据提示操作
cd && cd node-onebot && node main 机器人账号
会给一个二维码地址,复制到浏览器打开QQ扫码登录授权。等命令跑完,Ctrl +c 退出。
6.用pm2守护进程。
pm2 start "node main 机器人QQ号"
#这个""自己看看,博客这个转译好像给变成中文,自己改回去。

/方法一结束/

QQ对接方法二

//安装oicq//
oicq库
oicq Github:https://github.com/takayama-lily/oicq/tree/master/http-api

npm i oicq@1 -g #安装
npm up -g oicq #更新

配置文件config.js
路径/root/.oicq/ 可能系统不同路径不同具体自己找一下

// 此文件必须名为config.js才能生效哦
module.exports = 
    //通用配置
    general: 
        platform:           1,       //1:安卓手机 2:aPad 3:安卓手表 4:MacOS 5:iPad
        log_level:          "info",  //trace,debug,info,warn,error,mark
        use_cqhttp_notice:  false,   //是否使用cqhttp标准的notice事件格式
        host:               "0.0.0.0",  //监听主机名
        port:               5700,       //端口
        use_http:           false,      //启用http
        use_ws:             false,      //启用正向ws,和http使用相同地址和端口
        access_token:       "",         //访问api的token
        secret:             "",         //上报数据的sha1签名密钥
        post_timeout:       30,         //post超时时间(秒)
        post_message_format:"array",    //"string"或"array"
        enable_cors:        false,      //是否允许跨域请求
        enable_heartbeat:   false,      //是否启用ws心跳
        heartbeat_interval: 15000,      //ws心跳间隔(毫秒)
        rate_limit_interval:500,        //使用_rate_limited后缀限速调用api的排队间隔时间(毫秒)
        event_filter:       "",         //json格式的事件过滤器文件路径
        post_url: [ //上报地址,可以添加多个url
            // "http://your.address.com:80",
        ],
        ws_reverse_url: [ //反向ws地址,可以添加多个url  傻妞的ip加端口
            "ws://ip:port"
        ],
        ws_reverse_reconnect_interval: 3000, //反向ws断线重连间隔(毫秒),设为负数直接不重连
        ws_reverse_reconnect_on_code_1000: true, //反向ws是否在关闭状态码为1000的时候重连
    ,
    //每个账号的单独配置(用于覆盖通用配置)
    1234567890: 
    ,
;
// 安全注意:
// 监听0.0.0.0表示监听网卡上的所有地址。如果你的机器可以通过公网ip直接访问,同时你也没有设定access_token,则被认为是极不安全的。
// 你应该知道这样做会导致以下后果:任何人都可以无限制地访问你的Bot的所有API接口。
// 如果只需要在本地访问,建议将监听地址改为localhost。需要通过公网访问,你最好设定access_token。

启动oicq

oicq 机器人QQ号

oicq 1975537275

Ctrl + C 然后再守护进程

pm2守护进程

pm2 start "oicq 机器人QQ"

pm2 start "oicq 1975537275"

//方法二结束

设置QQ管理员

QQ机器人默认管理员功能从sillyGirl中移除,初始配置请到/etc/sillyGirl/sets.conf配置如下内容。

#设置qq管理员
set qq masters 管理QQ号码

或者SSH执行此命令

s=/etc/sillyGirl;if [ ! -d $s ];then mkdir $s; fi; echo "set qq masters 你的管理QQ号" > /etc/sillyGirl/sets.conf

禁用机器人自己回复信息

set qq onself true

重启一下

现在可以去机器人玩了

注意:
自愿开启芝士(京东CK功能)请执行

set jd_cookie enable_jd_cookie true

并重启。

三、傻妞常规设置

傻妞机器人名

set sillyGirl name 傻妞

傻妞http服务端口

set sillyGirl port 8080

傻妞消息撤回等待时间,单位秒

set sillyGirl duration 5

傻妞自动升级是否通知

set sillyGirl update_notify false

是否开启傻妞自动更新

set sillyGirl auto_update true

傻妞内置赞赏码

set sillyGirl appreciate https://gitee.com/aiancandle/sillyGirl/raw/main/appreciate.jpg

是否启动http服务

set sillyGirl enable_http_server false

设置青龙openapi的client_id参数

set qinglong client_id ?

设置青龙openapi的client_secret参数

set qinglong client_secret ?

青龙是否开启自动隐藏重复任务功能

set qinglong autoCronHideDuplicate true

设置青龙面板地址

set qinglong host http://127.0.0.1:5700

设置qq登录账号

set qq uin 10000

设置qq登录密码

set qq password 123456789

设置qq临时消息默认群号

set qq tempMessageGroupCode ?

指定要监听的qq群

set qq onGroups g1&g2&g3…

设置是否自动同意好友请求

set qq auto_friend false

设置是否对监听自身消息

set qq onself true

设置qq管理员

set qq masters q1&q2&q3…

设置接受通知的qq账号

set qq notifier q1&q2&q3…

设置qq设备信息(自动生成)

set qq device.json ?

设置qq登录令牌(自动生成)

set qq session.token ?

设置telegram机器人token

set tg token ?

设置telegram机器人代理

set tg http_proxy ?

设置telegram机器人管理员

set tg masters t1&t2&t3…

设置接受通知的telegram账号

set tg notifier t1&t2&t3…

设置微信公众平台app_id

set wxmp app_id ?

设置微信公众平台app_secret

set wxmp app_secret ?

设置微信公众平台token

set wxmp token ?

设置微信公众平台encoding_aes_key

set wxmp encoding_aes_key ?

设置微信公众平台管理员

set wxmp masters w1&w2&w3…

傻妞内置微信插件,依赖于可爱猫和http-sdk

傻妞远程处理接口 /wx/receive

设置插件调用地址,确保傻妞可以访问可爱猫端口

#set wx api_url ?

设置图片转发模式,否则可能会出现此图片来自xx未经允许不得使用的提示

#set wx relay_mode true

设置指定转发地址,格式为 https://域名/relay?url=%s,不知道不用填

#set wx relaier ?

设置动态网络地址,适用于傻妞家庭宽带而可爱猫在云服务器的情况下

set wx dynamic_ip true

获取群号 TG QQ 微信 通用

groupCode

获取自己ID TG QQ 微信 通用

myuid

获取上次编译时间

compiled_at

设置内置小爱API

set sillyGirl 小爱同学 http://jiuli.xiaoapi.cn/i/xiaoai_tts.php?msg=%s

小爱API返回词典中获取那个键的值

set sillyGirl 小爱同学gjson text

傻妞自定义回复更新,在哪个群设置就对哪个群有效。
口令更新,支持正则
设置回复 reply ? ?
删除回复reply ? nil
查看自定义回复 replies

四、傻妞对接微信、公众号、以及TG机器人

对接微信【可爱猫】或者【VLW】

  • 对接微信需要Windows服务器或者电脑*

1.可爱猫对接微信

1.首先加入QQ群323731210,下载群文件iHttp.cat.dll文件和可爱猫文件
2.将iHttp.cat.dll放入可爱猫app目录
3.运行可爱猫然后双击iHttp插件,如图。

4.在远程处理接口那里写上http://你的IP:傻妞端口/wx/receive
端口写80 后面的服务开关✓上。记录你的Windows主机外网IP以及你自己设置的端口,端口需要防火墙放行。如图

5.重启可爱猫,然后从可爱猫首页启动微信并登录。注意这个微信手机端不能退出,退出就掉线了。你可以找一个不用的手机登录你的微信机器人号码扫码,只要你不主动退出即使你的手机关机微信机器人也在线。

6.设置相关配置
设置插件调用地址,确保傻妞可以访问可爱猫端口
set wx api_url http://IP:端口
开启傻妞http协议服务
set sillyGirl enable_http_server true
set sillyGirl port 80
设置图片转发模式,否则可能会出现此图片来自xx未经允许不得使用的提示
set wx relay_mode true

设置指定转发地址,格式为
https://域名/relay?url=%s

set wx relaier ?

设置动态网络地址,适用于傻妞家庭宽带而可爱猫在云服务器的情况下
set wx dynamic_ip true

2.VLW对接微信

1.首先下载VLW
教程以VLW3.1.4为例
2.下载完成后点击全部提取文件到你的自定义路径。
3.双击打开vlw主程序。这时会生成一些目录和文件其中有一个plugin的目录为插件目录。
4.加入QQ群323731210下载下图所示文件
5.将下载的文件放入VLW的plugin目录内。
6.点击插件管理安装此插件。
7.点了打开此插件,如图所示进行配置。
配置一定要认真点,初端口自定义其他都按要求写。
8.配置好了点击端口边上的启用服务。
9.现在开始回到傻妞进行参数设置
开启傻妞http协议服务
set sillyGirl enable_http_server true
set sillyGirl port 80
set wx api_url http外网API调用地址
如 set wx api_url http://1.12.123.22:80

set wx vlw_token 上图自定义的token
如 set wx vlw_token 123456
10.从vlw启动微信。然后用作为机器人的微信号扫码登录。登录成功如下图
11.现在你重启傻妞。然后就可以用了。

3.设置微信管理员

微信发送机器人myuid,获取你的微信ID

然后用下面命令设置自己为机器人管理员

set wx masters 你的微信ID

现在你的微信已经可以用了。

公众号对接教程

首先注册一个自己的公众号,有公众号的可以跳过。公众号注册应该都会就不讲了,不会的自己百度
然后查看自己公众号的app_id,app_secret(点击开发基础配置可以看到)。
接下来回到自己的QQ发送以下指令给机器人

set wxmp app_id 你的appid

set wxmp app_secret 你的appsecret

set wxmp encoding_aes_key 自定义key
由大小写字母和0-9组成的43位字符,可以在公众号后台随机生成

set wxmp token 自定义token

set sillyGirl port 80

set sillyGirl enable_http_server true

上面两个自定义的一定记牢下面要用,英文字母和数字组成。

然后登入你的公众号后台
1) 公众平台官网登录之后,找到“基本配置”菜单.

2) 填写配置
url填写:http://外网IP:端口/wx/ http的端口号固定使用80,不可填写其他。Token:你刚才自定义的token,这个token与公众平台wiki中常提的access_token不是一回事。这个token只用于验证开发者服务器。

选择明文模式,然后提交显示token验证成功就OK了。

需要注意的是你80端口没被其他服务占用,服务器装了宝塔安装了ningx的80端口肯定是占用了,如果你不用ningx可以在宝塔应用管理里卸载然后重启傻妞即可,要用或者其他程序占用了的自己百度方案解决吧。

netstat -lnp|grep 80

运行这个傻妞端口挂载正常如下图,不然就是傻妞没在80端口。

只要token验证成功就可以用了
然后启用服务 重启傻妞 就可以正常使用了

设置微信公众平台管理员

用微信发送 myuid

然后用QQ管理员发送机器人设置微信管理员

set wxmp masters 刚才查的uid

设置多个管理员

set wxmp masters uid1&uid2…

现在公众号可以使用傻妞功能了!

对接TG机器人

本方案原来是CloudFlare Worker反代Telegram的api.telegram.org。
1.首先注册CloudFlare账号,注册地址:cloudflare.com。注册账号非常的简单。不懂英文的现在浏览器都有翻译功能翻译后再去注册。
2.启用worker
登录cloudflare后,在左上角下拉菜单中找到 workers,入口:https://workers.cloudflare.com
然后自定义一个二级域名,记下来选择套餐选免费的就可以了。每天10万次请求够你玩了。

3.创建配置worker
进入cf的workers后台,点击 创建worker 按钮,新建一个worker。

然后进入worker编辑界面,输入下面代码后,点击安装部署。

const whitelist = ["/bot123456789:"];/*123456789为机器人ID*/
const tg_host = "api.telegram.org";
addEventListener('fetch', event => 
    event.respondWith(handleRequest(event.request))
)
function validate(path) 
    for (var i = 0; i < whitelist.length; i++) 
        if (path.startsWith(whitelist[i]))
            return true;
    
    return false;

async function handleRequest(request) 
    var u = new URL(request.url);
    u.host = tg_host;
    if (!validate(u.pathname))
        return new Response('Unauthorized', 
            status: 403
        );
    var req = new Request(u, 
        method: request.method,
        headers: request.headers,
        body: request.body
    );
    const result = await fetch(req);
    return result;

注:机器人ID就是机器人token前面的数字部分。不知道的可以TG @BotFather这个机器人可以获取你的机器人token。

现在你的机器人已经可以用了可以通过打开下面链接测试是否成功
https://xxxxx.xxx.workers.dev/bot机器人的token/sendMessage?chat_id=你的ID&text=发送的内容
机器人token获取方法上面说过了
你的ID获取方式 @userinfobot 找这个机器人发送token可以拿到。
然后傻妞设置

set tg url https://xxx.xxx.workers.dev

xxx.xxx是你自定义的域名

set tg token xxx:xxxxxxxxxxxxx

后面xxx:xxxxxxxxxxxxx是你的机器人token
现在你的TG机器人就可以用了。
重要提醒:
群组内使用需要给机器人拉进群并设置为管理员,否则无法监控群消息。

五、傻妞重启、更换机器人QQ、手动更新

重启

ps -A|grep sillyGirl ##显示进程号
kill -9 xxxxxx ##杀掉进程
cd && cd sillyGirl && ./sillyGirl  ##启动傻妞

等待数据库加载完成,按下Ctrl 再按 C 退出
然后执行下面命令 静默挂机

nohup ./sillyGirl 1>/dev/null 2>&1 & #AMD64

./sillyGirl -d

不出错就重启OK了,出错的话看执行日志对症下药!

更换机器人QQ

首先确保傻妞是新版不是老古董
傻妞更新支持多QQ机器人,私聊全部有效、群聊只有主机器人有效,主机器人挂了后,其他机器人随机替代主机器人位置。
此外,返利支持多QQ协同发单减少风控几率。
设置主机器人QQ:
set qq default_bot 主机器人账号
更换机器人QQ
先看看进程列表

pm2 list

杀死所有进程

pm2 delete all

更换新QQ登录

oicq 新机器人QQ

守护进程

pm2 start "oicq 新机器人QQ"

你也可以同时挂多个QQ,想更换只需要重新设置主机器人号码,然后重启。

现在就更换到了新的号码,注意之前的设置是不会丢的不用一一重新设置。

手动更新

手动更新只需要执行下面命令

rm -rf /root/sillyGirl/sillyGirl  &&  s=sillyGirl;a=arm64;if [[ $(uname -a | grep "x86_64") != "" ]];then a=amd64;fi ;if [ ! -d $s ];then mkdir $s;fi ;cd $s;wget https://pd.zwc365.com/https://github.com/cdle/$s/releases/download/main/$s_linux_$a -O $s && chmod 777 $s;pkill -9 $s;$(pwd)/$s

然后Ctrl+c退出

再跑静默挂机命令

nohup ./sillyGirl 1>/dev/null 2>&1 & #AMD64


QQ发升级出现

解决方案如下:找到/root/sillyGirl/.git/config文件
在文件最后一行加上两行代码

[user]
       email = xxx@qq.com #自己的邮箱或者随意
       name = 爱的味道 #随意昵称

保存一下就可以了,不行重启再试!

六、傻妞青龙扩展使用

首先你得有青龙,不会装青龙的自行搜索教程或者加我QQ群323731210发送【教程】可查看系列教程。
有了青龙然后你可以对接傻妞进行交互。(注意傻妞只支持青龙2.9+)
1.创建青龙应用

然后复制你的应用信息对接傻妞

对你的机器人发送【青龙管理】根据提示填入对应参数即可。

如果各种信息都正确就配置OK了,需要注意的是青龙如果是2.8升级的会出现报错。重启容器即可

docker restart 你的容器名  

2.青龙常用交互命令
拉去脚本
ql raw 脚本地址

查询COOKIE状态
ql cookie status

指定CK运行脚本
ql task 任务文件名 desi JD_COOKIE 指定的CK编号(如1 1-2 等等)

CK优先级
jd exchange ? ?

CK备注
jd remark ? ?

[修改QQ、Cookie绑定关系]
删除Cookie对应QQ号关系[只需要改pt_pin为你要改的pin]
delete pinQQ pt_pin

绑定Cookie对应QQ关系 [改pt_pin为你要改的pin qq号为需要绑定QQ号]
set pinQQ pt_pin qq号

解除指定账号关联的一切账号
jd unbind im 账号

青龙关闭自动隐藏任务命令
set qinglong autoCronHideDuplicate false
默认开启。

^ql\\s+crons$
ql crons #获取所有青龙任务

^ql\\s+cron\\s+status\\s+(\\S+)$
ql cron starts 任务名 #查看该任务状态

^ql\\s+cron\\s+run\\s+(\\S+)$
ql cron run 任务名 #运行该任务

^ql\\s+cron\\s+stop\\s+(\\S+)$
ql cron stop 任务名 #停止该任务

^ql\\s+cron\\s+enable\\s+(\\S+)$
ql cron enable 任务名 #启用该任务

^ql\\s+cron\\s+disable\\s+(\\S+)$
ql cron disable 任务名 #禁用该任务

^ql\\s+cron\\s+find\\s+(\\S+)$
ql cron find 任务名 #查找该任务

^ql\\s+cron\\s+logs\\s+(\\S+)$
ql cron logs 任务名 #查看该任务日志

^ql\\s+update$
ql update #升级青龙面板

^ql\\s+update\\s+logs$
ql update logs #查看青龙面板升级日志

^ql\\s+cron\\s+hide\\s+duplicate$
ql cron hide duplicate #删除重复任务

ql\\s+config$
ql config #查看青龙配置文件 QQ字数限制所以用不了

^ql\\s+envs$
ql envs #查看青龙已有变量不含CK

^ql\\s+env\\s+get\\s+(\\S+)$
ql env get 变量名 #获取变量信息包含名称/状态和值

^ql\\s+env\\s+find\\s+(\\S+)$
ql env find 变量名 #用于查询是否已设置此变量

^ql\\s+env\\s+set\\s+(\\S+)\\s+(\\S+)$
ql env set 变量名 变量值 #设置新的变量

^ql\\s+env\\s+remark\\s+(\\S+)\\s+(\\S+)$
ql env remark 变量名 备注 #设置变量备注

^ql\\s+env\\s+disable\\s+(\\S+)$
ql env disable 变量名 #禁用变量

^ql\\s+env\\s+enable\\s+(\\S+)$
ql env enable 变量名 #启用变量

如果还有其他的可以在评论补充。

七、配置文件、js插件、插件开发函数等!

傻妞功能较为广泛,可以自定义在conf/config.yaml中添加API配置,也可以自己写js脚本放到develop/replies目录里。

API配置样板文件如下:

replies:
  #文本类型的回复
  - type: text
    rules:
      - 在吗
    content: 我是花猫,欢迎来撩,可以发送功能查看我能做什么,喵喵喵!
  #链接类型回复
  - type: url
    rules:
      - 壁纸
      - 二次元
    request:
        #图片
        response_type: image 
        url: https://acg.toubiec.cn/random.php
  - type: url
    rules:
      - 姐姐
      - 妹妹
      - 小姐姐
    request:
        #图片
        response_type: image 
        url: http://api.btstu.cn/sjbz/zsy.php
  - type: url
    rules:
      - 舔狗日记
      - 舔狗
    request:
        #纯文本
        response_type: text
        url: https://api.oick.cn/dog/api.php
  - type: url
      - 股票 (.*)
    request:
        #纯文本
        response_type: text
        url: https://zyzcfa.com:444/api/stocks?keyword=1
  - type: url
    rules:
      - 蓝奏云 (.*) (.*)
      - 蓝奏云 (.*)
      - 蓝奏云 (.*)密码:(.*)
    request:
        #纯文本
        response_type: json
        url: http://yingy.20wl.co/Api/php/LanZous.php?url=1&pwd=2
        get: data.url
  - type: url
    rules:
      - 游戏
      - 开始游戏
    request:
        #纯文本
        response_type: text
        url: http://hm.suol.cc/API/game_gs.php?msg=开始游戏
  - type: url
    rules:
      - 答 (.*)
      - 答(.*)
    request:
        #纯文本
        response_type: text
        url: http://hm.suol.cc/API/game_gs.php?msg=答1
  - type: url
    rules:
      - 提示
    request:
        #纯文本
        response_type: text
        url: http://hm.suol.cc/API/game_gs.php?msg=提示
  - type: url
    rules:
      - ^查字\\s*(\\S*)$
    replace:
      - 
        - <br>

        - "\\n" 
    request:
        response_type: template
        url: https://api.tianapi.com/txapi/xhzd/index?key=19eea766886493ecd04e770d0c2b56f9&word=1
        template: "汉字:gjson(newslist.[0].hanzi)\\n读音:gjson(newslist.[0].pyyb)\\n解释:gjson(newslist.[0].content)\\n拓展:gjson(newslist.[0].explain)"    
  # - type: url
  #   rules:
  #     - .*
  #   request:
  #       #纯文本
  #       response_type: json
  #       url: https://api.ixiaowai.cn/tgrj/index.php
  #       get: data.msg

定时推送js样例文件

// [rule: ^每日热点$ ]
// [cron: 0 6 * * * ]
// [admin: true ]

var data = request(
  "url": "https://api.tianapi.com/txapi/wxhottopic/index?key=" + get("tianapi_key"), // set otto tianapi_key ?
  "dataType": "json"
)
var newslist = ["每日热点:"];
var content = "";
var messages = eval('(' + get("hottopic") + ')'); // set otto hottopic [imType:"qq",groupCode:16319366]
if (data && data.newslist) 
  hots = data.newslist.reverse()
  for (var i = 0; i < hots.length; i++) 
      newslist.push((i + 1) + ". " + hots[i].word)
  
  content = newslist.join("\\n")
 else 
  content = "每日热点," + data

for (var i = 0; i < messages.length; i++) 
  message = messages[i]
  message["content"] = content
  push(message)

sendText("操作成功。")

js开发函数

js 插件可调用或被支持的傻妞内置函数(此命令多数转自科技玩家https://www.kejiwanjia.com/jiaocheng/58292.html

// [rule: ^demo(.*)$] 使用正则匹配,括号中为期望匹配的值
// [rule: demo ?] 使用问号匹配
// [rule: demo] 直接匹配
// [cron: 36 11,17 * * *] 定时任务
// [admin: true] 是否只允许管理员使用
// [disable: false] 是否禁用
// [priority: 10] 匹配优先级
// [server: 1 ] 如果不指定rule和cron时,设置为非空则指定为一个空服务,否则这个js不会加载
//上下文获取
param(n)//获取rule中期望捕获的第n个字符串,中文需要使用 encodeURI(param(n))
ImType()//聊天来源类型如:qq,wx等,其中fake为特殊调用可能为cron调用
GetUserID()//发送人用户id
GetUsername()//发送人昵称
GetChatID()//群号
GetChatname()//群名
GetContent()//获取接受到的消息
isAdmin()//发送人是否管理员
//系统功能相关
cancall(name)//返回特殊调用的函数
call(name,value)//特殊调用
Debug(log)//打印日志
sleep(millisecond)//休眠
GroupBan(uid, time)//群禁言,需要在群聊才可用
GroupKick(uid, reject)//群踢人,reject为是否拉黑名单,需要在群聊才可用
RecallMessage(GetMessageID())//撤回群消息
request(
    url:"",//必须
    method:"",//get,post,put,delete,可选,默认get
    headers:,//可选
    body:"",//可选
    dataType:"",//location=>重定向url,json=>尝试解析为对象,否则为body字符串,可选
    useproxy:false,//可选
)//发送请求
//存储相关 sillyGirl存储结构为 mainKey1:key1:value,key2:value,mainKey2:key1:value,key2:value
bucketGet(mainKey,key)//取值
bucketSet(mainKey,key,value)//存值
bucketKeys(mainKey)//获取所有key名称
get(key)//同bucketGet("otto",key)
set(key,value)//同bucketSet("otto",key,value)
//消息相关
input(time /*[,str]*/)//等待下一个消息,str不为空时可接受其他群的消息 str可选
breakIn(str)//生成一个新的消息向下传递,可以被所有命令处理(包括当前js,所以需要防止递归)
Continue()//消息继续向下传递,可以被其他命令处理
Delete()//撤回接受到的这条消息
image(string)//图片地址转可拼接消息字符串
push(
    imType:string,//发送到指定渠道,如qq,wx,必须有
    userID:"",//groupCode不为0时为@指定用户,可选
    groupCode:"",//可选
    content:string,//发送消息
    )//给指定im发送消息
notifyMasters(string)//通知管理员
sendText(string)//发送文本
sendImage(url)//发送图片
sendVideo(url)//发送视频
傻妞js插件新功能:
//[show: 插件说明] 自定义插件说明
//[imType:qq,wx] 白名单,只在qq,wx生效
//[imType+:qq,wx] 同上,不写+号默认为白名单模式
//[imType-:qq] 黑名单qq,除了qq生效
//[userId+:id1,id2] 同样支持黑白名单模式
//[groupId+:id1,id2] 同样支持黑白名单模式

其他待补充,就到这吧!

以上是关于开源个QQ机器人,借Mirai.Net对接部署的Mirai项目,调用OpenAI接口的。的主要内容,如果未能解决你的问题,请参考以下文章

OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇

模型导出与部署项目接口与百度机器人对接

云物理机ironic对接ceph云盘ceph-iscsi-gateway

云物理机ironic对接ceph云盘ceph-iscsi-gateway

云物理机ironic对接ceph云盘ceph-iscsi-gateway

开源qq机器人框架能一直用吗