Add install.ps1/install.sh, shrink README to script-first flow, register bot commands, and route API calls through undici EnvHttpProxyAgent when a proxy is set (v0.2.2). Co-authored-by: Cursor <cursoragent@cursor.com>
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import type { Context } from '@deepseek-ai/cordis'
|
|
import Schema from '@deepseek-ai/schemastery'
|
|
import { TelegramBridge } from './bridge.js'
|
|
|
|
export const name = 'dsh-telegram-channel'
|
|
export const inject = ['agents']
|
|
|
|
export interface TelegramChannelConfig {
|
|
token?: string
|
|
allowedUserIds?: number[]
|
|
allowAllUsers?: boolean
|
|
maxMessageLength?: number
|
|
pollingTimeoutSec?: number
|
|
}
|
|
|
|
export const Config: Schema<TelegramChannelConfig> = Schema.object({
|
|
token: Schema.string().default(''),
|
|
allowedUserIds: Schema.array(Schema.number()).default([]),
|
|
allowAllUsers: Schema.boolean().default(false),
|
|
maxMessageLength: Schema.number().default(4096),
|
|
pollingTimeoutSec: Schema.number().default(30),
|
|
})
|
|
|
|
function resolveAllowedUserIds(config: TelegramChannelConfig): number[] {
|
|
if (config.allowedUserIds && config.allowedUserIds.length > 0) {
|
|
return config.allowedUserIds
|
|
}
|
|
const raw = process.env.DSH_TELEGRAM_ALLOWED_USER_IDS ?? ''
|
|
return raw
|
|
.split(/[,;\s]+/)
|
|
.map((part) => part.trim())
|
|
.filter(Boolean)
|
|
.map((part) => Number(part))
|
|
.filter((n) => Number.isFinite(n) && n > 0)
|
|
}
|
|
|
|
export function apply(ctx: Context, config: TelegramChannelConfig): void {
|
|
const token = (config.token && config.token.length > 0)
|
|
? config.token
|
|
: (process.env.DSH_TELEGRAM_TOKEN ?? '')
|
|
if (!token) {
|
|
ctx.logger.error(
|
|
'dsh-telegram-channel: missing bot token (set config.token or DSH_TELEGRAM_TOKEN); polling not started',
|
|
)
|
|
return
|
|
}
|
|
const bridge = new TelegramBridge(ctx, {
|
|
token,
|
|
allowedUserIds: resolveAllowedUserIds(config),
|
|
allowAllUsers: config.allowAllUsers ?? false,
|
|
maxMessageLength: config.maxMessageLength ?? 4096,
|
|
pollingTimeoutSec: config.pollingTimeoutSec ?? 30,
|
|
})
|
|
ctx.effect(() => {
|
|
bridge.start()
|
|
return () => { void bridge.stop() }
|
|
}, 'dsh-telegram-channel.serve')
|
|
}
|
|
|
|
export * from './format.js'
|
|
export * from './client.js'
|
|
export * from './auth.js'
|
|
export * from './commands.js'
|
|
export * from './bridge.js'
|