Skip to content

Lama3L9R/tg-bote

Repository files navigation

tg-bote v2

996.icu LICENSE

bote,一个 DP7 群专属的、辣妈开发的踢寄波特框架,插件基于的。

Bote V2 还在测试中,请勿用于生产环境

我号又一次的被杜叔叔扬了,所以,更新暂停

关于 V2 的主要变动

  • 插件结构重做,让插件编写更加顺畅
    • 比如支持了文件夹格式的插件
    • 又比如支持了我也不知道怎么描述反正就是很好用的功能
  • 增强的事件系统
  • 增强的配置文件
  • 增强的 Logging
  • 完善文档
  • 不再需要 bootstrap.ts,当然你也可以有
  • 更换后端

关于 V2.1 的更新计划

  • 不再使用 telegraf 作为踢寄波特API的后端。
    • 由于其类型系统过于复杂和并未对二次框架开发做兼容(很多功能较为long3yu2),因此决定未来迁移,核心 API 变动应该会较小
    • 计划实现版本 V2.1.0
  • `` 更多事件支持
    • 计划实现版本 V2.1.3
  • InteractiveUI 接口
    • 提供一个快速创建带按钮消息的接口
    • 计划实现版本 V2.1.4

关于 V2.2 的更新计划

  • 支持 Channel,完全统一化 API
    • 开发过踢寄波特的应该都知道,Channel 和 Group 是两个消息事件,但是没有任何道理非得搞成两个
    • 因此将在 V3 完全支持 Channel 和 Group,不对其进行过于严格的区分
    • 计划实现版本 V2.2.0

关于 V3 的更新计划

  • 可能会支持一下动态加载 npm 包,但这真的很难做
  • 进一步完善文档
  • 创建完整的接口抽象层,使得可以任意更换后端,更换后端只需要使用中间件链接接口和后端即可,未来计划自己写 TGBot 后端

部署指南

V2 的更新带来了一个 CLI 工具,这样您就不再需要编写一个 bootstrap.ts 了,一行指令,直接启动

$ yarn tg-bote run

哦,当然,你需要编写一个 bote.config.ts ()

// bote.config.ts

import { defineConfig } from "tg-bote";

export default defineConfig({
    credentials: {
        mongodbConnectionURL: "",
        telegramBoteToken: ""
    },
    telegram: { },
    devMode: true
})

值得注意的是,在新版本中强制要求了生产环境使用 Webhook 模式。

插件开发指南

下面是一个示范插件

// example plugin

import { BotePluginModule, definePlugin, Logging, Events, Command, I } from "tg-bote";

export default definePlugin({
//  vvvv 命名规范详见文档
    name: "icu.lama.example.ExamplePlugin",
    displayName: "ExamplePlugin",
    author: 'lamadaemon',
    version: "1.0@stable"
//         出于安全因素考量,插件之间不得直接通过 import 或者 require 获取其 module,应通过 requirePlugin
// vvvvvv  由于不使用 ESM 的 export,因此需要手动调用框架提供的 export 函数 来为其他插件提供 API
}).export(myAPI).onUnload(() => {
    // shutdown logic
}).begin(main)

function myAPI(name: string) {
    Logging.getLogger("ExamplePlugin").info(`hello ${name}`)
}

//                  vvvvvvvvvvvvvvvvvvvvvv 并非必须,因为此函数在调用前一定会进行 this 绑定,这里只是为了让 tsc 闭嘴。
async function main(this: BotePluginModule) {
//  vvvvvvvvvvvvvvvvvvvvv 您不应该使用 console.log,请使用 bote 提供的 Logging 系统,也最好不要用全局 Logger
    this.getLogger().info(`Hello world`)

    Events.onFinalization.subscribe(this, () => {
        this.getLogger().info("Finalization event triggered")
    })

//  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 指令系统无变化
    I.getMasterDispatcher().register(this, new Command("echo", async (ctx, args) => {
        return await ctx.reply(args.join(" "))
    }))
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published