diff --git a/adapters/dingtalk/src/bot.ts b/adapters/dingtalk/src/bot.ts index 4d63890d..52a266b8 100644 --- a/adapters/dingtalk/src/bot.ts +++ b/adapters/dingtalk/src/bot.ts @@ -103,7 +103,7 @@ export class DingtalkBot extends Bot extends Adapter.WsClient = Schema.intersect([ + export const Options: Schema = Schema.intersect([ Adapter.WsClientConfig, ] as const) } diff --git a/adapters/discord/src/bot.ts b/adapters/discord/src/bot.ts index f5d0a498..aa306206 100644 --- a/adapters/discord/src/bot.ts +++ b/adapters/discord/src/bot.ts @@ -200,7 +200,7 @@ export class DiscordBot extends Bot extends Adapter.WsClient = Schema.intersect([ + export const Options: Schema = Schema.intersect([ Schema.object({ intents: Schema.bitset(Gateway.Intent).description('需要订阅的机器人事件。').default(0 | Gateway.Intent.GUILD_MESSAGES diff --git a/adapters/kook/src/bot.ts b/adapters/kook/src/bot.ts index 55629603..177bb43d 100644 --- a/adapters/kook/src/bot.ts +++ b/adapters/kook/src/bot.ts @@ -175,7 +175,7 @@ export class KookBot = Schema.intersect([ Schema.object({ @@ -184,8 +184,8 @@ export namespace KookBot { : Schema.union(['http', 'ws']).description('选择要使用的协议。').required(), }), Schema.union([ - WsClient.Config, - HttpServer.Config, + WsClient.Options, + HttpServer.Options, ]), KookMessageEncoder.Config, Quester.createConfig('https://www.kookapp.cn/api/v3'), diff --git a/adapters/kook/src/http.ts b/adapters/kook/src/http.ts index 76c26d12..f726414c 100644 --- a/adapters/kook/src/http.ts +++ b/adapters/kook/src/http.ts @@ -3,7 +3,7 @@ import {} from '@cordisjs/server' import { KookBot } from './bot' import { adaptSession } from './utils' -export class HttpServer extends Adapter> { +export class HttpServer extends Adapter> { static inject = ['server'] private logger: Logger @@ -11,7 +11,7 @@ export class HttpServer extends Adapter) { super(ctx) this.logger = ctx.logger('kook') - let { path } = bot.config as HttpServer.Config + let { path } = bot.config as HttpServer.Options path = sanitize(path) ctx.server.post(path, async (ctx) => { const { body } = ctx.request @@ -40,14 +40,14 @@ export class HttpServer extends Adapter = Schema.object({ + export const Options: Schema = Schema.object({ protocol: Schema.const('http').required(), token: Schema.string().description('机器人令牌。').role('secret').required(), verifyToken: Schema.string().description('验证令牌。').role('secret').required(), diff --git a/adapters/kook/src/ws.ts b/adapters/kook/src/ws.ts index 880c5223..b86bb418 100644 --- a/adapters/kook/src/ws.ts +++ b/adapters/kook/src/ws.ts @@ -5,7 +5,7 @@ import { Payload, Signal } from './types' const heartbeatIntervals = [6, 2, 4] -export class WsClient extends Adapter.WsClient> { +export class WsClient extends Adapter.WsClient> { _sn = 0 _ping: NodeJS.Timeout _heartbeat: NodeJS.Timeout @@ -64,12 +64,12 @@ export class WsClient extends Adapter.WsClient = Schema.intersect([ + export const Options: Schema = Schema.intersect([ Schema.object({ protocol: Schema.const('ws').required(process.env.KOISHI_ENV !== 'browser'), token: Schema.string().description('机器人的用户令牌。').role('secret').required(), diff --git a/adapters/lark/src/bot.ts b/adapters/lark/src/bot.ts index 5ab0570a..c865e4cd 100644 --- a/adapters/lark/src/bot.ts +++ b/adapters/lark/src/bot.ts @@ -118,7 +118,7 @@ export class LarkBot extends Bot } export namespace LarkBot { - export interface Config extends HttpServer.Config, Quester.Config { + export interface Config extends HttpServer.Options, Quester.Config { appId: string appSecret: string encryptKey?: string diff --git a/adapters/lark/src/http.ts b/adapters/lark/src/http.ts index 9813225c..d7083c4e 100644 --- a/adapters/lark/src/http.ts +++ b/adapters/lark/src/http.ts @@ -141,14 +141,14 @@ export class HttpServer extends Adapter => Schema.object({ + export const createConfig = (path: string): Schema => Schema.object({ path: Schema.string().role('url').description('要连接的服务器地址。').default(path), selfUrl: Schema.string().role('link').description('服务器暴露在公网的地址。缺省时将使用全局配置。'), verifyToken: Schema.boolean().description('是否验证令牌。'), diff --git a/adapters/qq/src/bot/index.ts b/adapters/qq/src/bot/index.ts index 6e42f7ec..c2617214 100644 --- a/adapters/qq/src/bot/index.ts +++ b/adapters/qq/src/bot/index.ts @@ -115,7 +115,7 @@ export class QQBot extends Bot { } export namespace QQBot { - export interface Config extends QQ.Options, WsClient.Config { + export interface Config extends QQ.Options, WsClient.Options { intents?: number retryWhen: number[] } @@ -132,6 +132,6 @@ export namespace QQBot { intents: Schema.bitset(QQ.Intents).description('需要订阅的机器人事件。'), retryWhen: Schema.array(Number).description('发送消息遇到平台错误码时重试。').default([]), }), - WsClient.Config, + WsClient.Options, ] as const) } diff --git a/adapters/qq/src/ws.ts b/adapters/qq/src/ws.ts index 0698553c..e17636f2 100644 --- a/adapters/qq/src/ws.ts +++ b/adapters/qq/src/ws.ts @@ -90,9 +90,9 @@ export class WsClient extends Adapter.WsClient = Schema.intersect([ + export const Options: Schema = Schema.intersect([ Adapter.WsClientConfig, ]) } diff --git a/adapters/slack/src/bot.ts b/adapters/slack/src/bot.ts index b1cbdae4..5bdf29d1 100644 --- a/adapters/slack/src/bot.ts +++ b/adapters/slack/src/bot.ts @@ -191,7 +191,7 @@ export namespace SlackBot { botToken: string } - export type Config = BaseConfig & (HttpServer.Config | WsClient.Config) + export type Config = BaseConfig & (HttpServer.Options | WsClient.Options) export const Config: Schema = Schema.intersect([ Schema.object({ @@ -200,8 +200,8 @@ export namespace SlackBot { botToken: Schema.string().description('OAuth Token.').role('secret').required(), }), Schema.union([ - WsClient.Config, - HttpServer.Config, + WsClient.Options, + HttpServer.Options, ]), Quester.createConfig('https://slack.com/api/'), ] as const) diff --git a/adapters/slack/src/http.ts b/adapters/slack/src/http.ts index 2b0d43ca..a023c5cc 100644 --- a/adapters/slack/src/http.ts +++ b/adapters/slack/src/http.ts @@ -8,7 +8,7 @@ import { adaptSession } from './utils' export class HttpServer extends Adapter> { static inject = ['server'] - async connect(bot: SlackBot) { + async connect(bot: SlackBot) { const { signing } = bot.config await bot.getLogin() this.ctx.server.post('/slack', async (ctx) => { @@ -51,12 +51,12 @@ export class HttpServer extends Adapter = Schema.object({ + export const Options: Schema = Schema.object({ protocol: Schema.const('http').required(), signing: Schema.string().required(), }) diff --git a/adapters/slack/src/ws.ts b/adapters/slack/src/ws.ts index 9c6fccfd..aee8cd71 100644 --- a/adapters/slack/src/ws.ts +++ b/adapters/slack/src/ws.ts @@ -3,7 +3,7 @@ import { SlackBot } from './bot' import { adaptSession } from './utils' import { SocketEvent } from './types/events' -export class WsClient extends Adapter.WsClient> { +export class WsClient extends Adapter.WsClient> { async prepare() { await this.bot.getLogin() const data = await this.bot.request('POST', '/apps.connections.open', {}, {}, true) @@ -38,11 +38,11 @@ export class WsClient extends Adapter.WsClient = Schema.intersect([ + export const Options: Schema = Schema.intersect([ Schema.object({ protocol: Schema.const('ws').required(process.env.KOISHI_ENV !== 'browser'), }), diff --git a/adapters/telegram/src/bot.ts b/adapters/telegram/src/bot.ts index 977ede8b..45768837 100644 --- a/adapters/telegram/src/bot.ts +++ b/adapters/telegram/src/bot.ts @@ -237,7 +237,7 @@ export namespace TelegramBot { slash?: boolean } - export type Config = BaseConfig & (HttpServer.Config | HttpPolling.Config) + export type Config = BaseConfig & (HttpServer.Options | HttpPolling.Options) export namespace Config { export interface Files { @@ -255,8 +255,8 @@ export namespace TelegramBot { : Schema.union(['server', 'polling']).description('选择要使用的协议。').required(), }), Schema.union([ - HttpServer.Config, - HttpPolling.Config, + HttpServer.Options, + HttpPolling.Options, ]).description('推送设置'), Schema.object({ slash: Schema.boolean().description('是否启用斜线指令。').default(true), diff --git a/adapters/telegram/src/polling.ts b/adapters/telegram/src/polling.ts index 74abb167..2f3ed74e 100644 --- a/adapters/telegram/src/polling.ts +++ b/adapters/telegram/src/polling.ts @@ -8,7 +8,7 @@ export class HttpPolling extends Adapter) { + async connect(bot: TelegramBot) { bot.initialize(async () => { let _retryCount = 0 let _initial = true @@ -75,14 +75,14 @@ export class HttpPolling extends Adapter = Schema.object({ + export const Options: Schema = Schema.object({ protocol: Schema.const('polling').required(process.env.KOISHI_ENV !== 'browser'), pollingTimeout: Schema.natural().role('ms').default(Time.second * 25).description('通过长轮询获取更新时请求的超时 (单位为毫秒)。'), retryTimes: Schema.natural().description('初次连接时的最大重试次数。').default(6), diff --git a/adapters/telegram/src/server.ts b/adapters/telegram/src/server.ts index 8ce6f54e..ce8cbcf8 100644 --- a/adapters/telegram/src/server.ts +++ b/adapters/telegram/src/server.ts @@ -7,7 +7,7 @@ import * as Telegram from './types' export class HttpServer extends Adapter> { static inject = ['server'] - async connect(bot: TelegramBot) { + async connect(bot: TelegramBot) { let { token, path, selfUrl } = bot.config path = sanitize(path || '/telegram') if (selfUrl) { @@ -38,13 +38,13 @@ export class HttpServer extends Adapter = Schema.object({ + export const Options: Schema = Schema.object({ protocol: Schema.const('server').required(), path: Schema.string().description('服务器监听的路径。').default('/telegram'), selfUrl: Schema.string().role('link').description('服务器暴露在公网的地址。缺省时将使用全局配置。'), diff --git a/packages/core/src/adapter.ts b/packages/core/src/adapter.ts index 70ae5d19..b64dc99d 100644 --- a/packages/core/src/adapter.ts +++ b/packages/core/src/adapter.ts @@ -103,7 +103,6 @@ export namespace Adapter { export abstract class WsClient> extends WsClientBase { static reusable = true - static Config = WsClientConfig constructor(ctx: C, public bot: B) { super(ctx, bot.config)