The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Telegram::BotKit::Screens - Implements navigation by screens JSON file. Used by Telegram::BotKit::Wizard

VERSION

version 0.03

SYNOPSIS

	# $screens_arrayref:

	"screens" : [
	    { "name": "item_select", "start_command": "/book", "welcome_msg": "Please select an item to book", "keyboard":
	      [
	        { "key": "Item 1", "answ" : "Good" },
	        { "key": "Item 2", "answ" : "Well" },
	        { "key": "Item 3", "answ" : "Fine" }
	      ] 
	    }, 
	    { "name": "day_select", "parent": "item_select", "welcome_msg": "Please select a day", "keyboard":
	      [
	        { "key": "today" }, 
	        { "key": "tomorrow" }
	      ]
    	},
	    { "name": "today_time_picker", 
	      "parent": "day_select", 
	      "callback_msg": "today", 
	      "kb_build_func": "dynamic1_build_func"
	    },
	    { "name": "tomorrow_time_picker", 
	      "parent": "day_select", 
	      "callback_msg": "tomorrow", 
	      "kb_build_func": "dynamic2_build_func"
	    }
    ]

	use Telegram::Screens;
	my $screens->Telegram::Screens->new($screens_arrayref);
	
	$screens->get_screen_by_name("item_select")->{name}; # day_select
	
	$screens->get_next_screen_by_name("item_select")->{name}; # day_select
	$screens->get_next_screen_by_name("day_select", "today")->{name}; # today_time_picker
	
	$screens->get_prev_screen_by_name("day_select")->{name}; # item_select
	
	$screens->level("item_select");  # 0
	$screens->level("day_select");  # 1
	$screens->level("today_time_picker");  # 2
	$screens->level("tomorrow_time_picker");  # 2

	$screens->get_screen_by_start_cmd("/book")->{name}; # item_select

	$screen->is_last_screen('item_select'); # 0
	$screen->is_last_screen('tomorrow_time_picker'); # 1

	$screens->get_keys_arrayref('item_select'); # ["Item 1", "Item 2", "Item 3"]
	
	$screens->get_keys_arrayref('item_select'); # ["Good", "Well", "Fine"]

	$screens->get_answ_by_key('item_select', 'Item 1');  # Good

METHODS

get_screen_by_name

Return screen item by its name

Screen name must be unique accross json file

$screens->get_screen_by_name("item_select")->{name}; # item_select

get_next_screen_by_name

Return next screen item by current screen name and text reply on current screen

Resolve screen relationships by parent and callback_msg fields

	"screens" : [
	    { "name": "item_select", "start_command": "/book", "welcome_msg": "Please select an item to book", "keyboard":
	      [
	        { "key": "Item 1", "answ" : "Good" },
	        { "key": "Item 2", "answ" : "Well" },
	        { "key": "Item 3", "answ" : "Fine" }
	      ] 
	    }, 
		{ "name": "day_select", "parent": "item_select", "welcome_msg": "Please select a day", "keyboard":
	      [
	        { "key": "today" }, 
	        { "key": "tomorrow" }
	      ]
    	},
	    { "name": "today_time_picker", 
	      "parent": "day_select", 
	      "callback_msg": "today", 
	      "kb_build_func": "dynamic1_build_func"
	    },
	    { "name": "tomorrow_time_picker", 
	      "parent": "day_select", 
	      "callback_msg": "tomorrow", 
	      "kb_build_func": "dynamic2_build_func"
	    }
	]

$screens->get_next_screen_by_name("item_select")->{name}; # day_select $screens->get_next_screen_by_name("day_select", "today")->{name}; # today_time_picker $screens->get_next_screen_by_name("day_select", "todmorrow")->{name}; # tomorrow_time_picker

get_prev_screen_by_name

Return previous screen

$screens->get_prev_screen_by_name("day_select")->{name}; # item_select

level

Return screen level according call sequence. First screen has level 0.

$screens->level("item_select"); # 0 $screens->level("day_select"); # 1

get_screen_by_start_cmd

Return screen item if it contains start_command

"screens" : [
    { "name": "item_select", "start_command": "/book", "welcome_msg": "Please select an item to book", "keyboard":
      [
        { "key": "Item 1", "answ" : "Good" },
        { "key": "Item 2", "answ" : "Well" },
        { "key": "Item 3", "answ" : "Fine" }
      ] 
    }, ...
 ]

$screens->get_screen_by_start_cmd("/book")->{name}; # item_select

is_last_screen

Return true if screen is last screen

$screen->is_last_screen('item_select'); # 0 $screen->is_last_screen('tomorrow_time_picker'); # 1

is_first_screen

Return true if screen is first screen

$screen->is_last_screen('item_select'); # 1 $screen->is_last_screen('tomorrow_time_picker'); # 0

is_static

Return true if screen item has keyboard value (sign of static screen)

get_keys_arrayref

Return all "key" fields of "keyboard" property as array

"screens" : [ { "name": "item_select", "start_command": "/book", "welcome_msg": "Please select an item to book", "keyboard": [ { "key": "Item 1", "answ" : "Good" }, { "key": "Item 2", "answ" : "Well" }, { "key": "Item 3", "answ" : "Fine" } ] }, ...

$screens->get_keys_arrayref('item_select'); # ["Item 1", "Item 2", "Item 3"]

get_answers_arrayref

Return all "answ" fields of "keyboard" property as array

"screens" : [ { "name": "item_select", "start_command": "/book", "welcome_msg": "Please select an item to book", "keyboard": [ { "key": "Item 1", "answ" : "Good" }, { "key": "Item 2", "answ" : "Well" }, { "key": "Item 3", "answ" : "Fine" } ] }, ...

$screens->get_answers_arrayref('item_select'); # ["Good", "Well", "Fine"]

get_answ_by_key

Return reply to particular button

"screens" : [ { "name": "item_select", "start_command": "/book", "welcome_msg": "Please select an item to book", "keyboard": [ { "key": "Item 1", "answ" : "Good" }, { "key": "Item 2", "answ" : "Well" }, { "key": "Item 3", "answ" : "Fine" } ] }, ...

$screens->get_answ_by_key('item_select', 'Item 1'); # Good

AUTHOR

Pavel Serikov <pavelsr@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Pavel Serikov.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.