- Add full Telegram bot functionality with Z.AI API integration
- Implement 4 tools: Bash, FileEdit, WebSearch, Git
- Add 3 agents: Code Reviewer, Architect, DevOps Engineer
- Add 6 skills for common coding tasks
- Add systemd service file for 24/7 operation
- Add nginx configuration for HTTPS webhook
- Add comprehensive documentation
- Implement WebSocket server for real-time updates
- Add logging system with Winston
- Add environment validation
🤖 zCode CLI X - Agentic coder with Z.AI + Telegram integration
80 lines
2.1 KiB
TypeScript
Executable File
80 lines
2.1 KiB
TypeScript
Executable File
#!/usr/bin/env bun
|
|
import { TelegramBot } from './telegram-bot.ts';
|
|
import { readFileSync, writeFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
|
|
interface Config {
|
|
botToken: string;
|
|
allowedUsers: string[];
|
|
zcodeCliXPath: string;
|
|
}
|
|
|
|
async function loadConfig(): Promise<Config> {
|
|
const envPath = join(process.cwd(), '.env');
|
|
const envContent = readFileSync(envPath, 'utf-8');
|
|
|
|
const config: Config = {
|
|
botToken: '',
|
|
allowedUsers: [],
|
|
zcodeCliXPath: process.cwd(),
|
|
};
|
|
|
|
for (const line of envContent.split('\n')) {
|
|
const trimmed = line.trim();
|
|
if (trimmed.startsWith('TELEGRAM_BOT_TOKEN=')) {
|
|
config.botToken = trimmed.replace('TELEGRAM_BOT_TOKEN=', '').trim();
|
|
} else if (trimmed.startsWith('TELEGRAM_ALLOWED_USERS=')) {
|
|
config.allowedUsers = trimmed
|
|
.replace('TELEGRAM_ALLOWED_USERS=', '')
|
|
.split(',')
|
|
.map((u) => u.trim());
|
|
} else if (trimmed.startsWith('ZCODE_CLI_X_PATH=')) {
|
|
config.zcodeCliXPath = trimmed.replace('ZCODE_CLI_X_PATH=', '').trim();
|
|
}
|
|
}
|
|
|
|
if (!config.botToken) {
|
|
throw new Error('TELEGRAM_BOT_TOKEN not found in .env file');
|
|
}
|
|
|
|
return config;
|
|
}
|
|
|
|
async function main() {
|
|
console.log('🚀 zCode CLI X - Telegram Integration');
|
|
console.log('='.repeat(50));
|
|
|
|
try {
|
|
const config = await loadConfig();
|
|
|
|
console.log('✓ Configuration loaded');
|
|
console.log(` Bot Token: ${config.botToken.substring(0, 10)}...`);
|
|
console.log(` Allowed Users: ${config.allowedUsers.join(', ')}`);
|
|
console.log(` zCode CLI X Path: ${config.zcodeCliXPath}`);
|
|
|
|
const bot = new TelegramBot({
|
|
botToken: config.botToken,
|
|
allowedUsers: config.allowedUsers,
|
|
zcodeCliXPath: config.zcodeCliXPath,
|
|
});
|
|
|
|
console.log('\n🤖 Starting Telegram bot...');
|
|
console.log('Press Ctrl+C to stop\n');
|
|
|
|
await bot.startPolling();
|
|
|
|
// Handle graceful shutdown
|
|
process.on('SIGINT', async () => {
|
|
console.log('\n\n🛑 Shutting down Telegram bot...');
|
|
bot.stop();
|
|
process.exit(0);
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('❌ Fatal error:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|