import datetime import httpx import socket from telegram.ext import ConversationHandler, CommandHandler, CallbackQueryHandler from telegram import InlineKeyboardButton, InlineKeyboardMarkup from telegram.constants import ParseMode FIRST = 1 from .basehandler import BaseHandler class StatusHandler(BaseHandler): """Shows a short status of the program.""" def __init__(self, entry_string, models): self.start_time = datetime.datetime.now() self.entry_string = entry_string self.models = models self.handler = ConversationHandler( entry_points=[CommandHandler(self.entry_string, self.entry_point)], states={ FIRST: [ CallbackQueryHandler(self.send_log, pattern="^full$"), ] }, fallbacks=[CommandHandler('status', self.entry_point)], ) async def entry_point(self, update, context) -> None: await super().entry_point(update, context) keyboard = [ [ InlineKeyboardButton("And the log?", callback_data="full"), ] ] reply_markup = InlineKeyboardMarkup(keyboard) delta = str(datetime.datetime.now() - self.start_time) message = "BeebBop, this is Norbit\n" try: ip = httpx.get('https://api.ipify.org').text with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.connect(('8.8.8.8', 80)) (addr, port) = s.getsockname() local_ips = addr except: ip = "not fetchable" local_ips = "not fetchable" message += "Status: Running 🟢\n" message += f"Uptime: `{delta[:delta.rfind('.')]}`\n" message += f"IP \(public\): `{ip}`\n" message += f"IP \(private\): `{local_ips}`\n" message += f"Chat ID: `{update.effective_chat.id}`\n" if update.message: await update.message.reply_text(message, reply_markup=reply_markup, parse_mode=ParseMode.MARKDOWN_V2) else: await update._effective_chat.send_message(message, reply_markup=reply_markup, parse_mode=ParseMode.MARKDOWN_V2) return FIRST async def send_log(self, update, context) -> None: query = update.callback_query wanted = query.data.replace("status-","") await query.answer() await query.edit_message_text("Here you go: https://portainer.kluster.moll.re/#!/1/kubernetes/applications/journal/journal-botte") return ConversationHandler.END