mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
49_TBot_List: handleUnsolicited & multiline entries
git-svn-id: https://svn.fhem.de/fhem/trunk@13718 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
e0a54bad23
commit
440ba478e4
@ -1,5 +1,6 @@
|
||||
# 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.
|
||||
- update: 49_TBot_List: handleUnsolicited & multiline entries
|
||||
- bugfix: 93_DbRep: get svrinfo has only used /opt/fhem/fhem.db (SQLite)
|
||||
- new: 98_expandJSON: initial check in
|
||||
- update: 98_DOIFtools: added hints to the derived operands
|
||||
|
@ -52,18 +52,29 @@
|
||||
# changed log levels
|
||||
# corrected listNo calculation on dialog and define
|
||||
# 0.2 2017-02-26 Initial SVN Checkin
|
||||
|
||||
# Add note to documentation on events and event-on attributes
|
||||
# FIX: corrected allowedPeers definition
|
||||
# Also support chats in start without args
|
||||
# respond in chats / still only a single dialog per user allowed
|
||||
# add entry for messages sent accidentially - absed on dialog
|
||||
# removed debug statements
|
||||
# make unsolicited entries configurable
|
||||
# handle multiline entries --> remove line ends
|
||||
# handle multiline entries --> multiple entries to be created
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
##############################################################################
|
||||
# TASKS
|
||||
#
|
||||
# Use msgchat to store original chat and respond in chat
|
||||
#
|
||||
#
|
||||
# Make texts and addtl buttons configurable
|
||||
#
|
||||
# internal value if waiting for msg or reply -- otherwise notify not looping through events
|
||||
#
|
||||
# add entry for messages sent accidentially - absed on dialog
|
||||
#
|
||||
# TODOs
|
||||
#
|
||||
@ -124,7 +135,8 @@ sub TBot_List_Initialize($) {
|
||||
$hash->{AttrList} =
|
||||
"telegramBots:textField ".
|
||||
"optionDouble:0,1 ".
|
||||
"allowedPeers:textfield ".
|
||||
"handleUnsolicited:0,1 ".
|
||||
"allowedPeers:textField ".
|
||||
$readingFnAttributes;
|
||||
}
|
||||
|
||||
@ -218,7 +230,8 @@ sub TBot_List_Set($@)
|
||||
|
||||
if ( $ret ) {
|
||||
|
||||
# do nothing if error/ret is defined
|
||||
# This is wrong arg / ? --> just return without log
|
||||
return $ret;
|
||||
|
||||
} elsif ($cmd eq 'start') {
|
||||
Log3 $name, 4, "TBot_List_Set $name: start of dialog requested ";
|
||||
@ -226,6 +239,7 @@ sub TBot_List_Set($@)
|
||||
|
||||
my $tbot;
|
||||
my $tpeer;
|
||||
my $tchat;
|
||||
if ( ! $ret ) {
|
||||
$tbot = $args[0];
|
||||
$ret = "No telegramBot specified :$tbot:" if ( ! TBot_List_isTBot( $hash, $tbot ) );
|
||||
@ -237,6 +251,7 @@ sub TBot_List_Set($@)
|
||||
|
||||
if ( ! $ret ) {
|
||||
if ( $numberOfArgs == 2 ) {
|
||||
$tchat = ReadingsVal( $tbot, "msgChatId", undef );
|
||||
$tpeer = ReadingsVal( $tbot, "msgPeerId", "" );
|
||||
} else {
|
||||
$tpeer = fhem( "get $tbot peerId ".$args[1] );
|
||||
@ -257,6 +272,8 @@ sub TBot_List_Set($@)
|
||||
Log3 $name, 1, "TBot_List_Set $name: Error :".$ret if ( $ret );
|
||||
|
||||
# start uses a botname and an optional peer
|
||||
$tpeer .= " ".$tchat if ( defined( $tchat ) );
|
||||
|
||||
$ret = TBot_List_handler( $hash, "list", $tbot, $tpeer ) if ( ! $ret );
|
||||
|
||||
} elsif($cmd eq 'end') {
|
||||
@ -277,8 +294,13 @@ sub TBot_List_Set($@)
|
||||
|
||||
# start uses a botname and an optional peer
|
||||
$ret = TBot_List_handler( $hash, "end", $tbot, $tpeer ) if ( ! $ret );
|
||||
|
||||
} elsif($cmd eq 'reset') {
|
||||
Log3 $name, 4, "TBot_List_Set $name: reset requested ";
|
||||
TBot_List_Setup( $hash );
|
||||
}
|
||||
|
||||
|
||||
Log3 $name, 4, "TBot_List_Set $name: $cmd ".((defined( $ret ))?"failed with :$ret: ":"done succesful ");
|
||||
return $ret
|
||||
}
|
||||
@ -304,8 +326,8 @@ sub TBot_List_Get($@)
|
||||
my $ret = TBot_List_CheckSetGet( $hash, $cmd, $hash->{getoptions} );
|
||||
|
||||
if ( $ret ) {
|
||||
# do nothing if error/ret is defined
|
||||
|
||||
# This is wrong arg / ? --> just return without log
|
||||
return $ret;
|
||||
|
||||
} elsif($cmd eq "textList") {
|
||||
$ret = TBot_List_getTextList($hash);
|
||||
@ -377,7 +399,7 @@ sub TBot_List_Attr(@) {
|
||||
$aVal = ($aVal eq "1")? "1": "0";
|
||||
|
||||
} elsif ($aName eq 'allowedPeers') {
|
||||
return "\"TBot_List_Attr: \" $aName needs to be given in digits - and space only" if ( $aVal !~ /^[[:digit: -]]$/ );
|
||||
return "\"TBot_List_Attr: \" $aName needs to be given in digits - and space only" if ( $aVal !~ /^[[:digit:] -]*$/ );
|
||||
|
||||
}
|
||||
|
||||
@ -437,6 +459,11 @@ sub TBot_List_getConfigListname($)
|
||||
sub TBot_List_getConfigListno($)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
|
||||
if ( ! defined($hash->{listno}) ) {
|
||||
TBot_List_calcListNo($hash);
|
||||
}
|
||||
|
||||
return $hash->{listno};
|
||||
}
|
||||
|
||||
@ -499,6 +526,8 @@ sub TBot_List_getList($;$)
|
||||
$rd = "postme".sprintf("%2.2d",TBot_List_getConfigListno($hash))."Cont";
|
||||
my $listCont = ReadingsVal(TBot_List_getConfigPostMe($hash),$rd,"");
|
||||
|
||||
$listCont =~ s/[\n\t\r\f]+/ /sg;
|
||||
|
||||
my @entries = split( /,/, $listCont );
|
||||
|
||||
if ( defined( $entry ) ) {
|
||||
@ -553,6 +582,18 @@ sub TBot_List_getMsgId($$$;$) {
|
||||
return $hash->{inlinechats}{$key};
|
||||
}
|
||||
|
||||
##############################################
|
||||
# translate multiple lines into comma separated list
|
||||
#
|
||||
sub TBot_List_changeMultiLine($) {
|
||||
my ($text) = @_;
|
||||
|
||||
$text =~ s/[\n\t\r\f]+/,/sg;
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
@ -571,64 +612,77 @@ sub TBot_List_handleEvents($$$)
|
||||
my ($hash, $tbot, $events ) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
my $unsolic = AttrVal($name,"handleUnsolicited",0);
|
||||
|
||||
# events - look for sentMsgId / msgReplyMsgId
|
||||
foreach my $event ( @{$events} ) {
|
||||
next if(!defined($event));
|
||||
|
||||
# msgPeer is chat here in chats
|
||||
if ( $event =~ /sentMsgId\:/ ) {
|
||||
Log3 $name, 4, "TBot_List_handleEvents $name: found sentMsgId ". $event;
|
||||
my $msgPeer = InternalVal( $tbot, "sentMsgPeerId", "" );
|
||||
my $msgWait = TBot_List_getMsgId( $hash, $tbot, $msgPeer, "textmsg" );
|
||||
my $msgChat = InternalVal( $tbot, "sentMsgPeerId", "" );
|
||||
my $msgWait = TBot_List_getMsgId( $hash, $tbot, $msgChat, "textmsg" );
|
||||
my $msgSent = InternalVal( $tbot, "sentMsgText", "" );
|
||||
$msgSent =~ s/\s//g;
|
||||
# Debug "wait :".$msgWait.": sent :".$msgSent.":";
|
||||
# Debug "wait :".$msgWait.": sent :".$msgSent.": msgPeer/chat :$msgChat:";
|
||||
if ( defined( $msgWait ) && ( $msgSent eq $msgWait ) ) {
|
||||
my $arg = ReadingsVal($tbot,"sentMsgId","");
|
||||
|
||||
# store key set means a reply is expected
|
||||
if ( defined( TBot_List_getMsgId( $hash, $tbot, $msgPeer, "store") ) ) {
|
||||
if ( defined( TBot_List_getMsgId( $hash, $tbot, $msgChat, "store") ) ) {
|
||||
# reply received
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, $arg, "reply");
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, $arg, "reply");
|
||||
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, undef, "store");
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, undef, "store");
|
||||
|
||||
} else {
|
||||
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, $arg );
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, $arg );
|
||||
|
||||
# remove old entry ids from chg entries
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, undef, "entry");
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, undef, "entry");
|
||||
}
|
||||
|
||||
# set internal msg
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, undef, "textmsg" );
|
||||
# reset internal msg
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, undef, "textmsg" );
|
||||
|
||||
}
|
||||
|
||||
} elsif ( $event =~ /msgReplyMsgId\:/ ) {
|
||||
Log3 $name, 4, "TBot_List_handleEvents $name: found msgReplyMsgId ". $event;
|
||||
my $msgPeer = ReadingsVal( $tbot, "msgPeerId", "" );
|
||||
} elsif ( $event =~ /msgId\:/ ) {
|
||||
Log3 $name, 4, "TBot_List_handleEvents $name: found msgId ". $event;
|
||||
my $msgReplyId = ReadingsVal($tbot,"msgReplyMsgId","");
|
||||
$msgReplyId =~ s/\s//g;
|
||||
my $msgChat = ReadingsVal( $tbot, "msgChatId", "" );
|
||||
my $replyMsg = TBot_List_getMsgId( $hash, $tbot, $msgChat, "reply");
|
||||
my $hasChat = TBot_List_getMsgId( $hash, $tbot, $msgChat );
|
||||
|
||||
my $replyMsg = TBot_List_getMsgId( $hash, $tbot, $msgPeer, "reply");
|
||||
if ( $replyMsg eq $msgReplyId ) {
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, undef, "reply");
|
||||
|
||||
my $msgText = ReadingsVal( $tbot, "msgText", "" );
|
||||
# distinguish between reply (check for waiting reply)
|
||||
if ( length($msgReplyId) != 0 ) {
|
||||
# reply found
|
||||
# Debug "reply :".$replyMsg.": rece reply :".$msgReplyId.": msgPeer/chat :$msgChat:";
|
||||
if ( defined( $replyMsg ) && ( $replyMsg eq $msgReplyId ) ) {
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, undef, "reply");
|
||||
|
||||
my $msgText = ReadingsVal( $tbot, "msgText", "" );
|
||||
|
||||
# now check if an id of an entry was stored then this is edit
|
||||
my $entryno = TBot_List_getMsgId( $hash, $tbot, $msgPeer, "entry");
|
||||
if ( defined( $entryno ) ) {
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgPeer, undef, "entry");
|
||||
# now check if an id of an entry was stored then this is edit
|
||||
my $entryno = TBot_List_getMsgId( $hash, $tbot, $msgChat, "entry");
|
||||
if ( defined( $entryno ) ) {
|
||||
TBot_List_setMsgId( $hash, $tbot, $msgChat, undef, "entry");
|
||||
|
||||
TBot_List_handler( $hash, "list_chg-$entryno", $tbot, $msgPeer, $msgText );
|
||||
} else {
|
||||
TBot_List_handler( $hash, "list_add", $tbot, $msgPeer, $msgText );
|
||||
TBot_List_handler( $hash, "list_chg-$entryno", $tbot, $msgChat, $msgText );
|
||||
} else {
|
||||
TBot_List_handler( $hash, "list_add", $tbot, $msgChat, $msgText );
|
||||
}
|
||||
}
|
||||
|
||||
} elsif( ( defined( $hasChat ) ) && ( ! defined( $replyMsg ) ) && ( $unsolic ) ) {
|
||||
# not waiting for reply but received message -> ask if entry should be added
|
||||
my $msgText = ReadingsVal( $tbot, "msgText", "" );
|
||||
TBot_List_handler( $hash, "list_expadd", $tbot, $msgChat, $msgText );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -647,17 +701,26 @@ sub TBot_List_handler($$$$;$)
|
||||
|
||||
my $lname = TBot_List_getConfigListname($hash);
|
||||
my $msgId;
|
||||
my $chatId;
|
||||
my @list;
|
||||
|
||||
if ( ! $ret ) {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR - $peer not allowed" if ( ! TBot_List_isAllowed( $hash, $peer ) );
|
||||
}
|
||||
# in start case from group chat both ids will be given and need to be allowed
|
||||
($peer, $chatId) = split( / /, $peer );
|
||||
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR - $peer peer not allowed" if ( ( ! $ret ) && ( ! TBot_List_isAllowed( $hash, $peer ) ) );
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR - $chatId chat not allowed" if ( ( ! $ret ) && ( defined($chatId) ) && ( ! TBot_List_isAllowed( $hash, $peer ) ) );
|
||||
|
||||
# get Msgid and list as prefetch
|
||||
if ( ! $ret ) {
|
||||
$chatId = TBot_List_getMsgId( $hash, $tbot, $peer, "chat" ) if ( ! defined($chatId) );
|
||||
$chatId = $peer if ( ! defined($chatId) );
|
||||
|
||||
$msgId = TBot_List_getMsgId( $hash, $tbot, $peer );
|
||||
$msgId = TBot_List_getMsgId( $hash, $tbot, $chatId ) if ( ! defined( $msgId ) );
|
||||
|
||||
@list = TBot_List_getList( $hash );
|
||||
}
|
||||
Log3 $name, 4, "JVLISTMGR_handler: $name - after prefetch peer :$peer: chatId :$chatId: msgId :$msgId: ";
|
||||
|
||||
#####################
|
||||
if ( $ret ) {
|
||||
@ -665,40 +728,31 @@ sub TBot_List_handler($$$$;$)
|
||||
# Log 1,$ret;
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd eq "list_ok" ) {
|
||||
# ok means clean buttons and show only list
|
||||
|
||||
# start the inline
|
||||
} elsif ( ( $cmd eq "list_ok" ) || ( $cmd eq "list_done" ) ) {
|
||||
# done means clean buttons and show only list
|
||||
my $textmsg = (defined($arg)?$arg:"DONE"); # default for done
|
||||
my $inline = " ";
|
||||
|
||||
# get the list of entries in the list
|
||||
my $liste = "";
|
||||
foreach my $entry ( @list ) {
|
||||
$liste .= "\n".$entry;
|
||||
if ( $cmd eq "list_ok" ) {
|
||||
# get the list of entries in the list
|
||||
my $liste = "";
|
||||
foreach my $entry ( @list ) {
|
||||
$liste .= "\n ".$entry;
|
||||
}
|
||||
|
||||
$textmsg = "Liste ".$lname;
|
||||
$textmsg .= " ist leer " if ( scalar(@list) == 0 );
|
||||
$textmsg .= " : $arg " if ( defined($arg) );
|
||||
$textmsg .= $liste;
|
||||
}
|
||||
|
||||
my $textmsg = "Liste ".$lname;
|
||||
$textmsg .= " ist leer " if ( scalar(@list) == 0 );
|
||||
$textmsg .= " : $arg " if ( defined($arg) );
|
||||
$textmsg .= $liste;
|
||||
|
||||
|
||||
if ( defined($msgId ) ) {
|
||||
# show new list
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$peer." $inline $textmsg" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer );
|
||||
# show final list
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId );
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, undef, "chat" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||
}
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd eq "list_done" ) {
|
||||
# done means clean buttons and show only list
|
||||
|
||||
if ( defined($msgId ) ) {
|
||||
# show new list
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$peer." DONE" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
|
||||
#####################
|
||||
@ -736,25 +790,33 @@ sub TBot_List_handler($$$$;$)
|
||||
$textmsg .= " : $arg " if ( defined($arg) );
|
||||
|
||||
if ( $cmd eq "list" ) {
|
||||
# remove msgId
|
||||
|
||||
|
||||
# remove msgId if existing
|
||||
if ( defined($msgId ) ) {
|
||||
# done old list now and start a new list message
|
||||
TBot_List_handler( $hash, "list_done", $tbot, $peer );
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer );
|
||||
TBot_List_handler( $hash, "list_done", $tbot, $peer, "wurde beendet" );
|
||||
} else {
|
||||
# there might be still a dialog in another chat
|
||||
my $oldchatId = TBot_List_getMsgId( $hash, $tbot, $peer, "chat" );
|
||||
TBot_List_handler( $hash, "list_done", $tbot, $peer, "wurde beendet" ) if ( defined( TBot_List_getMsgId( $hash, $tbot, $oldchatId ) ) );
|
||||
}
|
||||
|
||||
# store text msg to recognize msg id in dummy
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $textmsg, "textmsg" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
||||
|
||||
# store chat
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $chatId, "chat" );
|
||||
|
||||
# send msg and keys
|
||||
fhem( "set ".$tbot." queryInline ".'@'.$peer." $inline $textmsg" );
|
||||
fhem( "set ".$tbot." queryInline ".'@'.$chatId." $inline $textmsg" );
|
||||
|
||||
} else {
|
||||
if ( defined($msgId ) ) {
|
||||
# show new list
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$peer." $inline $textmsg" );
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." $inline $textmsg" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
}
|
||||
|
||||
@ -770,9 +832,9 @@ sub TBot_List_handler($$$$;$)
|
||||
# show ask for removal
|
||||
my $textmsg = "Liste ".$lname."\nEintrag ".($no+1)." (".$list[$no].") ?";
|
||||
# show ask msg
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$peer." (Entfernen:".$name."\%"."list_rem-$no|Aendern:".$name."\%"."list_askchg-$no) (Nach Oben:".$name."\%"."list_totop-$no|Zurueck:".$name."\%"."list_edit) $textmsg" );
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." (Entfernen:".$name."\%"."list_rem-$no|Aendern:".$name."\%"."list_askchg-$no) (Nach Oben:".$name."\%"."list_totop-$no|Zurueck:".$name."\%"."list_edit) $textmsg" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
|
||||
}
|
||||
@ -796,7 +858,7 @@ sub TBot_List_handler($$$$;$)
|
||||
# show updated list -> call recursively
|
||||
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Nach oben gesetzt" );
|
||||
}
|
||||
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd =~ /^list_rem-(\d+)$/ ) {
|
||||
# means remove a numbered entry from list - first ask
|
||||
@ -809,9 +871,9 @@ sub TBot_List_handler($$$$;$)
|
||||
# show ask for removal
|
||||
my $textmsg = "Liste ".$lname."\nSoll der Eintrag ".($no+1)." (".$list[$no].") entfernt werden?";
|
||||
# show ask msg
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$peer." (Ja:".$name."\%"."list_remyes-$no) (Nein:".$name."\%"."list_edit) $textmsg" );
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." (Ja:".$name."\%"."list_remyes-$no) (Nein:".$name."\%"."list_edit) $textmsg" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
}
|
||||
|
||||
@ -836,9 +898,9 @@ sub TBot_List_handler($$$$;$)
|
||||
# show ask for removal
|
||||
my $textmsg = "Liste ".$lname."\nSoll die gesamte Liste ".scalar(@list)." Einträge gelöscht werden?";
|
||||
# show ask msg
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$peer." (Ja - Liste löschen:".$name."\%"."list_clryes|Nein:".$name."\%"."list_edit) $textmsg" );
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." (Ja - Liste löschen:".$name."\%"."list_clryes|Nein:".$name."\%"."list_edit) $textmsg" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
|
||||
#####################
|
||||
@ -852,19 +914,21 @@ sub TBot_List_handler($$$$;$)
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd eq "list_askadd" ) {
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $msgId, "store" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $msgId, "store" );
|
||||
|
||||
my $textmsg = "Liste ".$lname." Neuen Eintrag eingeben:";
|
||||
|
||||
# store text msg to recognize msg id in dummy
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $textmsg, "textmsg" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
||||
|
||||
# means ask for an entry to be added to the list
|
||||
fhem( "set ".$tbot." msgForceReply ".'@'.$peer." $textmsg" );
|
||||
fhem( "set ".$tbot." msgForceReply ".'@'.$chatId." $textmsg" );
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd eq "list_add" ) {
|
||||
# means add entry to list
|
||||
|
||||
$arg = TBot_List_changeMultiLine( $arg );
|
||||
|
||||
# ! means put on top
|
||||
if ( $arg =~ /^\!(.+)$/ ) {
|
||||
@ -887,7 +951,7 @@ sub TBot_List_handler($$$$;$)
|
||||
$ret = undef;
|
||||
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
|
||||
#####################
|
||||
@ -896,18 +960,18 @@ sub TBot_List_handler($$$$;$)
|
||||
|
||||
if ( ( $no >= 0 ) && ( $no < scalar(@list) ) ) {
|
||||
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $msgId, "store" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $msgId, "store" );
|
||||
|
||||
# remove old entry ids from chg entries
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $no, "entry" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $no, "entry" );
|
||||
|
||||
my $textmsg = "Liste ".$lname." Eintrag ".($no+1)." ändern : ".$list[$no];
|
||||
|
||||
# store text msg to recognize msg id in dummy
|
||||
TBot_List_setMsgId( $hash, $tbot, $peer, $textmsg, "textmsg" );
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $textmsg, "textmsg" );
|
||||
|
||||
# means ask for an entry to be added to the list
|
||||
fhem( "set ".$tbot." msgForceReply ".'@'.$peer." $textmsg" );
|
||||
fhem( "set ".$tbot." msgForceReply ".'@'.$chatId." $textmsg" );
|
||||
|
||||
}
|
||||
|
||||
@ -916,6 +980,8 @@ sub TBot_List_handler($$$$;$)
|
||||
# means add entry to list
|
||||
my $no = $1;
|
||||
|
||||
$arg = TBot_List_changeMultiLine( $arg );
|
||||
|
||||
if ( ( $no >= 0 ) && ( $no < scalar(@list) ) ) {
|
||||
my $nre = 0;
|
||||
my $text = "";
|
||||
@ -933,12 +999,45 @@ sub TBot_List_handler($$$$;$)
|
||||
|
||||
if ( defined($msgId ) ) {
|
||||
# show new list -> call recursively
|
||||
$ret = "Eintrag hinzugefuegt";
|
||||
$ret = "Eintrag gändert";
|
||||
TBot_List_handler( $hash, "list", $tbot, $peer, $ret );
|
||||
$ret = undef;
|
||||
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: 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:":"");
|
||||
}
|
||||
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd =~ /^list_expadd$/ ) {
|
||||
# means unsolicited message ask for adding - first ask
|
||||
|
||||
$arg = TBot_List_changeMultiLine( $arg );
|
||||
|
||||
my $textmsg = "Liste ".$lname."\nSoll der Eintrag ".$arg." hinzugefügt werden?";
|
||||
if ( defined($msgId ) ) {
|
||||
# store text for adding
|
||||
TBot_List_setMsgId( $hash, $tbot, $chatId, $arg, "expadd" );
|
||||
|
||||
fhem( "set ".$tbot." queryEditInline $msgId ".'@'.$chatId." (Ja:".$name."\%"."list_expaddyes) (Nein:".$name."\%"."list_edit) $textmsg" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||
}
|
||||
|
||||
#####################
|
||||
} elsif ( $cmd eq "list_expaddyes" ) {
|
||||
# means add entry to list
|
||||
|
||||
my $addentry = TBot_List_getMsgId( $hash, $tbot, $chatId, "expadd" );
|
||||
|
||||
if ( defined($addentry ) ) {
|
||||
fhem( "set ".TBot_List_getConfigPostMe($hash)." add $lname ".$addentry );
|
||||
# show list again -> call recursively
|
||||
if ( defined($msgId ) ) {
|
||||
TBot_List_handler( $hash, "list_edit", $tbot, $peer, " Eintrag hinzugefuegt" );
|
||||
} else {
|
||||
$ret = "TBot_List_handler: $name - $tbot ERROR no msgId known for peer :$peer: chat :$chatId: cmd :$cmd: ".(defined($arg)?"arg :$arg:":"");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1066,6 +1165,7 @@ sub TBot_List_Setup($) {
|
||||
my %sets = (
|
||||
"start" => undef,
|
||||
"end" => undef,
|
||||
"reset" => undef,
|
||||
|
||||
);
|
||||
|
||||
@ -1086,8 +1186,6 @@ sub TBot_List_Setup($) {
|
||||
|
||||
$hash->{STATE} = "Defined";
|
||||
|
||||
TBot_List_calcListNo($hash);
|
||||
|
||||
Log3 $name, 4, "TBot_List_Setup $name: ended ";
|
||||
|
||||
}
|
||||
@ -1124,6 +1222,8 @@ sub TBot_List_Setup($) {
|
||||
Defines a TBot_List device, which will allow interaction between the telegrambot and the postme device
|
||||
<br><br>
|
||||
Example: <code>define testtbotlist TBot_List testposteme testlist</code><br>
|
||||
<br><br>
|
||||
Note: The module relies on events send from the corresponding TelegramBot devices. Specifically changes to the readings <code>sentMsgId</code> and <code>msgReplyMsgId</code> are required to enable to find the corresponding message ids to be able to modify messages. This needs to be taken into account when using the attributes event-on-*-reading on the TelegramBot device.<br>
|
||||
<br>
|
||||
</ul>
|
||||
<br><br>
|
||||
@ -1175,6 +1275,10 @@ sub TBot_List_Setup($) {
|
||||
|
||||
<li><code>allowedPeers <list of peer ids></code><br>If specifed further restricts the users for the given list to these peers. It can be specifed in the same form as in the telegramBot msg command but without the leading @ (so ids will be just numbers).
|
||||
</li>
|
||||
|
||||
<li><code>handleUnsolicited <1 or 0></code><br>If set to 1 and new messages are sent in a chat where a dialog of this list is active the bot will ask if an entry should be added. This helps for accidential messages without out first pressing the "add" button.
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<br><br>
|
||||
|
Loading…
x
Reference in New Issue
Block a user