diff --git a/CHANGED b/CHANGED
index 8667bd522..9314deddd 100644
--- a/CHANGED
+++ b/CHANGED
@@ -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
diff --git a/FHEM/49_TBot_List.pm b/FHEM/49_TBot_List.pm
index ad4428e1e..d1e653858 100644
--- a/FHEM/49_TBot_List.pm
+++ b/FHEM/49_TBot_List.pm
@@ -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
Example: define testtbotlist TBot_List testposteme testlist
+
+ Note: The module relies on events send from the corresponding TelegramBot devices. Specifically changes to the readings sentMsgId
and msgReplyMsgId
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.
@@ -1175,6 +1275,10 @@ sub TBot_List_Setup($) {
allowedPeers <list of peer ids>
handleUnsolicited <1 or 0>