Add BMAD, Claude, Cursor, and OpenCode configuration directories along with AGENTS.md documentation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
105 lines
3.7 KiB
TypeScript
105 lines
3.7 KiB
TypeScript
import type { Plugin } from "@opencode-ai/plugin"
|
|
import { SimpleTelegramBot } from "./lib/telegram-bot"
|
|
|
|
// 🔧 CONFIGURATION: Set to true to enable this plugin
|
|
const ENABLED = false
|
|
|
|
export const TelegramNotify: Plugin = async ({ $ }) => {
|
|
// Plugin disabled - set ENABLED = true to activate
|
|
if (!ENABLED) return {}
|
|
|
|
// 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()
|
|
}
|
|
|
|
// 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")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|