extern crate postgres; use std::error::Error; use teloxide::{ payloads::SendMessageSetters, prelude::*, types::{ InlineKeyboardButton, InlineKeyboardMarkup, InlineQueryResultArticle, InputMessageContent, InputMessageContentText, Me, User, }, utils::command::BotCommands, }; use std::env; use dotenvy::dotenv; use postgres::{Client, NoTls}; use std::thread; mod database; const PRIVATE_CHAT_ID : &str = "-832535905"; const HELLO_MESSAGE : &str ="Приветствую тебя юнный падаван! Я протокольный дроид C-3PO, меня создали чтобы помочь тебе стать джедаем, а пока я могу добавить тебя в тренировочный лагерь. Для этого тебе нужно выбрать команду Регистрация, в списке ниже."; const MESSAGE_FOR_REGISTERING : &str = "Вы зарегистрированы в боте, для того чтобы попасть в закрытый чат - пополните баланс Как пополнить баланс:"; const MESSAGE_FOR_BALANCE : &str ="Ваша подписка действует до: "; const MESSAGE_FOR_INSTRUCTION : &str ="Здесь будут инструкции по пополнению баланса..."; const MESSAGE_FOR_SUPPORT : &str ="По всем возникающим вопросам нажмите на ссылку: @Vitovt21 и затем на кнопку \"Отправить сообщение\""; const MESSAGE_WALLET : &str = "fsavipchat21"; #[derive(BotCommands)] #[command(rename_rule = "lowercase", description = "Я протокольный дроид C-3PO, в настоящий момент я не уменю разговаривать, но мой создатель обещает что я скоро научусь поддерживать разговор. Вот список команд, которые я сейчас понимаю:")] enum Command { #[command(description = "Отобразить этот текст")] Help, #[command(description = "Подписка на приватный канал")] Start, } #[tokio::main] async fn main() -> Result<(), Box> { pretty_env_logger::init(); log::info!("Starting FSA Subscriptions bot (version 0ρ0103)"); let bot = Bot::from_env(); let handler = dptree::entry() .branch(Update::filter_message().endpoint(message_handler)) .branch(Update::filter_callback_query().endpoint(callback_handler)) .branch(Update::filter_inline_query().endpoint(inline_query_handler)); thread::spawn(move || pg_listen__expire_soon(&bot)); thread::spawn(move || pg_listen__expired()); thread::spawn(move || pg_listen__replenishment()); Dispatcher::builder(&bot, handler).enable_ctrlc_handler().build().dispatch().await; Ok(()) }