OpenWriterControle/.opencode/plugin/telegram-notify.ts

125 lines
4.6 KiB
TypeScript

import type { Plugin } from "@opencode-ai/plugin"
import { SimpleTelegramBot } from "../lib/telegram-bot"
export const TelegramNotify: Plugin = async ({ $ }) => {
// Initialize Telegram bot
const bot = new SimpleTelegramBot()
let lastMessage = ""
return {
async event(input) {
if (input.event.type === "session.idle") {
// Send the last message content along with idle notification
const message = lastMessage
? `🟡 Session idle! Here's your last message:\n\n${lastMessage}`
: "🟡 Hey! Your OpenCode session is idle - time to check your work!"
bot.sendMessage(message)
}
if (input.event.type === "message.updated") {
// Reset idle timer when user sends messages
bot.resetActivity()
const messageContent = (input.event as any).message?.content ||
(input.event as any).content || ""
// Check if it's a command to send last message
if (messageContent.includes("/send-last") || messageContent.includes("/last")) {
if (lastMessage) {
bot.sendMessage(`📱 Here's your last message:\n\n${lastMessage}`)
} else {
bot.sendMessage("📱 No previous message found.")
}
return
}
// Check if it's a command to send to phone
if (messageContent.includes("/send-to-phone") || messageContent.includes("/phone")) {
if (lastMessage) {
bot.sendMessage(`📱 Sending to your phone:\n\n${lastMessage}`)
} else {
bot.sendMessage("📱 No message to send to phone.")
}
return
}
// Try to capture message content from the event
try {
// Access message content if available
const messageContent = (input.event as any).message?.content ||
(input.event as any).content ||
"Message updated"
if (messageContent && messageContent !== "Message updated") {
lastMessage = messageContent
// Send a preview of the message to Telegram
const preview = lastMessage.length > 200
? lastMessage.substring(0, 200) + "..."
: lastMessage
bot.sendMessage(`📱 Last message preview:\n\n${preview}`)
}
} catch (error) {
// If we can't access the message content, just log it
console.log("Message updated but couldn't capture content")
}
}
if (input.event.type === "file.edited") {
// Reset idle timer when user edits files
bot.resetActivity()
}
if (input.event.type === "message.updated") {
// Reset idle timer when user sends messages
bot.resetActivity()
// Try to capture message content from the event
try {
// Access message content if available
const messageContent = (input.event as any).message?.content ||
(input.event as any).content ||
"Message updated"
if (messageContent && messageContent !== "Message updated") {
lastMessage = messageContent
// Send a preview of the message to Telegram
const preview = lastMessage.length > 200
? lastMessage.substring(0, 200) + "..."
: lastMessage
bot.sendMessage(`📱 Last message preview:\n\n${preview}`)
}
} catch (error) {
// If we can't access the message content, just log it
console.log("Message updated but couldn't capture content")
}
}
// Also listen for message parts being updated
if (input.event.type === "message.part.updated") {
bot.resetActivity()
try {
const partContent = (input.event as any).part?.content ||
(input.event as any).content ||
"Message part updated"
if (partContent && partContent !== "Message part updated") {
lastMessage = partContent
const preview = lastMessage.length > 200
? lastMessage.substring(0, 200) + "..."
: lastMessage
bot.sendMessage(`📱 Message part preview:\n\n${preview}`)
}
} catch (error) {
console.log("Message part updated but couldn't capture content")
}
}
}
}
}