# 初级指南
# 使用自定义代码代替默认回复
提示
自定义代码中,首行必须是 /*JavaScript*/
(不区分大小写),否则会当作文本回复
关于为什么非得是这个开头,因为以后会同时支持多语言(埋坑)
/*JavaScript*/
function action(event) {
console.log(event)
}
将本次的事件(event)对象打印到日志上了,日志可以在右侧查看
event 对象说明
event 对象的属性说明可以到 event 对象说明 查看
/*JavaScript*/
function action(event) {
console.log(event)
bot.sendGroup(event.groupId, event.content)
}
bot 对象是一个全局对象,意味你可以在任何地方随时调用他,现在您可以在 action 函数中写任何业务代码,这个函数会当做回调函数,当有消息触发时,action 函数将会被调用
bot 对象说明
bot 对象有什么方法和属性,这取决于 adapter(适配器)是如何实现的,请打开 api.js 文件,查看 module.exports 属性的定义,并跟踪函数的定义和实现,也可以到 bot 对象说明 中查看详细说明
# 发送 HTTP 请求
发送 HTTP 请求之前,您需要先导入 HTTP 模块,默认会携带一个 HTTP 模块,名字叫做 ok-http,使用 require 函数进行导入模块对象
/*JavaScript*/
let okhttp = require('ok-http')
let http = okhttp.create({
connectTimeout: 5000 // 连接服务器超时时间, 5秒
})
function action(event) {
let res = http.get({
url: 'http://www.baidu.com'
// data: {} // post 请求可以携带body
})
// res.data 如果响应体是json, 那这里会自动 parse 成 object, 否则就是 undefined
// res.text 纯文本的响应体
// res.statusCode HTTP 状态码
// 接入查天气 api,就可以查天气。接入 ChatGPT,就可以跟 ChatGPT 聊天
bot.sendGroup(event.groupId, res.text)
}
# __builder__ 对象
this 上默认有 __builder__ 对象,表示一个构建者信息
可以 console.log(__builder__)
试一试吧
# 启动线程,setTimeout
使用 setTimeout 可以实现启动线程,延时执行某项任务
/*JavaScript*/
function action(event) {
// 可以做入群验证,1分钟不发验证码就踢掉
bot.sendGroup(event.groupId, '欢迎萌新' + event.userName + '进群')
setTimeout((evt) => {
bot.sendGroup(evt.groupId, '庆祝萌新已经进群1分钟啦~')
}, 60000, event)
}
# 访问数据库
访问数据库请求之前,您需要先导入数据库模块,默认会内置一个数据库模块,名字叫做 simple-default-dao,使用 require 函数进行导入模块对象
默认数据库是使用 sqlite,所以访问的也是sqlite,如果切换成 mysql,访问就变成 mysql 了
/*JavaScript*/
let dao = require('simple-default-dao')
function action(event) {
let users = dao.select('select * from user where id = ?', 12) // 使用 sql 预编译, 有效解决 sql 注入
bot.sendGroup(event.groupId, JSON.stringify(users))
let n = dao.update('update user set name = ? where id = ?', 'xiaoming', 12) // 增删改 都用 update 方法, 返回受影响的行数
bot.sendGroup(event.groupId, n)
}
# 访问外置 mysql 数据库
悠悠使用的是 sqlite 数据库,但是还想访问 mysql 数据库,使用 simple-mysql-dao 模块
已经实现了连接池,simple 开头的数据库访问模块都是自动事务,关于手动事务,规范还在起草中
/*JavaScript*/
var mysql = require('simple-mysql-dao').create({
url: 'mysql://localhost:3306/database?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&zeroDateTimeBehavior=CONVERT_TO_NULL'
username: 'root',
password: 'root'
})
console.log(mysql.select('select * from account where id = ? and name = ?', 1, 'sbxiao'))
function action(event) {
// 业务代码(一万行)...
}
# 实现自动同意群申请
在群通知组件里,新增,目标选择“群申请”
/*JavaScript*/
function action(event) {
// 也可以在这里判断黑名单...
bot.handleGroupRequest(event.token, true)
}
# 实现用户入群自动发送欢迎语
在群通知组件里,新增,目标选择“群成员增加”
/*JavaScript*/
function action(event) {
// xx 天可以动态获取
// bot.getAtCode(event.userId) 是获取 at 用户魔法代码
bot.sendGroup(event.groupId, bot.getAtCode(event.userId) + '\n欢迎萌新新群, 本群已建立 xx 天')
}
# 实现定时任务
在计划组件里,新增,在计划里写入时间表达式
* 可以代表任何时间
比如每分钟执行一次:* 年 * 月 * 日 * 时 * 分 * 星期
比如每 30 分钟执行一次:* 年 * 月 * 日 * 时 0,30 分 * 星期
比如周六周日 20:00 执行一次:* 年 * 月 * 日 20 时 0 分 6,7 星期
/*JavaScript*/
let groupId = '123456'
// action 没有参数,他不是事件触发的
function action() {
bot.sendGroup(groupId, '晚 8 点的活动马上开始了,各位小伙伴赶紧准备哦~')
}
# __dir__ 变量
this 上默认有 __dir__ 变量,他指向程序所在目录
使用 console.log(__builder__)
试一试吧