mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 05:11:52 +00:00
Добавил ConversationHandler, который обрабатывает рассылку сообщений студентам
This commit is contained in:
parent
95a985d848
commit
ed1d5b8601
@ -21,8 +21,8 @@ from messages import Messages
|
|||||||
TOKEN = Path(".secrets/bot_token.txt").read_text()
|
TOKEN = Path(".secrets/bot_token.txt").read_text()
|
||||||
MESSAGES = Messages()
|
MESSAGES = Messages()
|
||||||
HOST = "http://carolyn-spreadsheets:5000"
|
HOST = "http://carolyn-spreadsheets:5000"
|
||||||
"""ID канала где собираются логи"""
|
CHAT_LOG_ID = -507530583 # ID канала где собираются логи
|
||||||
CHAT_LOG_ID = -507530583
|
BROADCAST_MESSAGE, BROADCAST_PUBLISH_DONE = range(2)
|
||||||
|
|
||||||
|
|
||||||
class TgLogger(logging.Logger):
|
class TgLogger(logging.Logger):
|
||||||
@ -88,15 +88,11 @@ class TgLogger(logging.Logger):
|
|||||||
return super().exception(msg, *args, **kwargs)
|
return super().exception(msg, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
updater = Updater(token=TOKEN, use_context=True)
|
|
||||||
dispatcher = updater.dispatcher
|
|
||||||
|
|
||||||
logging.setLoggerClass(TgLogger)
|
logging.setLoggerClass(TgLogger)
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
||||||
)
|
)
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
LOG.bot = updater.bot
|
|
||||||
|
|
||||||
# ================================================================ BOT COMMANDS
|
# ================================================================ BOT COMMANDS
|
||||||
|
|
||||||
@ -174,36 +170,68 @@ def broadcast(update: Update, context: CallbackContext):
|
|||||||
data = r.json()
|
data = r.json()
|
||||||
access_message.edit_text(f"👨💻 {data['name']}")
|
access_message.edit_text(f"👨💻 {data['name']}")
|
||||||
|
|
||||||
kb = telegram.ReplyKeyboardMarkup(
|
reply_keyboard = telegram.ReplyKeyboardMarkup(
|
||||||
[
|
[
|
||||||
[telegram.KeyboardButton("5374"), telegram.KeyboardButton("5371")],
|
[telegram.KeyboardButton("5374"), telegram.KeyboardButton("5371")],
|
||||||
[telegram.KeyboardButton("1337")],
|
[telegram.KeyboardButton("1337")],
|
||||||
],
|
],
|
||||||
one_time_keyboard=True,
|
one_time_keyboard=True,
|
||||||
)
|
)
|
||||||
update.message.reply_text("Выбери группу", reply_markup=kb)
|
update.message.reply_text("Выбери группу", reply_markup=reply_keyboard)
|
||||||
|
return BROADCAST_MESSAGE
|
||||||
except:
|
except:
|
||||||
access_message.edit_text("🤚 Команда не может быть выполнена")
|
access_message.edit_text("🤚 Команда не может быть выполнена")
|
||||||
LOG.exception("Не удалось отправить сообщение в бродкаст.")
|
LOG.exception("Не удалось отправить сообщение в бродкаст.")
|
||||||
|
return ConversationHandler.END
|
||||||
|
|
||||||
|
|
||||||
def echo(update: Update, context: CallbackContext):
|
def publish_message(update: Update, context: CallbackContext):
|
||||||
"""Ответ на не командное сообщение (отвечает тем же сообщением)"""
|
"""Чел выбирает группу и для нее готовится сообщение."""
|
||||||
context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text)
|
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
|
# ==================================================================== 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)
|
start_handler = CommandHandler("start", start)
|
||||||
dispatcher.add_handler(grades_handler)
|
grades_handler = CommandHandler("grades", grades)
|
||||||
dispatcher.add_handler(echo_handler)
|
|
||||||
dispatcher.add_handler(broadcast_handler)
|
|
||||||
|
|
||||||
# Начало работы бота
|
broadcast_handler = ConversationHandler(
|
||||||
updater.start_polling()
|
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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user