mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-29 23:47:10 +00:00
49_TBot_List: deleteonly lists / internal changes
50_TelegramBot: more silent cmds, caption formatting, several fixes git-svn-id: https://svn.fhem.de/fhem/trunk@16382 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
cecbcf152f
commit
4a1495a79a
@ -1,5 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- change: 49_TBot_List: deleteonly lists / internal changes
|
||||||
|
- change: 50_TelegramBot: more silent cmds, caption formatting,several fixes
|
||||||
- change: lib/OWNet.pm: updated to latest version from
|
- change: lib/OWNet.pm: updated to latest version from
|
||||||
https://sourceforge.net/p/owfs/code/ci/master/tree/module/
|
https://sourceforge.net/p/owfs/code/ci/master/tree/module/
|
||||||
ownet/perl5/OWNet/lib/OWNet.pm
|
ownet/perl5/OWNet/lib/OWNet.pm
|
||||||
|
@ -77,6 +77,15 @@
|
|||||||
# confirm delete configurable as attribute confirmDelete
|
# confirm delete configurable as attribute confirmDelete
|
||||||
# confirm add unsolicited configurable as attribute confirmUnsolicited
|
# confirm add unsolicited configurable as attribute confirmUnsolicited
|
||||||
# 0.6 2017-07-16 confirmDelete & confirmUnsolicited
|
# 0.6 2017-07-16 confirmDelete & confirmUnsolicited
|
||||||
|
#
|
||||||
|
# added list getter for simple text list with \n and empty string if no entries
|
||||||
|
# switched from fhem( calls to AnalyzeCommandChain
|
||||||
|
# added count getter for count of list entries
|
||||||
|
# FIX: Some log entries / issues with inline commands
|
||||||
|
# new attribute deleteOnly to have deleteonly lists / no changes or adds
|
||||||
|
# document deleteOnly
|
||||||
|
# 0.7 2018-03-11 deleteonly lists / internal changes
|
||||||
|
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# TASKS
|
# TASKS
|
||||||
@ -147,6 +156,7 @@ sub TBot_List_Initialize($) {
|
|||||||
"handleUnsolicited:0,1 ".
|
"handleUnsolicited:0,1 ".
|
||||||
"confirmDelete:0,1 ".
|
"confirmDelete:0,1 ".
|
||||||
"confirmUnsolicited:0,1 ".
|
"confirmUnsolicited:0,1 ".
|
||||||
|
"deleteOnly:0,1 ".
|
||||||
"allowedPeers:textField ".
|
"allowedPeers:textField ".
|
||||||
$readingFnAttributes;
|
$readingFnAttributes;
|
||||||
}
|
}
|
||||||
@ -234,17 +244,13 @@ sub TBot_List_Set($@)
|
|||||||
|
|
||||||
my $addArg = ($args[0] ? join(" ", @args ) : undef);
|
my $addArg = ($args[0] ? join(" ", @args ) : undef);
|
||||||
|
|
||||||
Log3 $name, 4, "TBot_List_Set $name: Processing TBot_List_Set( $cmd ) - args :".(defined($addArg)?$addArg:"<undef>").":";
|
|
||||||
|
|
||||||
# check cmd / handle ?
|
# check cmd / handle ?
|
||||||
my $ret = TBot_List_CheckSetGet( $hash, $cmd, $hash->{setoptions} );
|
my $ret = TBot_List_CheckSetGet( $hash, $cmd, $hash->{setoptions} );
|
||||||
|
return $ret if ( $ret );
|
||||||
|
|
||||||
if ( $ret ) {
|
Log3 $name, 4, "TBot_List_Set $name: Processing TBot_List_Set( $cmd ) - args :".(defined($addArg)?$addArg:"<undef>").":";
|
||||||
|
|
||||||
# This is wrong arg / ? --> just return without log
|
if ($cmd eq 'start') {
|
||||||
return $ret;
|
|
||||||
|
|
||||||
} elsif ($cmd eq 'start') {
|
|
||||||
Log3 $name, 4, "TBot_List_Set $name: start of dialog requested ";
|
Log3 $name, 4, "TBot_List_Set $name: start of dialog requested ";
|
||||||
$ret = "start requires a telegrambot and optionally a peer" if ( ( $numberOfArgs < 2 ) && ( $numberOfArgs > 3 ) );
|
$ret = "start requires a telegrambot and optionally a peer" if ( ( $numberOfArgs < 2 ) && ( $numberOfArgs > 3 ) );
|
||||||
|
|
||||||
@ -265,7 +271,7 @@ sub TBot_List_Set($@)
|
|||||||
$tchat = ReadingsVal( $tbot, "msgChatId", undef );
|
$tchat = ReadingsVal( $tbot, "msgChatId", undef );
|
||||||
$tpeer = ReadingsVal( $tbot, "msgPeerId", "" );
|
$tpeer = ReadingsVal( $tbot, "msgPeerId", "" );
|
||||||
} else {
|
} else {
|
||||||
$tpeer = fhem( "get $tbot peerId ".$args[1] );
|
$tpeer = AnalyzeCommandChain( $hash, "get $tbot peerId ".$args[1] );
|
||||||
}
|
}
|
||||||
$ret = "No peer found or specified :$tbot: ".(( $numberOfArgs == 2 )?"":$args[1]) if ( ! $tpeer );
|
$ret = "No peer found or specified :$tbot: ".(( $numberOfArgs == 2 )?"":$args[1]) if ( ! $tpeer );
|
||||||
}
|
}
|
||||||
@ -299,7 +305,7 @@ sub TBot_List_Set($@)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $ret ) {
|
if ( ! $ret ) {
|
||||||
$tpeer = fhem( "get $tbot peerId ".$args[1], 1 );
|
$tpeer = AnalyzeCommandChain( $hash, "get $tbot peerId ".$args[1], 1 );
|
||||||
$ret = "No peer found or specified :$tbot: ".$args[1] if ( ! $tpeer );
|
$ret = "No peer found or specified :$tbot: ".$args[1] if ( ! $tpeer );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,18 +337,24 @@ sub TBot_List_Get($@)
|
|||||||
my $cmd = $args[0];
|
my $cmd = $args[0];
|
||||||
my $arg = $args[1];
|
my $arg = $args[1];
|
||||||
|
|
||||||
Log3 $name, 5, "TBot_List_Get $name: Processing TBot_List_Get( $cmd )";
|
|
||||||
|
|
||||||
# check cmd / handle ?
|
# check cmd / handle ?
|
||||||
my $ret = TBot_List_CheckSetGet( $hash, $cmd, $hash->{getoptions} );
|
my $ret = TBot_List_CheckSetGet( $hash, $cmd, $hash->{getoptions} );
|
||||||
|
return $ret if ( $ret );
|
||||||
|
|
||||||
if ( $ret ) {
|
Log3 $name, 5, "TBot_List_Get $name: Processing TBot_List_Get( $cmd )";
|
||||||
# This is wrong arg / ? --> just return without log
|
|
||||||
return $ret;
|
|
||||||
|
|
||||||
} elsif($cmd eq "textList") {
|
if($cmd eq "textList") {
|
||||||
$ret = TBot_List_getTextList($hash);
|
$ret = TBot_List_getTextList($hash);
|
||||||
|
|
||||||
|
} elsif($cmd eq "list") {
|
||||||
|
my @list = TBot_List_getList( $hash );
|
||||||
|
$ret = "";
|
||||||
|
$ret = join("\n", @list ) if ( scalar( @list ) != 0 );
|
||||||
|
|
||||||
|
} elsif($cmd eq "count") {
|
||||||
|
my @list = TBot_List_getList( $hash );
|
||||||
|
$ret = scalar( @list );
|
||||||
|
|
||||||
} elsif($cmd eq 'queryAnswer') {
|
} elsif($cmd eq 'queryAnswer') {
|
||||||
# parameters cmd - queryAnswer <tbot> <peer> <querydata>
|
# parameters cmd - queryAnswer <tbot> <peer> <querydata>
|
||||||
if ( $numberOfArgs != 4 ) {
|
if ( $numberOfArgs != 4 ) {
|
||||||
@ -366,7 +378,7 @@ sub TBot_List_Get($@)
|
|||||||
$ret = "No telegramBot specified :$tbot:" if ( ! TBot_List_isTBot( $hash, $tbot ) );
|
$ret = "No telegramBot specified :$tbot:" if ( ! TBot_List_isTBot( $hash, $tbot ) );
|
||||||
}
|
}
|
||||||
if ( ! $ret ) {
|
if ( ! $ret ) {
|
||||||
$tpeer = fhem( "get $tbot peerId ".$args[2] );
|
$tpeer = AnalyzeCommandChain( $hash, "get $tbot peerId ".$args[2] );
|
||||||
$ret = "No peer specified :$tbot: ".$args[2] if ( ! $tpeer );
|
$ret = "No peer specified :$tbot: ".$args[2] if ( ! $tpeer );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +421,7 @@ sub TBot_List_Attr(@) {
|
|||||||
if ( ($aName eq 'optionDouble') ) {
|
if ( ($aName eq 'optionDouble') ) {
|
||||||
$aVal = ($aVal eq "1")? "1": "0";
|
$aVal = ($aVal eq "1")? "1": "0";
|
||||||
|
|
||||||
} elsif ( ($aName eq "confirmDelete" ) || ($aName eq "confirmUnsolicited" ) ) {
|
} elsif ( ($aName eq "confirmDelete" ) || ($aName eq "confirmUnsolicited" ) || ($aName eq "deleteOnly" ) ) {
|
||||||
$aVal = ($aVal eq "1")? "1": "0";
|
$aVal = ($aVal eq "1")? "1": "0";
|
||||||
|
|
||||||
} elsif ($aName eq 'allowedPeers') {
|
} elsif ($aName eq 'allowedPeers') {
|
||||||
@ -723,13 +735,15 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
my $ret;
|
my $ret;
|
||||||
|
|
||||||
Log3 $name, 4, "JVLISTMGR_handler: $name - $tbot peer :$peer: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
Log3 $name, 4, "TBot_List_handler: $name - $tbot peer :$peer: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
|
|
||||||
my $lname = TBot_List_getConfigListname($hash);
|
my $lname = TBot_List_getConfigListname($hash);
|
||||||
my $msgId;
|
my $msgId;
|
||||||
my $chatId;
|
my $chatId;
|
||||||
my @list;
|
my @list;
|
||||||
|
|
||||||
|
my $donly = AttrVal($name,'deleteOnly',0);
|
||||||
|
|
||||||
# in start case from group chat both ids will be given and need to be allowed
|
# in start case from group chat both ids will be given and need to be allowed
|
||||||
($peer, $chatId) = split( / /, $peer );
|
($peer, $chatId) = split( / /, $peer );
|
||||||
|
|
||||||
@ -746,7 +760,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
@list = TBot_List_getList( $hash );
|
@list = TBot_List_getList( $hash );
|
||||||
}
|
}
|
||||||
Log3 $name, 4, "JVLISTMGR_handler: $name - after prefetch peer :$peer: chatId :$chatId: msgId :".($msgId?$msgId:"<undef>").": ";
|
Log3 $name, 4, "TBot_List_handler: $name - after prefetch peer :$peer: chatId :$chatId: msgId :".($msgId?$msgId:"<undef>").": ";
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
if ( $ret ) {
|
if ( $ret ) {
|
||||||
@ -774,7 +788,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
if ( defined($msgId ) ) {
|
if ( defined($msgId ) ) {
|
||||||
# show final list
|
# show final list
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
TBot_List_setMsgId( $hash, $tbot, $chatId );
|
TBot_List_setMsgId( $hash, $tbot, $chatId );
|
||||||
TBot_List_setMsgId( $hash, $tbot, $peer, undef, "chat" );
|
TBot_List_setMsgId( $hash, $tbot, $peer, undef, "chat" );
|
||||||
} else {
|
} else {
|
||||||
@ -809,8 +823,14 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
$inline .= ") " if ( $double == 2 );
|
$inline .= ") " if ( $double == 2 );
|
||||||
|
|
||||||
$inline .= "(".TBot_List_inlinekey( $hash, "ok", "list_ok" )."|".TBot_List_inlinekey( $hash, "ändern", "list_menu" )."|".
|
$inline .= "(".TBot_List_inlinekey( $hash, "ok", "list_ok" );
|
||||||
|
|
||||||
|
if ( $donly ) {
|
||||||
|
$inline .= "|".TBot_List_inlinekey( $hash, "Leeren", "list_askclr" ).")";
|
||||||
|
} else {
|
||||||
|
$inline .= "|".TBot_List_inlinekey( $hash, "ändern", "list_menu" )."|".
|
||||||
TBot_List_inlinekey( $hash, "hinzu", "list_askadd" ).")";
|
TBot_List_inlinekey( $hash, "hinzu", "list_askadd" ).")";
|
||||||
|
}
|
||||||
|
|
||||||
my $textmsg = "Liste ".$lname;
|
my $textmsg = "Liste ".$lname;
|
||||||
$textmsg .= " ist leer " if ( scalar(@list) == 0 );
|
$textmsg .= " ist leer " if ( scalar(@list) == 0 );
|
||||||
@ -835,12 +855,12 @@ sub TBot_List_handler($$$$;$)
|
|||||||
TBot_List_setMsgId( $hash, $tbot, $peer, $chatId, "chat" );
|
TBot_List_setMsgId( $hash, $tbot, $peer, $chatId, "chat" );
|
||||||
|
|
||||||
# send msg and keys
|
# send msg and keys
|
||||||
fhem( "set ".$tbot." queryInline ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryInline ".'@'.$chatId." $inline $textmsg" );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if ( defined($msgId ) ) {
|
if ( defined($msgId ) ) {
|
||||||
# show new list
|
# show new list
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
}
|
}
|
||||||
@ -859,10 +879,15 @@ sub TBot_List_handler($$$$;$)
|
|||||||
my $textmsg = "Liste ".$lname."\nEintrag ".($no+1)." (".$list[$no].") ?";
|
my $textmsg = "Liste ".$lname."\nEintrag ".($no+1)." (".$list[$no].") ?";
|
||||||
# show ask msgs (depending on attr)
|
# show ask msgs (depending on attr)
|
||||||
my $indata = ( AttrVal($name,'confirmDelete',1) ? "list_rem-$no" : "list_remyes-$no" );
|
my $indata = ( AttrVal($name,'confirmDelete',1) ? "list_rem-$no" : "list_remyes-$no" );
|
||||||
my $inline = "(".TBot_List_inlinekey( $hash, "Entfernen", $indata )."|".
|
my $inline = "(".TBot_List_inlinekey( $hash, "Entfernen", $indata );
|
||||||
TBot_List_inlinekey( $hash, "Aendern", "list_askchg-$no" )."|".
|
|
||||||
TBot_List_inlinekey( $hash, "Nach Oben", "list_totop-$no" )."|".TBot_List_inlinekey( $hash, "Zurueck", "list_edit" ).")";
|
if ( ! $donly ) {
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
$inline .= "|".TBot_List_inlinekey( $hash, "Aendern", "list_askchg-$no" )."|".
|
||||||
|
TBot_List_inlinekey( $hash, "Nach Oben", "list_totop-$no" );
|
||||||
|
}
|
||||||
|
$inline .= "|".TBot_List_inlinekey( $hash, "Zurueck", "list_edit" ).")";
|
||||||
|
|
||||||
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
}
|
}
|
||||||
@ -886,8 +911,8 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
my $text = join(",", @list );
|
my $text = join(",", @list );
|
||||||
|
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
||||||
|
|
||||||
# show updated list -> call recursively
|
# show updated list -> call recursively
|
||||||
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Nach oben gesetzt" );
|
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Nach oben gesetzt" );
|
||||||
@ -906,7 +931,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
my $textmsg = "Liste ".$lname."\nSoll der Eintrag ".($no+1)." (".$list[$no].") entfernt werden?";
|
my $textmsg = "Liste ".$lname."\nSoll der Eintrag ".($no+1)." (".$list[$no].") entfernt werden?";
|
||||||
# show ask msg
|
# show ask msg
|
||||||
my $inline = "(".TBot_List_inlinekey( $hash, "Ja", "list_remyes-$no" )."|".TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
my $inline = "(".TBot_List_inlinekey( $hash, "Ja", "list_remyes-$no" )."|".TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
}
|
}
|
||||||
@ -924,8 +949,8 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
my $text = join(",", @list );
|
my $text = join(",", @list );
|
||||||
|
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
||||||
|
|
||||||
# show updated list -> call recursively
|
# show updated list -> call recursively
|
||||||
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Eintrag geloescht" );
|
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Eintrag geloescht" );
|
||||||
@ -941,7 +966,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
# show menu msg
|
# show menu msg
|
||||||
my $inline = "(".TBot_List_inlinekey( $hash, "Sortieren", "list_asksrt" )."|".TBot_List_inlinekey( $hash, "Leeren", "list_askclr" )."|".
|
my $inline = "(".TBot_List_inlinekey( $hash, "Sortieren", "list_asksrt" )."|".TBot_List_inlinekey( $hash, "Leeren", "list_askclr" )."|".
|
||||||
TBot_List_inlinekey( $hash, "Zurück", "list_edit" ).")";
|
TBot_List_inlinekey( $hash, "Zurück", "list_edit" ).")";
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
}
|
}
|
||||||
@ -955,7 +980,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
# show ask msg
|
# show ask msg
|
||||||
my $inline = "(".TBot_List_inlinekey( $hash, "Ja - von A-Z", "list_srtyes1" )."|".TBot_List_inlinekey( $hash, "Ja - von Z-A", "list_srtyes2" )."|".
|
my $inline = "(".TBot_List_inlinekey( $hash, "Ja - von A-Z", "list_srtyes1" )."|".TBot_List_inlinekey( $hash, "Ja - von Z-A", "list_srtyes2" )."|".
|
||||||
TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
}
|
}
|
||||||
@ -973,8 +998,8 @@ sub TBot_List_handler($$$$;$)
|
|||||||
@list = sort {$b cmp $a} @list;
|
@list = sort {$b cmp $a} @list;
|
||||||
}
|
}
|
||||||
my $text = join( ",", @list );
|
my $text = join( ",", @list );
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
||||||
}
|
}
|
||||||
|
|
||||||
# show updated list -> call recursively
|
# show updated list -> call recursively
|
||||||
@ -989,7 +1014,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
my $textmsg = "Liste ".$lname."\nSoll die gesamte Liste ".scalar(@list)." Einträge gelöscht werden?";
|
my $textmsg = "Liste ".$lname."\nSoll die gesamte Liste ".scalar(@list)." Einträge gelöscht werden?";
|
||||||
# show ask msg
|
# show ask msg
|
||||||
my $inline = "(".TBot_List_inlinekey( $hash, "Ja - Liste löschen", "list_clryes" )."|".TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
my $inline = "(".TBot_List_inlinekey( $hash, "Ja - Liste löschen", "list_clryes" )."|".TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||||
}
|
}
|
||||||
@ -997,7 +1022,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
#####################
|
#####################
|
||||||
} elsif ( $cmd eq "list_clryes" ) {
|
} elsif ( $cmd eq "list_clryes" ) {
|
||||||
# means remove all entries - now it is confirmed
|
# means remove all entries - now it is confirmed
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
||||||
|
|
||||||
# show updated list -> call recursively
|
# show updated list -> call recursively
|
||||||
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Liste geloescht" );
|
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Liste geloescht" );
|
||||||
@ -1013,7 +1038,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
||||||
|
|
||||||
# means ask for an entry to be added to the list
|
# means ask for an entry to be added to the list
|
||||||
fhem( "set ".$tbot." msgForceReply ".'@'.$chatId." $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." msgForceReply ".'@'.$chatId." $textmsg" );
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
} elsif ( $cmd eq "list_add" ) {
|
} elsif ( $cmd eq "list_add" ) {
|
||||||
@ -1028,11 +1053,11 @@ sub TBot_List_handler($$$$;$)
|
|||||||
$text .= ",".$entry ;
|
$text .= ",".$entry ;
|
||||||
}
|
}
|
||||||
|
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname ".$arg );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname ".$arg );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( defined($msgId ) ) {
|
if ( defined($msgId ) ) {
|
||||||
@ -1062,7 +1087,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
||||||
|
|
||||||
# means ask for an entry to be added to the list
|
# means ask for an entry to be added to the list
|
||||||
fhem( "set ".$tbot." msgForceReply ".'@'.$chatId." $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." msgForceReply ".'@'.$chatId." $textmsg" );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1084,8 +1109,8 @@ sub TBot_List_handler($$$$;$)
|
|||||||
}
|
}
|
||||||
$nre++;
|
$nre++;
|
||||||
}
|
}
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." clear $lname " );
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname $text" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( defined($msgId ) ) {
|
if ( defined($msgId ) ) {
|
||||||
@ -1112,7 +1137,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
|
|
||||||
if ( AttrVal($name,'confirmUnsolicited',1) ) {
|
if ( AttrVal($name,'confirmUnsolicited',1) ) {
|
||||||
my $inline = "(".TBot_List_inlinekey( $hash, "Ja", "list_expaddyes" )."|".TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
my $inline = "(".TBot_List_inlinekey( $hash, "Ja", "list_expaddyes" )."|".TBot_List_inlinekey( $hash, "Nein", "list_edit" ).")";
|
||||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
AnalyzeCommandChain( $hash, "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||||
} else {
|
} else {
|
||||||
# directly add entry --> call recursively
|
# directly add entry --> call recursively
|
||||||
TBot_List_handler( $hash, "list_expaddyes", $tbot, $peer );
|
TBot_List_handler( $hash, "list_expaddyes", $tbot, $peer );
|
||||||
@ -1128,7 +1153,7 @@ sub TBot_List_handler($$$$;$)
|
|||||||
my $addentry = TBot_List_getMsgId( $hash, $tbot, $chatId, "expadd" );
|
my $addentry = TBot_List_getMsgId( $hash, $tbot, $chatId, "expadd" );
|
||||||
|
|
||||||
if ( defined($addentry ) ) {
|
if ( defined($addentry ) ) {
|
||||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname ".$addentry );
|
AnalyzeCommandChain( $hash, "set ".TBot_List_getConfigPostMe($hash)." add $lname ".$addentry );
|
||||||
# show list again -> call recursively
|
# show list again -> call recursively
|
||||||
if ( defined($msgId ) ) {
|
if ( defined($msgId ) ) {
|
||||||
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Eintrag hinzugefuegt" );
|
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Eintrag hinzugefuegt" );
|
||||||
@ -1257,6 +1282,8 @@ sub TBot_List_Setup($) {
|
|||||||
my %gets = (
|
my %gets = (
|
||||||
"queryAnswer" => undef,
|
"queryAnswer" => undef,
|
||||||
"textList" => undef,
|
"textList" => undef,
|
||||||
|
"list" => undef,
|
||||||
|
"count" => undef,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1344,6 +1371,9 @@ sub TBot_List_Setup($) {
|
|||||||
<li><code>textList</code><br>Returns a multiline string containing the list elements or <Leer>
|
<li><code>textList</code><br>Returns a multiline string containing the list elements or <Leer>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li><code>list</code><br>Returns a multiline string containing the list elements or an empty String
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
@ -1367,6 +1397,9 @@ sub TBot_List_Setup($) {
|
|||||||
<li><code>confirmDelete <1 or 0></code><br>If set to 1 the bot will ask for a confirmation if an entry should be deleted. This is the default. With a value of 0 the additional confirmation will not be requested.
|
<li><code>confirmDelete <1 or 0></code><br>If set to 1 the bot will ask for a confirmation if an entry should be deleted. This is the default. With a value of 0 the additional confirmation will not be requested.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li><code>deleteOnly <1 or 0></code><br>If set to 1 the bot will only allow deletion of entries or the complete list (no new entries or entry text can be changed - neither sorting or similar will be possible). Default is 0 (all changes allowed).
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
|
@ -144,12 +144,29 @@
|
|||||||
# FIX: allow_nonref / eval also for makekeyboard #msg732757
|
# FIX: allow_nonref / eval also for makekeyboard #msg732757
|
||||||
# new set cmd silentmsg for disable_notification - syntax as in msg
|
# new set cmd silentmsg for disable_notification - syntax as in msg
|
||||||
# INT: change forceReply to options for sendit
|
# INT: change forceReply to options for sendit
|
||||||
# 2.7 2017-12-20
|
# 2.7 2017-12-20 set command silentmsg
|
||||||
|
|
||||||
|
# new set cmd silentImage for disable_notification - syntax as in sendImage
|
||||||
|
# FIX: allow queryAsnwer also with defaultpeer not set #msg757339
|
||||||
|
# General. set commands not requiring a peer - internally set peers to 0 for sendit
|
||||||
|
# FIX: Doc missing end code tag
|
||||||
|
# Change log to not write _Set/_Get on ? parameter
|
||||||
|
# attr to handle set / del types for polling/allowedCmds/favorites
|
||||||
|
# silentInline added
|
||||||
|
# cmdSendSilent added and documented
|
||||||
|
# tests and fixes on handling of peers/chats for tbot_list and replies
|
||||||
|
# FIX: peer names not numeric in send commands
|
||||||
|
# FIX: disable also sending messages
|
||||||
|
# FIX: have disable attribute with dropdown
|
||||||
|
# Allow caption in sendImage also with \n\t
|
||||||
|
# 2.8 2018-03-11 more silent cmds, caption formatting, several fixes
|
||||||
|
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# TASKS
|
# TASKS
|
||||||
#
|
#
|
||||||
|
# additional silent commands
|
||||||
|
#
|
||||||
# queryDialogStart / queryDialogEnd - keep msg id
|
# queryDialogStart / queryDialogEnd - keep msg id
|
||||||
#
|
#
|
||||||
# remove keyboard after favorite confirm
|
# remove keyboard after favorite confirm
|
||||||
@ -158,7 +175,6 @@
|
|||||||
#
|
#
|
||||||
# replyKeyboardRemove - #msg592808
|
# replyKeyboardRemove - #msg592808
|
||||||
#
|
#
|
||||||
# add an option to send silent messages - msg556631 ??
|
|
||||||
# \n in inline keyboards - not possible currently
|
# \n in inline keyboards - not possible currently
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@ -213,6 +229,8 @@ my %sets = (
|
|||||||
"send" => "textField",
|
"send" => "textField",
|
||||||
|
|
||||||
"silentmsg" => "textField",
|
"silentmsg" => "textField",
|
||||||
|
"silentImage" => "textField",
|
||||||
|
"silentInline" => "textField",
|
||||||
|
|
||||||
"msgDelete" => "textField",
|
"msgDelete" => "textField",
|
||||||
|
|
||||||
@ -235,6 +253,7 @@ my %sets = (
|
|||||||
"favoritesMenu" => "textField",
|
"favoritesMenu" => "textField",
|
||||||
|
|
||||||
"cmdSend" => "textField",
|
"cmdSend" => "textField",
|
||||||
|
"cmdSendSilent" => "textField",
|
||||||
|
|
||||||
"replaceContacts" => "textField",
|
"replaceContacts" => "textField",
|
||||||
"reset" => undef,
|
"reset" => undef,
|
||||||
@ -291,7 +310,7 @@ sub TelegramBot_Initialize($) {
|
|||||||
$hash->{SetFn} = "TelegramBot_Set";
|
$hash->{SetFn} = "TelegramBot_Set";
|
||||||
$hash->{AttrFn} = "TelegramBot_Attr";
|
$hash->{AttrFn} = "TelegramBot_Attr";
|
||||||
$hash->{AttrList} = "defaultPeer defaultPeerCopy:0,1 cmdKeyword cmdSentCommands favorites:textField-long favoritesInline:0,1 cmdFavorites cmdRestrictedPeer ". "cmdTriggerOnly:0,1 saveStateOnContactChange:1,0 maxFileSize maxReturnSize cmdReturnEmptyResult:1,0 pollingVerbose:1_Digest,2_Log,0_None ".
|
$hash->{AttrList} = "defaultPeer defaultPeerCopy:0,1 cmdKeyword cmdSentCommands favorites:textField-long favoritesInline:0,1 cmdFavorites cmdRestrictedPeer ". "cmdTriggerOnly:0,1 saveStateOnContactChange:1,0 maxFileSize maxReturnSize cmdReturnEmptyResult:1,0 pollingVerbose:1_Digest,2_Log,0_None ".
|
||||||
"cmdTimeout pollingTimeout disable queryAnswerText:textField cmdRespondChat:0,1 ".
|
"cmdTimeout pollingTimeout disable:1,0 queryAnswerText:textField cmdRespondChat:0,1 ".
|
||||||
"allowUnknownContacts:1,0 textResponseConfirm:textField textResponseCommands:textField allowedCommands filenameUrlEscape:1,0 ".
|
"allowUnknownContacts:1,0 textResponseConfirm:textField textResponseCommands:textField allowedCommands filenameUrlEscape:1,0 ".
|
||||||
"textResponseFavorites:textField textResponseResult:textField textResponseUnauthorized:textField ".
|
"textResponseFavorites:textField textResponseResult:textField textResponseUnauthorized:textField ".
|
||||||
"parseModeSend:0_None,1_Markdown,2_HTML,3_InMsg webPagePreview:1,0 utf8Special:1,0 favorites2Col:0,1 ".
|
"parseModeSend:0_None,1_Markdown,2_HTML,3_InMsg webPagePreview:1,0 utf8Special:1,0 favorites2Col:0,1 ".
|
||||||
@ -444,7 +463,7 @@ sub TelegramBot_Set($@)
|
|||||||
{
|
{
|
||||||
my ( $hash, $name, @args ) = @_;
|
my ( $hash, $name, @args ) = @_;
|
||||||
|
|
||||||
Log3 $name, 4, "TelegramBot_Set $name: called ";
|
Log3 $name, 5, "TelegramBot_Set $name: called ";
|
||||||
|
|
||||||
### Check Args
|
### Check Args
|
||||||
my $numberOfArgs = int(@args);
|
my $numberOfArgs = int(@args);
|
||||||
@ -452,8 +471,6 @@ sub TelegramBot_Set($@)
|
|||||||
|
|
||||||
my $cmd = shift @args;
|
my $cmd = shift @args;
|
||||||
|
|
||||||
Log3 $name, 4, "TelegramBot_Set $name: Processing TelegramBot_Set( $cmd )";
|
|
||||||
|
|
||||||
if (!exists($sets{$cmd})) {
|
if (!exists($sets{$cmd})) {
|
||||||
my @cList;
|
my @cList;
|
||||||
foreach my $k (keys %sets) {
|
foreach my $k (keys %sets) {
|
||||||
@ -470,9 +487,13 @@ sub TelegramBot_Set($@)
|
|||||||
return "TelegramBot_Set: Unknown argument $cmd, choose one of " . join(" ", @cList);
|
return "TelegramBot_Set: Unknown argument $cmd, choose one of " . join(" ", @cList);
|
||||||
} # error unknown cmd handling
|
} # error unknown cmd handling
|
||||||
|
|
||||||
|
Log3 $name, 4, "TelegramBot_Set $name: Processing TelegramBot_Set( $cmd )";
|
||||||
|
|
||||||
my $ret = undef;
|
my $ret = undef;
|
||||||
|
|
||||||
if( ($cmd eq 'message') || ($cmd eq 'queryInline') || ($cmd eq 'queryEditInline') || ($cmd eq 'queryAnswer') || ($cmd eq 'msg') || ($cmd eq '_msg') || ($cmd eq 'reply') || ($cmd eq 'msgEdit') || ($cmd eq 'msgForceReply') || ($cmd eq 'silentmsg') || ($cmd =~ /^send.*/ ) ) {
|
if( ($cmd eq 'message') || ($cmd eq 'queryInline') || ($cmd eq 'queryEditInline') || ($cmd eq 'queryAnswer') ||
|
||||||
|
($cmd eq 'msg') || ($cmd eq '_msg') || ($cmd eq 'reply') || ($cmd eq 'msgEdit') || ($cmd eq 'msgForceReply') ||
|
||||||
|
($cmd eq 'silentmsg') || ($cmd eq 'silentImage') || ($cmd eq 'silentInline') || ($cmd =~ /^send.*/ ) ) {
|
||||||
|
|
||||||
my $msgid;
|
my $msgid;
|
||||||
my $msg;
|
my $msg;
|
||||||
@ -481,21 +502,24 @@ sub TelegramBot_Set($@)
|
|||||||
my $options = "";
|
my $options = "";
|
||||||
my $peers;
|
my $peers;
|
||||||
my $inline = 0;
|
my $inline = 0;
|
||||||
|
my $needspeer = 1;
|
||||||
|
|
||||||
if ( ($cmd eq 'reply') || ($cmd eq 'msgEdit' ) || ($cmd eq 'queryEditInline' ) ) {
|
if ( ($cmd eq 'reply') || ($cmd eq 'msgEdit' ) || ($cmd eq 'queryEditInline' ) ) {
|
||||||
return "TelegramBot_Set: Command $cmd, no peer, msgid and no text/file specified" if ( $numberOfArgs < 3 );
|
return "TelegramBot_Set: Command $cmd, no msgid and no text/file specified" if ( $numberOfArgs < 3 );
|
||||||
$msgid = shift @args;
|
$msgid = shift @args;
|
||||||
return "TelegramBot_Set: Command $cmd, msgId must be given as first parameter before peer" if ( $msgid =~ /^@/ );
|
return "TelegramBot_Set: Command $cmd, msgId must be given as first parameter before peer" if ( $msgid =~ /^@/ );
|
||||||
$numberOfArgs--;
|
$numberOfArgs--;
|
||||||
$inline = 1 if ($cmd eq 'queryEditInline');
|
# all three messages need also a peer/chat_id
|
||||||
} elsif ($cmd eq 'msgForceReply') {
|
} elsif ($cmd eq 'queryAnswer') {
|
||||||
$options .= " -force_reply- ";
|
$needspeer = 0;
|
||||||
} elsif ($cmd eq 'silentmsg') {
|
|
||||||
$options .= " -silent- ";
|
|
||||||
} elsif ($cmd eq 'queryInline') {
|
|
||||||
$inline = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# special options
|
||||||
|
$inline = 1 if ( ($cmd eq 'queryInline') || ($cmd eq 'queryEditInline') || ($cmd eq 'silentInline') );
|
||||||
|
$options .= " -force_reply- " if ($cmd eq 'msgForceReply');
|
||||||
|
$options .= " -silent- " if ( ($cmd eq 'silentmsg') || ($cmd eq 'silentImage') || ($cmd eq 'silentInline') ) ;
|
||||||
|
|
||||||
|
|
||||||
return "TelegramBot_Set: Command $cmd, no peers and no text/file specified" if ( $numberOfArgs < 2 );
|
return "TelegramBot_Set: Command $cmd, no peers and no text/file specified" if ( $numberOfArgs < 2 );
|
||||||
# numberOfArgs might not be correct beyond this point
|
# numberOfArgs might not be correct beyond this point
|
||||||
|
|
||||||
@ -513,11 +537,13 @@ sub TelegramBot_Set($@)
|
|||||||
return "TelegramBot_Set: Command $cmd, no msg content specified" if ( int(@args) < 1 );
|
return "TelegramBot_Set: Command $cmd, no msg content specified" if ( int(@args) < 1 );
|
||||||
|
|
||||||
|
|
||||||
if ( ! defined( $peers ) ) {
|
if ( ($needspeer ) && ( ! defined( $peers ) ) ) {
|
||||||
$peers = AttrVal($name,'defaultPeer',undef);
|
$peers = AttrVal($name,'defaultPeer',undef);
|
||||||
return "TelegramBot_Set: Command $cmd, without explicit peer requires defaultPeer being set" if ( ! defined($peers) );
|
return "TelegramBot_Set: Command $cmd, without explicit peer requires defaultPeer being set" if ( ! defined($peers) );
|
||||||
|
} elsif ( ! defined( $peers ) ) {
|
||||||
|
$peers = 0;
|
||||||
}
|
}
|
||||||
if ( ($cmd eq 'sendPhoto') || ($cmd eq 'sendImage') || ($cmd eq 'image') ) {
|
if ( ($cmd eq 'sendPhoto') || ($cmd eq 'sendImage') || ($cmd eq 'image') || ($cmd eq 'silentImage') ) {
|
||||||
$sendType = 1;
|
$sendType = 1;
|
||||||
} elsif ($cmd eq 'sendVoice') {
|
} elsif ($cmd eq 'sendVoice') {
|
||||||
$sendType = 2;
|
$sendType = 2;
|
||||||
@ -624,11 +650,14 @@ sub TelegramBot_Set($@)
|
|||||||
|
|
||||||
TelegramBot_SendFavorites($hash, $peers, undef, "", undef, undef, 0);
|
TelegramBot_SendFavorites($hash, $peers, undef, "", undef, undef, 0);
|
||||||
|
|
||||||
} elsif($cmd eq 'cmdSend') {
|
} elsif($cmd =~ 'cmdSend(Silent)?') {
|
||||||
|
|
||||||
return "TelegramBot_Set: Command $cmd, no peers and no text/file specified" if ( $numberOfArgs < 2 );
|
return "TelegramBot_Set: Command $cmd, no peers and no text/file specified" if ( $numberOfArgs < 2 );
|
||||||
# numberOfArgs might not be correct beyond this point
|
# numberOfArgs might not be correct beyond this point
|
||||||
|
|
||||||
|
my $options = "";
|
||||||
|
$options .= " -silent- " if ( ($cmd eq 'cmdSendSilent') ) ;
|
||||||
|
|
||||||
my $peers;
|
my $peers;
|
||||||
while ( $args[0] =~ /^@(..+)$/ ) {
|
while ( $args[0] =~ /^@(..+)$/ ) {
|
||||||
my $ppart = $1;
|
my $ppart = $1;
|
||||||
@ -670,7 +699,7 @@ sub TelegramBot_Set($@)
|
|||||||
( $isMediaStream ) = TelegramBot_IdentifyStream( $hash, $msg ) if ( defined( $msg ) );
|
( $isMediaStream ) = TelegramBot_IdentifyStream( $hash, $msg ) if ( defined( $msg ) );
|
||||||
|
|
||||||
Log3 $name, 5, "TelegramBot_Set $name: start send for cmd :$cmd: and isMediaStream :$isMediaStream:";
|
Log3 $name, 5, "TelegramBot_Set $name: start send for cmd :$cmd: and isMediaStream :$isMediaStream:";
|
||||||
$ret = TelegramBot_SendIt( $hash, $peers, $msg, undef, $isMediaStream, undef );
|
$ret = TelegramBot_SendIt( $hash, $peers, $msg, undef, $isMediaStream, undef, $options );
|
||||||
|
|
||||||
} elsif($cmd eq 'msgDelete') {
|
} elsif($cmd eq 'msgDelete') {
|
||||||
|
|
||||||
@ -761,8 +790,6 @@ sub TelegramBot_Get($@)
|
|||||||
my $cmd = $args[0];
|
my $cmd = $args[0];
|
||||||
my $arg = ($args[1] ? $args[1] : "");
|
my $arg = ($args[1] ? $args[1] : "");
|
||||||
|
|
||||||
Log3 $name, 5, "TelegramBot_Get $name: Processing TelegramBot_Get( $cmd )";
|
|
||||||
|
|
||||||
if(!exists($gets{$cmd})) {
|
if(!exists($gets{$cmd})) {
|
||||||
my @cList;
|
my @cList;
|
||||||
foreach my $k (sort keys %gets) {
|
foreach my $k (sort keys %gets) {
|
||||||
@ -779,6 +806,7 @@ sub TelegramBot_Get($@)
|
|||||||
return "TelegramBot_Get: Unknown argument $cmd, choose one of " . join(" ", @cList);
|
return "TelegramBot_Get: Unknown argument $cmd, choose one of " . join(" ", @cList);
|
||||||
} # error unknown cmd handling
|
} # error unknown cmd handling
|
||||||
|
|
||||||
|
Log3 $name, 4, "TelegramBot_Get $name: Processing TelegramBot_Get( $cmd )";
|
||||||
|
|
||||||
my $ret = undef;
|
my $ret = undef;
|
||||||
|
|
||||||
@ -843,10 +871,10 @@ sub TelegramBot_Attr(@) {
|
|||||||
} else {
|
} else {
|
||||||
Log3 $name, 5, "TelegramBot_Attr $name: $cmd on $aName to <undef>";
|
Log3 $name, 5, "TelegramBot_Attr $name: $cmd on $aName to <undef>";
|
||||||
}
|
}
|
||||||
|
|
||||||
# $cmd can be "del" or "set"
|
# $cmd can be "del" or "set"
|
||||||
# $name is device name
|
# $name is device name
|
||||||
# aName and aVal are Attribute name and value
|
# aName and aVal are Attribute name and value
|
||||||
if ($cmd eq "set") {
|
|
||||||
if ($aName eq 'favorites') {
|
if ($aName eq 'favorites') {
|
||||||
# Empty current alias list in hash
|
# Empty current alias list in hash
|
||||||
if ( defined( $hash->{AliasCmds} ) ) {
|
if ( defined( $hash->{AliasCmds} ) ) {
|
||||||
@ -858,6 +886,7 @@ sub TelegramBot_Attr(@) {
|
|||||||
$hash->{AliasCmds} = {};
|
$hash->{AliasCmds} = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($cmd eq "set") {
|
||||||
# keep double ; for inside commands
|
# keep double ; for inside commands
|
||||||
$aVal =~ s/;;/SeMiCoLoN/g;
|
$aVal =~ s/;;/SeMiCoLoN/g;
|
||||||
my @clist = split( /;/, $aVal);
|
my @clist = split( /;/, $aVal);
|
||||||
@ -887,8 +916,42 @@ sub TelegramBot_Attr(@) {
|
|||||||
# set attribute value to newly combined commands
|
# set attribute value to newly combined commands
|
||||||
$attr{$name}{'favorites'} = $newVal;
|
$attr{$name}{'favorites'} = $newVal;
|
||||||
$aVal = $newVal;
|
$aVal = $newVal;
|
||||||
|
}
|
||||||
|
|
||||||
} elsif ($aName eq 'cmdRestrictedPeer') {
|
} elsif ($aName eq 'allowedCommands') {
|
||||||
|
my $allowedName = "allowed_$name";
|
||||||
|
my $exists = ($defs{$allowedName} ? 1 : 0);
|
||||||
|
my $alcmd = (($cmd eq "set")?$aVal:"<none>");
|
||||||
|
AnalyzeCommand(undef, "defmod $allowedName allowed");
|
||||||
|
AnalyzeCommand(undef, "attr $allowedName validFor $name");
|
||||||
|
AnalyzeCommand(undef, "attr $allowedName $aName ".$alcmd);
|
||||||
|
Log3 $name, 3, "TelegramBot_Attr $name: ".($exists ? "modified":"created")." $allowedName with commands :$alcmd:";
|
||||||
|
# allowedCommands only set on the corresponding allowed_device
|
||||||
|
return "\"TelegramBot_Attr: \" $aName ".($exists ? "modified":"created")." $allowedName with commands :$alcmd:"
|
||||||
|
|
||||||
|
} elsif ($aName eq 'pollingTimeout') {
|
||||||
|
return "\"TelegramBot_Attr: \" $aName needs to be given in digits only" if ( ($cmd eq "set") && ( $aVal !~ /^[[:digit:]]+$/ ) );
|
||||||
|
# let all existing methods run into block
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
$hash->{POLLING} = -1;
|
||||||
|
|
||||||
|
# wait some time before next polling is starting
|
||||||
|
TelegramBot_ResetPolling( $hash );
|
||||||
|
|
||||||
|
} elsif ($aName eq 'disable') {
|
||||||
|
return "\"TelegramBot_Attr: \" $aName needs to be 1 or 0" if ( ($cmd eq "set") && ( $aVal !~ /^(1|0)$/ ) );
|
||||||
|
# let all existing methods run into block
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
$hash->{POLLING} = -1;
|
||||||
|
|
||||||
|
# wait some time before next polling is starting
|
||||||
|
TelegramBot_ResetPolling( $hash );
|
||||||
|
|
||||||
|
|
||||||
|
# attributes where only the set is relevant for syntax check
|
||||||
|
} elsif ($cmd eq "set") {
|
||||||
|
|
||||||
|
if ($aName eq 'cmdRestrictedPeer') {
|
||||||
$aVal =~ s/^\s+|\s+$//g;
|
$aVal =~ s/^\s+|\s+$//g;
|
||||||
|
|
||||||
} elsif ( ($aName eq 'defaultPeerCopy') ||
|
} elsif ( ($aName eq 'defaultPeerCopy') ||
|
||||||
@ -903,53 +966,13 @@ sub TelegramBot_Attr(@) {
|
|||||||
($aName eq 'maxRetries') ) {
|
($aName eq 'maxRetries') ) {
|
||||||
return "\"TelegramBot_Attr: \" $aName needs to be given in digits only" if ( $aVal !~ /^[[:digit:]]+$/ );
|
return "\"TelegramBot_Attr: \" $aName needs to be given in digits only" if ( $aVal !~ /^[[:digit:]]+$/ );
|
||||||
|
|
||||||
} elsif ($aName eq 'pollingTimeout') {
|
|
||||||
return "\"TelegramBot_Attr: \" $aName needs to be given in digits only" if ( $aVal !~ /^[[:digit:]]+$/ );
|
|
||||||
# let all existing methods run into block
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
$hash->{POLLING} = -1;
|
|
||||||
|
|
||||||
# wait some time before next polling is starting
|
|
||||||
TelegramBot_ResetPolling( $hash );
|
|
||||||
|
|
||||||
} elsif ($aName eq 'disable') {
|
|
||||||
if ( $aVal =~ /^(1|0)$/ ) {
|
|
||||||
# let all existing methods run into block
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
$hash->{POLLING} = -1;
|
|
||||||
|
|
||||||
# wait some time before next polling is starting
|
|
||||||
TelegramBot_ResetPolling( $hash );
|
|
||||||
} else {
|
|
||||||
return "\"TelegramBot_Attr: \" $aName needs to be 1 or 0";
|
|
||||||
}
|
|
||||||
|
|
||||||
} elsif ($aName eq 'pollingVerbose') {
|
} elsif ($aName eq 'pollingVerbose') {
|
||||||
return "\"TelegramBot_Attr: \" Incorrect value given for pollingVerbose" if ( $aVal !~ /^((1_Digest)|(2_Log)|(0_None))$/ );
|
return "\"TelegramBot_Attr: \" Incorrect value given for pollingVerbose" if ( $aVal !~ /^((1_Digest)|(2_Log)|(0_None))$/ );
|
||||||
|
|
||||||
} elsif ($aName eq 'allowedCommands') {
|
|
||||||
my $allowedName = "allowed_$name";
|
|
||||||
my $exists = ($defs{$allowedName} ? 1 : 0);
|
|
||||||
AnalyzeCommand(undef, "defmod $allowedName allowed");
|
|
||||||
AnalyzeCommand(undef, "attr $allowedName validFor $name");
|
|
||||||
AnalyzeCommand(undef, "attr $allowedName $aName ".$aVal);
|
|
||||||
Log3 $name, 3, "TelegramBot_Attr $name: ".($exists ? "modified":"created")." $allowedName with commands :$aVal:";
|
|
||||||
# allowedCommands only set on the corresponding allowed_device
|
|
||||||
return "\"TelegramBot_Attr: \" $aName ".($exists ? "modified":"created")." $allowedName with commands :$aVal:"
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$_[3] = $aVal;
|
$_[3] = $aVal;
|
||||||
|
|
||||||
} elsif ($cmd eq "set") {
|
|
||||||
if ( ($aName eq 'pollingTimeout') || ($aName eq 'disable') ) {
|
|
||||||
# let all existing methods run into block
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
$hash->{POLLING} = -1;
|
|
||||||
|
|
||||||
# wait some time before next polling is starting
|
|
||||||
TelegramBot_ResetPolling( $hash );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
@ -1335,7 +1358,7 @@ sub TelegramBot_ReadHandleCommand($$$$$) {
|
|||||||
|
|
||||||
my $ret;
|
my $ret;
|
||||||
|
|
||||||
Log3 $name, 3, "TelegramBot_ReadHandleCommand $name: cmd found :".$cmd.": ";
|
Log3 $name, 4, "TelegramBot_ReadHandleCommand $name: cmd found :".$cmd.": ";
|
||||||
|
|
||||||
Log3 $name, 5, "TelegramBot_ReadHandleCommand cmd correct peer ";
|
Log3 $name, 5, "TelegramBot_ReadHandleCommand cmd correct peer ";
|
||||||
# Either no peer defined or cmdpeer matches peer for message -> good to execute
|
# Either no peer defined or cmdpeer matches peer for message -> good to execute
|
||||||
@ -1394,6 +1417,7 @@ sub TelegramBot_ExecuteCommand($$$$;$$) {
|
|||||||
# Check for image/doc/audio stream in return (-1 image
|
# Check for image/doc/audio stream in return (-1 image
|
||||||
( $isMediaStream ) = TelegramBot_IdentifyStream( $hash, $ret ) if ( defined( $ret ) );
|
( $isMediaStream ) = TelegramBot_IdentifyStream( $hash, $ret ) if ( defined( $ret ) );
|
||||||
|
|
||||||
|
Log3 $name, 3, "TelegramBot_ExecuteCommand $name: cmd executed :".$cmd.": --> :".TelegramBot_MsgForLog($ret, $isMediaStream ).":" if ( $ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3 $name, 4, "TelegramBot_ExecuteCommand result for analyze :".TelegramBot_MsgForLog($ret, $isMediaStream ).": ";
|
Log3 $name, 4, "TelegramBot_ExecuteCommand result for analyze :".TelegramBot_MsgForLog($ret, $isMediaStream ).": ";
|
||||||
@ -1645,6 +1669,9 @@ sub TelegramBot_SendIt($$$$$;$$$)
|
|||||||
|
|
||||||
Log3 $name, 5, "TelegramBot_SendIt $name: called ";
|
Log3 $name, 5, "TelegramBot_SendIt $name: called ";
|
||||||
|
|
||||||
|
# ignore all sends if disabled
|
||||||
|
return if ( AttrVal($name,'disable',0) );
|
||||||
|
|
||||||
# ensure sentQueue exists
|
# ensure sentQueue exists
|
||||||
$hash->{sentQueue} = [] if ( ! defined( $hash->{sentQueue} ) );
|
$hash->{sentQueue} = [] if ( ! defined( $hash->{sentQueue} ) );
|
||||||
|
|
||||||
@ -1676,10 +1703,15 @@ sub TelegramBot_SendIt($$$$$;$$$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Log3 $name, 5, "TelegramBot_SendIt $name: try to send message to :$peer: -:".
|
Log3 $name, 5, "TelegramBot_SendIt $name: try to send message to :$peer: -:".
|
||||||
TelegramBot_MsgForLog($msg, ($isMedia<0) ).": - :".(defined($addPar)?$addPar:"<undef>").":".": options :".$options.":";
|
TelegramBot_MsgForLog($msg, ($isMedia<0) ).": - add :".(defined($addPar)?$addPar:"<undef>").
|
||||||
|
": - replyid :".(defined($replyid)?$replyid:"<undef>").
|
||||||
|
":".": options :".$options.":";
|
||||||
|
|
||||||
# trim and convert spaces in peer to underline
|
# trim and convert spaces in peer to underline
|
||||||
my $peer2 = TelegramBot_GetIdForPeer( $hash, $peer );
|
$peer = 0 if ( ! $peer ); # ensure peer is defined
|
||||||
|
my $peer2 = (! $peer )?$peer:TelegramBot_GetIdForPeer( $hash, $peer );
|
||||||
|
|
||||||
|
# Debug "peer :$peer: peer2 :$peer2:";
|
||||||
|
|
||||||
if ( ! defined( $peer2 ) ) {
|
if ( ! defined( $peer2 ) ) {
|
||||||
$ret = "FAILED peer not found :$peer:";
|
$ret = "FAILED peer not found :$peer:";
|
||||||
@ -1709,7 +1741,7 @@ sub TelegramBot_SendIt($$$$$;$$$)
|
|||||||
if ( ! defined( $ret ) ) {
|
if ( ! defined( $ret ) ) {
|
||||||
|
|
||||||
# add chat / user id (no file) --> this will also do init
|
# add chat / user id (no file) --> this will also do init
|
||||||
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "chat_id", undef, $peer2, 0 );
|
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "chat_id", undef, $peer2, 0 ) if ( $peer );
|
||||||
|
|
||||||
if ( ( $isMedia == 0 ) || ( $isMedia == 10 ) || ( $isMedia == 20 ) ) {
|
if ( ( $isMedia == 0 ) || ( $isMedia == 10 ) || ( $isMedia == 20 ) ) {
|
||||||
if ( $isMedia == 0 ) {
|
if ( $isMedia == 0 ) {
|
||||||
@ -1785,6 +1817,7 @@ sub TelegramBot_SendIt($$$$$;$$$)
|
|||||||
$hash->{HU_DO_PARAMS}->{url} = TelegramBot_getBaseURL($hash)."answerCallbackQuery";
|
$hash->{HU_DO_PARAMS}->{url} = TelegramBot_getBaseURL($hash)."answerCallbackQuery";
|
||||||
|
|
||||||
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "callback_query_id", undef, $addPar, 0 ) if ( ! defined( $ret ) );
|
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "callback_query_id", undef, $addPar, 0 ) if ( ! defined( $ret ) );
|
||||||
|
$addPar = undef;
|
||||||
|
|
||||||
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "text", undef, $msg, 0 ) if ( ( ! defined( $ret ) ) && ( $msg ) );
|
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "text", undef, $msg, 0 ) if ( ( ! defined( $ret ) ) && ( $msg ) );
|
||||||
|
|
||||||
@ -1797,6 +1830,9 @@ sub TelegramBot_SendIt($$$$$;$$$)
|
|||||||
|
|
||||||
# add caption
|
# add caption
|
||||||
if ( defined( $addPar ) ) {
|
if ( defined( $addPar ) ) {
|
||||||
|
$addPar =~ s/(?<![\\])\\n/\x0A/g;
|
||||||
|
$addPar =~ s/(?<![\\])\\t/\x09/g;
|
||||||
|
|
||||||
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "caption", undef, $addPar, 0 ) if ( ! defined( $ret ) );
|
$ret = TelegramBot_AddMultipart($hash, $hash->{HU_DO_PARAMS}, "caption", undef, $addPar, 0 ) if ( ! defined( $ret ) );
|
||||||
$addPar = undef;
|
$addPar = undef;
|
||||||
}
|
}
|
||||||
@ -3476,7 +3512,7 @@ sub TelegramBot_BinaryFileWrite($$$) {
|
|||||||
<dl>
|
<dl>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><code>silentmsg ...<br>Sends the given message silently (with disabled_notifications) to the recipients. Syntax and parameters are the same as in the send/message command.
|
<li><code>silentmsg, silentImage, silentInline ...</code><br>Sends the given message silently (with disabled_notifications) to the recipients. Syntax and parameters are the same as in the corresponding send/message command.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><code>msgForceReply [ @<peer1> ... @<peerN> ] <text></code><br>Sends the given message to the recipient(s) and requests (forces) a reply. Handling of peers is equal to the message command. Adding reply keyboards is currently not supported by telegram.
|
<li><code>msgForceReply [ @<peer1> ... @<peerN> ] <text></code><br>Sends the given message to the recipient(s) and requests (forces) a reply. Handling of peers is equal to the message command. Adding reply keyboards is currently not supported by telegram.
|
||||||
@ -3493,7 +3529,7 @@ sub TelegramBot_BinaryFileWrite($$$) {
|
|||||||
<li><code>favoritesMenu [ @<peer> ] </code><br>send the favorites menu to the corresponding peer if defined</code>
|
<li><code>favoritesMenu [ @<peer> ] </code><br>send the favorites menu to the corresponding peer if defined</code>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><code>cmdSend [ @<peer1> ... @<peerN> ] <fhem command></code><br>Executes the given fhem command and then sends the result to the given peers or the default peer.<br>
|
<li><code>cmdSend|cmdSendSilent [ @<peer1> ... @<peerN> ] <fhem command></code><br>Executes the given fhem command and then sends the result to the given peers or the default peer (cmdSendSilent does the same as silent message).<br>
|
||||||
Example: The following command would sent the resulting SVG picture to the default peer: <br>
|
Example: The following command would sent the resulting SVG picture to the default peer: <br>
|
||||||
<code>set tbot cmdSend { plotAsPng('SVG_FileLog_Aussen') }</code>
|
<code>set tbot cmdSend { plotAsPng('SVG_FileLog_Aussen') }</code>
|
||||||
</li>
|
</li>
|
||||||
@ -3521,6 +3557,10 @@ sub TelegramBot_BinaryFileWrite($$$) {
|
|||||||
<li><code>sendVoice [ @<peer1> ... @<peerN>] <file></code><br>Sends a voice message for playing directly in the browser to the given peer(s) or if ommitted to the default peer. Handling for files and peers is as specified above.
|
<li><code>sendVoice [ @<peer1> ... @<peerN>] <file></code><br>Sends a voice message for playing directly in the browser to the given peer(s) or if ommitted to the default peer. Handling for files and peers is as specified above.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li><code>silentImage ...</code><br>Sends the given image silently (with disabled_notifications) to the recipients. Syntax and parameters are the same as in the sendImage command.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<li><code>sendLocation [ @<peer1> ... @<peerN>] <latitude> <longitude></code><br>Sends a location as pair of coordinates latitude and longitude as floating point numbers
|
<li><code>sendLocation [ @<peer1> ... @<peerN>] <latitude> <longitude></code><br>Sends a location as pair of coordinates latitude and longitude as floating point numbers
|
||||||
<br>Example: <code>set aTelegramBotDevice sendLocation @@someusername 51.163375 10.447683</code> will send the coordinates of the geographical center of Germany as location.
|
<br>Example: <code>set aTelegramBotDevice sendLocation @@someusername 51.163375 10.447683</code> will send the coordinates of the geographical center of Germany as location.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user