mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
Add a platform-aware route target system so a single route can forward to several destinations at once (e.g. a Discord channel and a Telegram group). Route.target becomes Route.targets[] with per-entry platform, channelId/threadId for Discord and chatId/topicId for Telegram; the legacy single-target format is normalized on load and accepted by the admin API. Implement the Telegram driver with HTML rendering and Bot API sendMessage (chat_id + message_thread_id for topics, retry on 429/5xx), plus /gh commands served over POST /telegram/webhook: login, logout, comment, merge and close. The comment/merge/close commands resolve the issue or PR from the replied-to notification message. OAuth binding now stores a D1 telegram_links mapping and replies with a confirmation. Sync the Telegram webhook from the scheduled trigger via setWebhook.
17 lines
683 B
TypeScript
17 lines
683 B
TypeScript
import type { RouteTarget, Env, NeutralMessage } from "../../types";
|
|
import type { PlatformDriver, SendResult } from "../types";
|
|
import { sendMessage } from "./rest";
|
|
import { renderNeutralMessage } from "./render";
|
|
|
|
export class TelegramDriver implements PlatformDriver {
|
|
readonly id = "telegram";
|
|
|
|
async send(message: NeutralMessage, target: RouteTarget, env: Env): Promise<SendResult> {
|
|
const chatId = target.chatId ?? "";
|
|
if (!chatId) {
|
|
return { ok: false, error: "target.chatId is required", errorCode: "NO_TARGET" };
|
|
}
|
|
const token = env.TELEGRAM_TOKEN ?? "";
|
|
return sendMessage(token, chatId, renderNeutralMessage(message), target.topicId);
|
|
}
|
|
}
|