From ed1d5b86010939fc66def1a441444d4e269b52b8 Mon Sep 17 00:00:00 2001 From: "serafim.urukov" Date: Thu, 12 Aug 2021 00:35:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20Co?= =?UTF-8?q?nversationHandler,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D1=80=D0=B0=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83?= =?UTF-8?q?=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D1=81=D1=82=D1=83=D0=B4=D0=B5=D0=BD=D1=82=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TelegramBot/bot.py | 70 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/TelegramBot/bot.py b/TelegramBot/bot.py index 121b829..951ced8 100644 --- a/TelegramBot/bot.py +++ b/TelegramBot/bot.py @@ -21,8 +21,8 @@ from messages import Messages TOKEN = Path(".secrets/bot_token.txt").read_text() MESSAGES = Messages() HOST = "http://carolyn-spreadsheets:5000" -"""ID канала где собираются логи""" -CHAT_LOG_ID = -507530583 +CHAT_LOG_ID = -507530583 # ID канала где собираются логи +BROADCAST_MESSAGE, BROADCAST_PUBLISH_DONE = range(2) class TgLogger(logging.Logger): @@ -88,15 +88,11 @@ class TgLogger(logging.Logger): return super().exception(msg, *args, **kwargs) -updater = Updater(token=TOKEN, use_context=True) -dispatcher = updater.dispatcher - logging.setLoggerClass(TgLogger) logging.basicConfig( format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO ) LOG = logging.getLogger(__name__) -LOG.bot = updater.bot # ================================================================ BOT COMMANDS @@ -174,36 +170,68 @@ def broadcast(update: Update, context: CallbackContext): data = r.json() access_message.edit_text(f"👨‍💻 {data['name']}") - kb = telegram.ReplyKeyboardMarkup( + reply_keyboard = telegram.ReplyKeyboardMarkup( [ [telegram.KeyboardButton("5374"), telegram.KeyboardButton("5371")], [telegram.KeyboardButton("1337")], ], one_time_keyboard=True, ) - update.message.reply_text("Выбери группу", reply_markup=kb) + update.message.reply_text("Выбери группу", reply_markup=reply_keyboard) + return BROADCAST_MESSAGE except: access_message.edit_text("🤚 Команда не может быть выполнена") LOG.exception("Не удалось отправить сообщение в бродкаст.") + return ConversationHandler.END -def echo(update: Update, context: CallbackContext): - """Ответ на не командное сообщение (отвечает тем же сообщением)""" - context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text) +def publish_message(update: Update, context: CallbackContext): + """Чел выбирает группу и для нее готовится сообщение.""" + update.message.reply_html( + "🖋 Сообщение для группы:", reply_markup=telegram.ReplyKeyboardRemove() + ) + return BROADCAST_PUBLISH_DONE + + +def publish_done(update: Update, context: CallbackContext): + """Рассылка выполняется здесь.""" + update.message.reply_html("📨 Сообщения разосланы") + return ConversationHandler.END + + +def cancel(update: Update, context: CallbackContext): + """Cancels and ends the conversation.""" + update.message.reply_text("Отмена операции", reply_markup=ReplyKeyboardRemove()) + return ConversationHandler.END # ==================================================================== HANDLERS -start_handler = CommandHandler("start", start) -grades_handler = CommandHandler("grades", grades) -broadcast_handler = CommandHandler("broadcast", broadcast) -echo_handler = MessageHandler(Filters.text & (~Filters.command), echo) +def main() -> None: + updater = Updater(token=TOKEN, use_context=True) + dispatcher = updater.dispatcher + LOG.bot = updater.bot -dispatcher.add_handler(start_handler) -dispatcher.add_handler(grades_handler) -dispatcher.add_handler(echo_handler) -dispatcher.add_handler(broadcast_handler) + start_handler = CommandHandler("start", start) + grades_handler = CommandHandler("grades", grades) -# Начало работы бота -updater.start_polling() + broadcast_handler = ConversationHandler( + entry_points=[CommandHandler("broadcast", broadcast)], + states={ + BROADCAST_MESSAGE: [MessageHandler(Filters.text, publish_message)], + BROADCAST_PUBLISH_DONE: [MessageHandler(Filters.text, publish_done)], + }, + fallbacks=[CommandHandler("cancel", cancel)], + ) + + dispatcher.add_handler(start_handler) + dispatcher.add_handler(grades_handler) + dispatcher.add_handler(broadcast_handler) + + # Начало работы бота + updater.start_polling() + + +if __name__ == "__main__": + main()