88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
|
|
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, CallbackContext
|
|
from telegram.ext import (
|
|
Updater,
|
|
CommandHandler,
|
|
CallbackQueryHandler,
|
|
ConversationHandler,
|
|
CallbackContext,
|
|
)
|
|
|
|
FIRST = 1
|
|
|
|
class Help():
|
|
"""Shows the functions and their usage"""
|
|
|
|
def __init__(self):
|
|
self.available_commands = {}
|
|
|
|
|
|
def create_handler(self):
|
|
conv_handler = ConversationHandler(
|
|
entry_points=[CommandHandler('help', self.entry_point)],
|
|
states={
|
|
FIRST: [
|
|
CallbackQueryHandler(self.print_all, pattern="^all$"),
|
|
CallbackQueryHandler(self.choose_specific, pattern="^specific$"),
|
|
CallbackQueryHandler(self.print_one, pattern='func-'),
|
|
]
|
|
},
|
|
fallbacks=[CommandHandler('help', self.entry_point)],
|
|
)
|
|
return conv_handler
|
|
|
|
def add_commands(self, commands):
|
|
# commands is a dict {"name": class}
|
|
for k in commands:
|
|
self.available_commands[k] = commands[k].__doc__
|
|
|
|
def entry_point(self, update: Update, context: CallbackContext) -> None:
|
|
keyboard = [
|
|
[
|
|
InlineKeyboardButton("All commands", callback_data="all"),
|
|
InlineKeyboardButton("Just one", callback_data="specific"),
|
|
]
|
|
]
|
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
|
update.message.reply_text("What exactly do you want?", reply_markup=reply_markup)
|
|
return FIRST
|
|
|
|
|
|
def print_all(self, update: Update, context: CallbackContext) -> None:
|
|
query = update.callback_query
|
|
query.answer()
|
|
|
|
all_cmd = ""
|
|
for k in self.available_commands:
|
|
all_cmd += k + " - " + self.available_commands[k] +"\n"
|
|
|
|
query.edit_message_text(text="List of all commands:\n" + all_cmd)
|
|
return ConversationHandler.END
|
|
|
|
|
|
def choose_specific(self, update: Update, context: CallbackContext) -> None:
|
|
query = update.callback_query
|
|
query.answer()
|
|
|
|
|
|
keyboard = [[InlineKeyboardButton(k, callback_data="func-" + k)] for k in self.available_commands]
|
|
|
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
|
query.edit_message_text(
|
|
text="What command should be printed?", reply_markup=reply_markup
|
|
)
|
|
return FIRST
|
|
|
|
|
|
def print_one(self, update: Update, context: CallbackContext) -> None:
|
|
"""Show new choice of buttons"""
|
|
query = update.callback_query
|
|
data = query.data.replace("func-", "")
|
|
|
|
query.answer()
|
|
message = self.available_commands[data]
|
|
query.edit_message_text(
|
|
text= message
|
|
)
|
|
return ConversationHandler.END
|