Skip to content

API 调用

本项目存在的意义就是让 Fanbook OpenAPI 更易用

机器人实例

调用 API 之前,需要创建一个机器人实例:

ts
import { 
Bot
} from 'fanbook-api-node-sdk'
const
bot
= new
Bot
('在此填入你的机器人令牌')

Bot的构造函数接受一个字符串,作为机器人令牌。在此实例上的 API 调用默认使用此令牌。

SDK 不校验令牌的有效性,但错误的令牌会在 API 调用时报错。

函数式调用 API

如果不使用 SDK,发送一条消息需要:

ts
import 
_jsonBigint
from 'json-bigint'
const
jsonBigint
=
_jsonBigint
({
strict
: true,
useNativeBigInt
: true })
const
BOT_TOKEN
= '在此填入你的机器人令牌'
const
CHAT_ID
=
BigInt
('在此填入发送到的聊天 ID')
const
CONTENT
= '在此填入消息内容'
const
xhr
= new
XMLHttpRequest
()
xhr
.
open
('POST', `https://a1.fanbook.mobi/api/bot/${
BOT_TOKEN
}/sendMessage`)
xhr
.
onload
= (
e
) => {
if (
xhr
.
readyState
!== 4)
return const
data
=
jsonBigint
.
parse
(
xhr
.
responseText
)
if (
data
.ok)
console
.
log
(
data
.result)
else
console
.
error
(
data
)
}
xhr
.
send
(
jsonBigint
.
stringify
({
chat_id
:
CHAT_ID
,
text
:
CONTENT
,
desc
:
CONTENT
,
}))
ts
import 
_jsonBigint
from 'json-bigint'
const
jsonBigint
=
_jsonBigint
({
strict
: true,
useNativeBigInt
: true })
const
BOT_TOKEN
= '在此填入你的机器人令牌'
const
CHAT_ID
=
BigInt
('在此填入发送到的聊天 ID')
const
CONTENT
= '在此填入消息内容'
const
response
= await
fetch
(`https://a1.fanbook.mobi/api/bot/${
BOT_TOKEN
}/sendMessage`, {
method
: 'POST',
body
:
jsonBigint
.
stringify
({
chat_id
:
CHAT_ID
,
text
:
CONTENT
,
desc
:
CONTENT
,
}), }) const
data
=
jsonBigint
.
parse
(await
response
.
text
())
if (
data
.ok)
console
.
log
(
data
.result)
else
console
.
error
(
data
)
ts
import 
axios
from 'axios'
import
_jsonBigint
from 'json-bigint'
const
jsonBigint
=
_jsonBigint
({
strict
: true,
useNativeBigInt
: true })
const
BOT_TOKEN
= '在此填入你的机器人令牌'
const
CHAT_ID
=
BigInt
('在此填入发送到的聊天 ID')
const
CONTENT
= '在此填入消息内容'
const
response
= await
axios
.
post
(`https://a1.fanbook.mobi/api/bot/${
BOT_TOKEN
}/sendMessage`,
jsonBigint
.
stringify
({
chat_id
:
CHAT_ID
,
text
:
CONTENT
,
desc
:
CONTENT
,
}), {
transformResponse
:
data
=>
jsonBigint
.
parse
(
data
),
}) const
data
=
response
.
data
if (
data
.ok)
console
.
log
(
data
.result)
else
console
.
error
(
data
)

使用 SDK,发送一条消息只需:

ts
import { 
Bot
} from 'fanbook-api-node-sdk'
const
BOT_TOKEN
= '在此填入你的机器人令牌'
const
CHAT_ID
=
BigInt
('在此填入发送到的聊天 ID')
const
CONTENT
= '在此填入消息内容'
const
bot
= new
Bot
(
BOT_TOKEN
)
console
.
log
(await
bot
.
sendMessage
(
CHAT_ID
,
CONTENT
,
CONTENT
))

这就是函数化 API 调用的优点:将业务无关的代码抽离,使代码逻辑清晰、便于维护。

常用的 API 可用方法封装于 Bot 中,作为成员函数存在。详见 API 文档

自定义请求

Bot 类的函数化 API 被调用时,会对参数进行一些转换,并使用 Bot#axios 发起网络请求。

Bot#axios 支持解析请求、响应体中的 BigInt,你也可以在构造 Bot 实例时传入第二个参数,作为 axios 选项。

如果需要自定义 axios 选项,只需在构造时传入第 2 个参数作为 axios 选项,即可在请求使用的 axios 实例中加入自定义选项。

ts
const 
bot
= new
Bot
('在此填入你的机器人令牌', {
axios
: { // axios 选项
timeout
: 3 * 1000,
timeoutErrorMessage
: 'Timeout 3000ms',
}, })

对于 SDK 还未支持的 API,你可以直接使用 axios 实例:

ts
// baseURL 是 `https://a1.fanbook.mobi/api/bot/${this.token}`
await 
bot
.
axios
.
post
('/path/to/api')

这种方式同样支持解析请求、响应体中的 BigInt,但发生错误时抛出的是 axiosError 而不是 FanbookApiError

Released under the MIT License.