bot_sio_transfer
SocketIO 转发台,保持 botoy 能力和插件功能的同时,透传其接口,以此使用更灵活、生态更好的技术进行开发
Usage
请参考 botoy 文档接入本插件
Example
考虑一种图文混排场景,如何从复杂结构内快速获取第一张图片的 url ? ( 假设图片是第一位出现 )
代码量减少
这里以 TypeScript 为例,解析一个复杂的字符串结构 ctx?.Content
,方法包装后仅有两行。
(ctx: IGroupMsg) => {
const url = getPicMsgFirstUrl(ctx?.Content)
sendMsgV2(url)
}
安全性提高
可正如所说,用户提供的消息并不一定含有图片,可能是任意消息,图文混排的顺序也不确定,甚至有没有值都不确定。
籍以生态工具库的强大我们可以进行任意深度的安全取值:
const msgObj = JSON.parse(ctx?.Content)
// 100% safe get value
// or msgObj?.GroupPic?.[0]?.Url
return _get(msgObj, 'GroupPic.[0].Url')
增强类型提示
受够了 Python 不够强大的类型提示,又不想涉猎强类型语言的复杂,折中方案或许是最快选择。
// 强类型语言一样的方便枚举值
export enum EMsgType {
Image = 'PicMsg',
Text = 'TextMsg',
Voice = 'VoiceMsg',
Xml = 'XmlMsg',
}
export interface IGroupMsg {
message: string
CurrentQQ: number
// 当不确定时即为 any 或 unknown ,而在强类型语言内必定要明确指明,复杂度大大提升
data: Record<string, unknown>
FromGroupId: number
FromGroupName: string
FromUserId: number
FromNickName: string
Content: string
MsgType: EMsgType
MsgTime: number
MsgSeq: number
MsgRandom: number
// 编辑器会告诉你哪个值可能不存在,哪个值必定存在
RedBaginfo?: Record<string, any>
}
当然,此处仅仅举一例 case 说明,当你跳出 py 弱区,采用其他方便的工具得到的便利。
完整 case 可查看 example/src/index.ts
。
项目实践
可参见 sio-yyy 项目级实践示例。
Other
所以,为什么不再造一个框架/工具?
喜欢无偿浪费时间重复造轮子是吧