Download src/controllers.ts from mfoud444/bot-me: direct link, hf CLI and curl.
- Browser
- Download file 10.9 kB
-
https://huggingface.co/spaces/mfoud444/bot-me/resolve/main/src/controllers.ts
- Command line
-
hf download hf://spaces/mfoud444/bot-me/src/controllers.ts
-
curl -L -o controllers.ts https://huggingface.co/spaces/mfoud444/bot-me/resolve/main/src/controllers.ts
10.9 kB
| import { Request, Response } from "express"; | |
| import { | |
| handleSubmitCode, | |
| handleLoginWithSession, | |
| handleRequestCode, | |
| handleCreateTask, | |
| handleCancelTask, | |
| handleSendMessage, | |
| startBots, | |
| stopBots, | |
| restartBots, | |
| getBotsState, | |
| } from "./services"; | |
| import { handleAddTelegrafBot } from "./bots"; | |
| import { getActiveClients as getClients, getActiveTasks as getTasks, sendResponse } from "./utils"; | |
| import { supabase } from './db/supabase'; | |
| import { loadCommandsAndMessages } from './config'; | |
| import { stopBot } from './bots/botManager'; | |
| import { telegrafBots } from "./models"; | |
| export const submitCode = async (req: Request, res: Response) => { | |
| const { phoneNumber, code } = req.body; | |
| const result = await handleSubmitCode(phoneNumber, code); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const loginWithSession = async (req: Request, res: Response) => { | |
| const { apiKey, hash, session, phoneNumber } = req.body; | |
| const result = await handleLoginWithSession(apiKey, hash, session, phoneNumber); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const getActiveClients = (req: Request, res: Response) => { | |
| const result = getClients(); | |
| sendResponse(res, 200, result); | |
| }; | |
| export const requestCode = async (req: Request, res: Response) => { | |
| const { apiKey, hash, phoneNumber } = req.body; | |
| const result = await handleRequestCode(apiKey, hash, phoneNumber); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const addTelegrafBot = async (req: Request, res: Response) => { | |
| const { botToken } = req.body; | |
| const result = await handleAddTelegrafBot(botToken); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const createTask = async (req: Request, res: Response) => { | |
| const { phoneNumber, taskType, taskData } = req.body; | |
| const result = await handleCreateTask(phoneNumber,taskType, taskData); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const cancelTask = async (req: Request, res: Response) => { | |
| const { taskId } = req.params; | |
| const result = await handleCancelTask(taskId); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const getActiveTasks = (req: Request, res: Response) => { | |
| const result = getTasks(); | |
| sendResponse(res, 200, result); | |
| }; | |
| export const sendMessage = async (req: Request, res: Response) => { | |
| const { botToken, chatId, text } = req.body; | |
| const result = await handleSendMessage(botToken, chatId, text); | |
| sendResponse(res, result.status, result.data); | |
| }; | |
| export const startBotsEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| await startBots(); | |
| sendResponse(res, 200, { message: "Bots started successfully" }); | |
| } catch (error: any) { | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; | |
| export const stopBotsEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| await stopBots(); | |
| sendResponse(res, 200, { message: "Bots stopped successfully" }); | |
| } catch (error: any) { | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; | |
| export const restartBotsEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| await restartBots(); | |
| sendResponse(res, 200, { message: "Bots restarted successfully" }); | |
| } catch (error: any) { | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; | |
| export const getBotsStateEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| const state = await getBotsState(); | |
| sendResponse(res, 200, state); | |
| } catch (error: any) { | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; | |
| // Command Controllers | |
| export const getCommands = async (req: Request, res: Response) => { | |
| try { | |
| const { data: commands, error } = await supabase | |
| .from('commands') | |
| .select('*') | |
| .order('created_at'); | |
| if (error) throw error; | |
| res.status(200).json(commands); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const getCommand = async (req: Request, res: Response) => { | |
| try { | |
| const { id } = req.params; | |
| const { data: command, error } = await supabase | |
| .from('commands') | |
| .select('*') | |
| .eq('id', id) | |
| .single(); | |
| if (error) throw error; | |
| res.status(200).json(command); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const createCommand = async (req: Request, res: Response) => { | |
| try { | |
| const { key, description } = req.body; | |
| if (!key) { | |
| return res.status(400).json({ error: 'Command key is required' }); | |
| } | |
| const { data: command, error } = await supabase | |
| .from('commands') | |
| .insert([{ key, description }]) | |
| .select() | |
| .single(); | |
| if (error) throw error; | |
| // Reload commands and messages | |
| await loadCommandsAndMessages(); | |
| res.status(201).json(command); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const updateCommand = async (req: Request, res: Response) => { | |
| try { | |
| const { id } = req.params; | |
| const { key, description } = req.body; | |
| if (!key) { | |
| return res.status(400).json({ error: 'Command key is required' }); | |
| } | |
| const { data: command, error } = await supabase | |
| .from('commands') | |
| .update({ key, description, updated_at: new Date() }) | |
| .eq('id', id) | |
| .select() | |
| .single(); | |
| if (error) throw error; | |
| // Reload commands and messages | |
| await loadCommandsAndMessages(); | |
| res.status(200).json(command); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const deleteCommand = async (req: Request, res: Response) => { | |
| try { | |
| const { id } = req.params; | |
| const { error } = await supabase | |
| .from('commands') | |
| .delete() | |
| .eq('id', id); | |
| if (error) throw error; | |
| // Reload commands and messages | |
| await loadCommandsAndMessages(); | |
| res.status(204).send(); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| // Message Controllers | |
| export const getMessages = async (req: Request, res: Response) => { | |
| try { | |
| const { command_id } = req.query; | |
| let query = supabase | |
| .from('messages') | |
| .select('*, commands(*)'); | |
| if (command_id) { | |
| query = query.eq('command_id', command_id); | |
| } | |
| const { data: messages, error } = await query.order('created_at'); | |
| if (error) throw error; | |
| res.status(200).json(messages); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const getMessage = async (req: Request, res: Response) => { | |
| try { | |
| const { id } = req.params; | |
| const { data: message, error } = await supabase | |
| .from('messages') | |
| .select('*, commands(*)') | |
| .eq('id', id) | |
| .single(); | |
| if (error) throw error; | |
| res.status(200).json(message); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const createMessage = async (req: Request, res: Response): Promise<void> => { | |
| try { | |
| const { command_id, key, value, description } = req.body; | |
| if (!command_id || !key || !value) { | |
| res.status(400).json({ error: 'Command ID, key, and value are required' }); | |
| return; | |
| } | |
| const { data: message, error } = await supabase | |
| .from('messages') | |
| .insert([{ command_id, key, value, description }]) | |
| .select() | |
| .single(); | |
| if (error) throw error; | |
| // Reload commands and messages | |
| await loadCommandsAndMessages(); | |
| res.status(201).json(message); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const updateMessage = async (req: Request, res: Response): Promise<void> => { | |
| try { | |
| const { id } = req.params; | |
| const { command_id, key, value, description } = req.body; | |
| if (!command_id || !key || !value) { | |
| res.status(400).json({ error: 'Command ID, key, and value are required' }); | |
| return; | |
| } | |
| const { data: message, error } = await supabase | |
| .from('messages') | |
| .update({ command_id, key, value, description, updated_at: new Date() }) | |
| .eq('id', id) | |
| .select() | |
| .single(); | |
| if (error) throw error; | |
| // Reload commands and messages | |
| await loadCommandsAndMessages(); | |
| res.status(200).json(message); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const deleteMessage = async (req: Request, res: Response): Promise<void> => { | |
| try { | |
| const { id } = req.params; | |
| const { error } = await supabase | |
| .from('messages') | |
| .delete() | |
| .eq('id', id); | |
| if (error) throw error; | |
| // Reload commands and messages | |
| await loadCommandsAndMessages(); | |
| res.status(204).send(); | |
| } catch (error) { | |
| res.status(500).json({ error: error.message }); | |
| } | |
| }; | |
| export const startTelegrafBotsEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| // Fetch bot tokens from database | |
| const { data: bots, error } = await supabase | |
| .from('telegraf_bots') | |
| .select('*') | |
| .eq('is_active', true); | |
| if (error) { | |
| throw error; | |
| } | |
| const results = []; | |
| for (const bot of bots) { | |
| try { | |
| const result = await handleAddTelegrafBot(bot.token); | |
| results.push({ | |
| botId: bot.id, | |
| status: result.status, | |
| message: result.data.message || result.data.error | |
| }); | |
| } catch (error) { | |
| results.push({ | |
| botId: bot.id, | |
| status: 500, | |
| message: error.message | |
| }); | |
| } | |
| } | |
| sendResponse(res, 200, { | |
| message: "Telegraf bots startup completed", | |
| results | |
| }); | |
| } catch (error: any) { | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; | |
| export const startSpecificBotEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| const { botId } = req.body; | |
| if (!botId) { | |
| return sendResponse(res, 400, { error: "Bot ID is required" }); | |
| } | |
| // Start the bot using ID | |
| const result = await handleAddTelegrafBot(botId); | |
| sendResponse(res, result.status, result.data); | |
| } catch (error: any) { | |
| console.error('Error starting specific bot:', error); | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; | |
| export const stopSpecificBotEndpoint = async (req: Request, res: Response) => { | |
| try { | |
| const { botId } = req.body; | |
| if (!botId) { | |
| return sendResponse(res, 400, { error: "Bot ID is required" }); | |
| } | |
| const result = await stopBot(botId); | |
| if (result.success) { | |
| sendResponse(res, 200, { message: result.message }); | |
| } else { | |
| sendResponse(res, 404, { error: result.message }); | |
| } | |
| } catch (error: any) { | |
| console.error('Error stopping specific bot:', error); | |
| sendResponse(res, 500, { error: error.message }); | |
| } | |
| }; |