使用ts實現的oneBot應用啟動器,支援icqq、qq官方機器人、微信以及釘釘機器人
Docs
使用範例
全域安裝(0.4.8以後不建議)
1 安裝依賴
2 初始化設定檔
在你想要存放設定檔的目錄執行如下指令
3 更改產生的預設設定檔成你想要的設定檔後再次執行上面的指令,啟動項目
局部安裝
1 初始化node項目
2. 安裝onebots以及對應適配器的依賴
npm install onebots
npm install @icqqjs/icqq # 如需使用icqq适配器,请务必安装
npm install web-wechat # 如需使用微信适配器,请务必安装
npm install qq-official-bot # 如需使用qq官方机器人适配器,请务必安装
npm install node-dd-bot # 如需使用钉钉机器人适配器,请务必安装
安裝:
- 在你的專案根目錄新建檔案
.npmrc
,並輸入以下內容
@icqqjs:registry=https://npm.pkg.github.com
- 命令列輸入
npm login --scope=@icqqjs --auth-type=legacy --registry=https://npm.pkg.github.com
,回車,依照指示登入github
npm login --scope=@icqqjs --auth-type=legacy --registry=https://npm.pkg.github.com
UserName: # 你的github账号
Password: # 前往 https://github.com/settings/tokens/new 获取,scopes勾选 read:packages
E-Mail: # 你的公开邮箱地址
- 安裝依賴
npm install @icqqjs/icqq # or > yarn add @icqqjs/icqq
3. 執行以下命令產生設定檔
npx onebots -r icqq #注册icqq适配器并启动onebots
npx onebots -r wechat #注册微信适配器并启动onebots
npx onebots -r qq #注册qq官方适配器并启动onebots
npx onebots -r dingtalk #注册钉钉适配器并启动onebots
# 你也可以同时注册多个适配器,多次使用-r即可,例如 npx onebots -r qq -r icqq -r wechat
4. 更改產生的預設設定檔成你想要的設定檔後再次執行上面的指令,啟動項目
預設設定檔
port : 6727 # 监听端口
log_level : info # 日志等级
platform : 5 # 机器人客户端协议(1:Android 2:APad 3:Watch 4:IMac 5:IPad)
timeout : 30 #登录超时时间(秒)
general : # 通用配置,在单个配置省略时的默认值
V11 : # oneBotV11的通用配置
heartbeat : 3 # 心跳间隔 (秒)
access_token : " " # 访问api的token
post_timeout : 15 # 上报超时时间,(秒)
secret : " " # 上报数据的sha1签名密钥
rate_limit_interval : 4 # ws心跳间隔(秒)
post_message_format : string # "string"或"array"
reconnect_interval : 3 # 重连间隔 (秒)
use_http : true # 是否使用 http
enable_cors : true # 是否允许跨域
filters : {} # 过滤器配置
use_ws : true # 是否使用websocket
http_reverse : [] # http上报地址
ws_reverse : [] # 反向ws连接地址
V12 : # oneBotV12的通用配置
heartbeat : 3 # 心跳间隔 (秒)
access_token : " " # 访问api的token
request_timeout : 15 # 上报超时时间 (秒)
reconnect_interval : 3 # 重连间隔 (秒)
enable_cors : true # 是否允许跨域
use_http : true # 是否启用http
use_ws : true # 是否启用 websocket
filters : {} # 过滤器配置
webhook : [] # http 上报地址
ws_reverse : [] # 反向ws连接地址
protocol :
platform : 2
sign_api_addr : " " #你的签名地址
password : " " # 账号密码,未配置则扫码登陆
# ...其他配置项参考icqq的Config配置
# 每个账号的单独配置(用于覆盖通用配置)
icqq.123456789 :
password : " " # 账号密码,未配置则扫码登陆
version : V11 # 使用的oneBot版本
# ...其他配置项参见上方对应oneBot版本的通用配置
protocol :
platform : 2
sign_api_addr : " " #你的签名地址
# ...其他配置项参考icqq的Config配置
qq.123456789 : # `${适配器名称}:${appId}`
versions :
- version : V11
# 。。。其他配置项参见上方对应oneBot版本的通用配置
protocol : # 将会覆盖通用配置中的protocol
token : ' ' # qq机器人token
secret : ' ' # qq机器人secret
sandbox : false # 是否沙箱环境
intents : # 需要监听的intents
- ' GROUP_AT_MESSAGE_CREATE ' # 群聊@事件 没有群聊权限请注释
- ' C2C_MESSAGE_CREATE ' # 私聊事件 没有私聊权限请注释
- ' DIRECT_MESSAGE ' # 频道私信事件
# - 'GUILD_MESSAGES' # 私域机器人频道消息事件,公域机器人请注释
- ' GUILDS ' # 频道变更事件
- ' GUILD_MEMBERS ' # 频道成员变更事件
- ' GUILD_MESSAGE_REACTIONS ' # 频道消息表态事件
- ' INTERACTION ' # 互动事件
- ' PUBLIC_GUILD_MESSAGES ' # 公域机器人频道消息事件,私域机器人请注释
# 。。。其他配置项参见上方对应oneBot版本的通用配置
dingtalk.abcedfg : # `${适配器名称}:${clientId}`
versions :
- version : V11
- version : V12
protocol :
clientSecret : ' ' # 钉钉机器人秘钥 必填
username : '钉钉机器人' #钉钉后台配置的机器人名称 不填则显示'钉钉机器人'
avatar : ' ' # 机器人头像 不填则显示钉钉logo
wechat.bot1 : # `${适配器名称}:${机器人唯一标识}`
versions :
- version : V11
- version : V12
protocol : {}
配置解釋
Config
配置項 | 類型 | 預設值 | desc |
---|
port | number | 6727 | 服務監聽端口 |
logLevel | string | info | 日誌等級 |
general | {V11:V11.Config,V12:V12.Config} | general | 通用配置 |
[adapter].[number] | OneBotConfig | - | 機器人配置 |
OneBotConfig
配置項 | 類型 | 預設值 | desc |
---|
password | string | - | 僅icqq生效,帳號密碼未填寫或填寫為空則掃碼登陸 |
V11 | V11.Config | configV11 | V11配置 |
V12 | V12.Config | configV12 | V12配置 |
protocol | 傳遞給client初始化的配置 | {} | |
ConfigV11
配置項 | 類型 | 預設值 | desc |
---|
heartbeat | number | 3 | 心跳間隔單位:秒 |
access_token | string | - | 訪問令牌 |
secret | string | - | 簽署金鑰 |
rate_limit_interval | number | 4 | 限速間隔單位:秒 |
post_message_format | string | string | 訊息格式化 |
reconnect_interval | number | 3 | 重連間隔單位:秒 |
use_http | boolean | false | 是否使用http協議 |
enable_cors | boolean | false | 是否允許跨域 |
filters | Filters | {} | 事件過濾器配置 |
use_ws | boolean | false | 是否使用ws協議 |
http_reverse_url | string[] | - | http上報地址地址 |
ws_reverse_url | string[] | - | 反向ws連接位址 |
ConfigV12
配置項 | 類型 | 預設值 | desc |
---|
heartbeat | number | 3 | 心跳間隔單位:秒 |
access_token | string | - | 訪問令牌 |
request_timeout | number | 15 | 請求超時單位:秒 |
reconnect_interval | number | 3 | 重連間隔單位:秒 |
enable_cors | boolean | false | 是否允許跨域 |
filters | Filters | {} | 事件過濾器配置 |
use_http | boolean | false | 是否使用http協議 |
use_ws | boolean | false | 是否使用ws協議 |
webhook_reverse_url | string[] | - | webhook上報地址 |
ws_reverse_url | string[] | - | 反向ws連接位址 |
事件過濾器
文法說明
onebots
的事件過濾器最外層是一個JSON對象,其中的鍵是鍵如果是運算元,則值作為運算符的參數,如果不是運算符,則表示對事件資料對象對應key
進行過濾。- 過濾規則中任何一個物件, 只有在它的所有項目都匹配的情況下, 才會讓事件通過(等價於一個and 運算),如果值為一個數組,則表示事件對應
key
值需滿足其中一個。 - 可用邏輯運算子有:
$and
(邏輯與) 、 $or
(邏輯或) 、 $not
(邏輯非)、 $nor
(邏輯異或)、 $regexp
(文字正規匹配)、 $like
(文字模糊符合) 、 $gt
(數值大於比較)、 $gte
(數值大於等於比較)、 $lt
(數值小於比較)、 $lte
(數值小於等於比較)、 $between
(數值範圍比較)
範例
1. 僅上報私聊事件
filters :
message_type : private
2. 私聊或指定群組聊天
filters :
$or :
message_type : private
group_id :
- 123456789 987654321
3. 私聊事件且不是指定用戶
filters :
message_type : private
$not :
user_id :
- 123456789 987654321
4. 私聊事件(排除指定使用者的事件)或指定群組聊天事件
filters :
$or :
- message_type : private
$not :
user_id : 123456789
- message_type : group
group_id : 987654321
5. 僅上報訊息事件且使用者年齡大於18歲
filters :
type : message
sender :
age :
$gt : 18
6. 僅上報訊息事件且訊息內容以!開頭的訊息
filters :
type : message
raw_message :
.regexp : ' ^!|! '
7. 不上報訊息內容包含cnm
的消息
filters :
$not :
type : message
raw_message :
$like : cnm
使用API管理oneBot
url | method | params | desc |
---|
/list | GET | | 取得目前運行的機器人列表 |
/detail | GET | uin | 取得指定機器人配置 |
/qrcode | GET | uin | 取得指定機器人登入二維碼 |
/add | POST | {uin,...config} | 新增機器人config 為機器人配置 |
/edit | POST | {uin,...config} | 修改機器人配置config 為機器人配置 |
/remove | get | uin,force | 移除機器人,force為true時,將刪除機器人data目錄 |
鳴謝
- icqqjs/icqq 底層服務支持
- takayama-lily/onebot oneBot V11 原版本