示例
获取机器人信息
ts
/**
* 获取机器人基本信息。
*/
import { Bot } from 'fanbook-api-node-sdk'
const YOUR_BOT_TOKEN = '在此填入你的机器人令牌'
const bot = new Bot(YOUR_BOT_TOKEN)
console.log('Information about your bot:', await bot.getMe())
订阅事件
ts
/**
* 订阅所有机器人所在的频道、私聊的事件,如消息推送、消息撤回等。
* 收到纯文本消息“取消”后,取消订阅。
*/
import { Bot } from 'fanbook-api-node-sdk'
const YOUR_BOT_TOKEN = '在此填入你的机器人令牌'
const CLOSING_MESSAGE = '{"type":"text","text":"取消","contentType":0}' // 纯文本消息“取消”
const bot = new Bot(YOUR_BOT_TOKEN)
const bus = await bot.listen()
bus.on('connect', (ev) => {
console.log('Connection opened, id:', ev.client_id)
})
bus.on('error', e => console.error('Error occurred:', e))
bus.on('push', (ev) => {
console.log('Received push:', ev)
if (ev.action !== 'push') // 非消息推送
return
if (ev.data.content === CLOSING_MESSAGE) { // 收到“取消”消息
console.log('Closing connection by message:', ev.data.message_id)
bus.emit('close')
}
})
私信消息转发
ts
/**
* 私信收到文本消息后,原样转发到指定频道。
*/
import { Bot, ChannelType } from 'fanbook-api-node-sdk'
const YOUR_BOT_TOKEN = '在此填入你的机器人令牌'
const TARGET_CHANNEL = BigInt('在此填入转发到的频道 ID')
const bot = new Bot(YOUR_BOT_TOKEN)
const bus = await bot.listen()
console.log('Service started')
bus.on('push', async (ev) => {
if (ev.action !== 'push') // 非新消息,不处理
return
if (ev.data.channel_type !== ChannelType.DMChannel)
return // 非私聊,不处理
const content = JSON.parse(ev.data.content)
if (content.contentType !== 0)
return // 非纯文本,不处理
try {
const res = await bot.sendMessage(TARGET_CHANNEL, content.text, ev.data.desc)
console.log(`Forwarded ${ev.data.message_id} -> ${res.message_id}`)
}
catch (e) {
console.error(`Failed to forward message ${ev.data.message_id}:`, e)
}
})
发送富文本
ts
/**
* 发送富文本消息到指定频道。
*
* 注:机器人发送消息需要申请白名单。
*/
import type { RichTextNode } from 'fanbook-api-node-sdk'
import { Bot, RichText } from 'fanbook-api-node-sdk'
const YOUR_BOT_TOKEN = '在此填入你的机器人令牌'
const TARGET_CHANNEL = BigInt('在此填入发送到的频道 ID')
const bot = new Bot(YOUR_BOT_TOKEN)
const nodes: RichTextNode[] = [{
insert: '粗体\n',
attributes: { bold: true },
}, {
insert: '斜体\n',
attributes: { italic: true },
}, {
insert: '链接\n',
attributes: { link: 'https://fanbook-api-sdk.js.org/' },
}, {
insert: 'Hello World',
}, {
insert: '\n',
attributes: { 'code-block': true },
}]
const text = RichText.fromNodes(nodes)
await bot.sendMessage(TARGET_CHANNEL, text.toString(), '点击查看富文本消息')