2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

50_SSChatBot: contrib 1.6.0

git-svn-id: https://svn.fhem.de/fhem/trunk@21997 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-05-22 09:50:48 +00:00
parent d79b24a7ce
commit 81a685c4ca

View File

@ -49,6 +49,7 @@ eval "use Net::Domain qw(hostname hostfqdn hostdomain domainname);1" or my $SSC
# Versions History intern
our %SSChatBot_vNotesIntern = (
"1.6.0" => "22.05.2020 replace \" H\" with \"%20H\" in attachments due to problem in HttpUtils ",
"1.5.0" => "15.03.2020 slash commands set in interactive answer field 'value' will be executed ",
"1.4.0" => "15.03.2020 rename '1_sendItem' to 'asyncSendItem' because of Aesthetics ",
"1.3.1" => "14.03.2020 new reading recActionsValue which extract the value from actions, review logs of SSChatBot_CGI ",
@ -92,7 +93,7 @@ use vars qw(%SSChatBot_vHintsExt_en);
use vars qw(%SSChatBot_vHintsExt_de);
################################################################
sub SSChatBot_Initialize($) {
sub SSChatBot_Initialize {
my ($hash) = @_;
$hash->{DefFn} = "SSChatBot_Define";
$hash->{UndefFn} = "SSChatBot_Undef";
@ -124,7 +125,7 @@ return;
# ($hash) [1] [2] [3] [4]
#
################################################################
sub SSChatBot_Define($@) {
sub SSChatBot_Define {
my ($hash, $def) = @_;
my $name = $hash->{NAME};
@ -172,7 +173,7 @@ sub SSChatBot_Define($@) {
# initiale Routinen nach Start ausführen , verzögerter zufälliger Start
SSChatBot_initonboot($hash);
return undef;
return;
}
################################################################
@ -185,7 +186,7 @@ return undef;
# internen Timern, sofern diese im Modul zum Pollen verwendet
# wurden.
################################################################
sub SSChatBot_Undef($$) {
sub SSChatBot_Undef {
my ($hash, $arg) = @_;
my $name = $hash->{NAME};
@ -193,7 +194,7 @@ sub SSChatBot_Undef($$) {
SSChatBot_removeExtension($hash->{HELPER}{INFIX});
RemoveInternalTimer($hash);
return undef;
return;
}
#######################################################################################################
@ -203,7 +204,7 @@ return undef;
# Sobald alle nötigen Maßnahmen erledigt sind, muss der Abschluss mit CancelDelayedShutdown($name) an
# FHEM zurückgemeldet werden.
#######################################################################################################
sub SSChatBot_DelayedShutdown($) {
sub SSChatBot_DelayedShutdown {
my ($hash) = @_;
my $name = $hash->{NAME};
@ -220,7 +221,7 @@ return 0;
# FHEM-Prozess, als auch dauerhafte Daten bspw. im physikalischen
# Gerät zu löschen die mit dieser Gerätedefinition zu tun haben.
#################################################################
sub SSChatBot_Delete($$) {
sub SSChatBot_Delete {
my ($hash, $arg) = @_;
my $name = $hash->{NAME};
my $index = $hash->{TYPE}."_".$hash->{NAME}."_botToken";
@ -228,11 +229,11 @@ sub SSChatBot_Delete($$) {
# gespeicherte Credentials löschen
setKeyValue($index, undef);
return undef;
return;
}
################################################################
sub SSChatBot_Attr($$$$) {
sub SSChatBot_Attr {
my ($cmd,$name,$aName,$aVal) = @_;
my $hash = $defs{$name};
my ($do,$val,$cache);
@ -272,11 +273,11 @@ sub SSChatBot_Attr($$$$) {
}
}
return undef;
return;
}
################################################################
sub SSChatBot_Set($@) {
sub SSChatBot_Set {
my ($hash, @a) = @_;
return "\"set X\" needs at least an argument" if ( @a < 2 );
my $name = $a[0];
@ -369,7 +370,7 @@ sub SSChatBot_Set($@) {
$text = $h->{text} if(defined $h->{text});
$users = $h->{users} if(defined $h->{users});
$fileUrl = $h->{fileUrl} if(defined $h->{fileUrl});
$attachment = $h->{attachments} if(defined $h->{attachments});
$attachment = SSChatBot_formString($h->{attachments}, "attachement") if(defined $h->{attachments});
}
if($a) {
@ -380,7 +381,7 @@ sub SSChatBot_Set($@) {
return "Your sendstring is incorrect. It must contain at least text with the \"text=\" tag like text=\"...\"\nor only some text like \"this is a test\" without the \"text=\" tag." if(!$text);
$text = SSChatBot_formText($text);
$text = SSChatBot_formString($text, "text");
$users = AttrVal($name,"defaultPeer", "") if(!$users);
return "You haven't defined any receptor for send the message to. ".
@ -416,7 +417,7 @@ return;
}
################################################################
sub SSChatBot_Get($@) {
sub SSChatBot_Get {
my ($hash, @a) = @_;
return "\"get X\" needs at least an argument" if ( @a < 2 );
my $name = shift @a;
@ -563,7 +564,7 @@ return $ret; # not genera
######################################################################################
# initiale Startroutinen nach Restart FHEM
######################################################################################
sub SSChatBot_initonboot ($) {
sub SSChatBot_initonboot {
my ($hash) = @_;
my $name = $hash->{NAME};
my ($ret,$csrf,$fuuid);
@ -642,6 +643,8 @@ return;
######################################################################################
# Eintrag zur SendQueue hinzufügen
#
# ($name,$opmode,$method,$userid,$text,$fileUrl,$channel,$attachment)
######################################################################################
sub SSChatBot_addQueue ($$$$$$$$) {
my ($name,$opmode,$method,$userid,$text,$fileUrl,$channel,$attachment) = @_;
@ -690,7 +693,7 @@ return;
# 1 -> Opmode nicht erfolgreich (Abarbeitung nach ckeck errorcode
# eventuell verzögert wiederholen)
#############################################################################################
sub SSChatBot_checkretry ($$) {
sub SSChatBot_checkretry {
my ($name,$retry) = @_;
my $hash = $defs{$name};
my $idx = $hash->{OPIDX};
@ -757,10 +760,8 @@ sub SSChatBot_checkretry ($$) {
return
}
#############################################################################################################################
####### Begin Kameraoperationen mit NonblockingGet (nicht blockierender HTTP-Call) #######
#############################################################################################################################
sub SSChatBot_getapisites($) {
sub SSChatBot_getapisites ($) {
my ($name) = @_;
my $hash = $defs{$name};
my $inaddr = $hash->{INADDR};
@ -826,7 +827,7 @@ return;
####################################################################################
# Auswertung Abruf apisites
####################################################################################
sub SSChatBot_getapisites_parse ($) {
sub SSChatBot_getapisites_parse {
my ($param, $err, $myjson) = @_;
my $hash = $param->{hash};
my $name = $hash->{NAME};
@ -928,7 +929,7 @@ return SSChatBot_chatop($name);
#############################################################################################
# Ausführung Operation
#############################################################################################
sub SSChatBot_chatop ($) {
sub SSChatBot_chatop {
my ($name) = @_;
my $hash = $defs{$name};
my $inprot = $hash->{INPROT};
@ -1007,12 +1008,14 @@ sub SSChatBot_chatop ($) {
};
HttpUtils_NonblockingGet ($param);
return;
}
#############################################################################################
# Callback from SSChatBot_chatop
#############################################################################################
sub SSChatBot_chatop_parse ($) {
sub SSChatBot_chatop_parse {
my ($param, $err, $myjson) = @_;
my $hash = $param->{hash};
my $name = $hash->{NAME};
@ -1205,7 +1208,7 @@ return;
###############################################################################
# Test ob JSON-String empfangen wurde
###############################################################################
sub SSChatBot_evaljson($$) {
sub SSChatBot_evaljson {
my ($hash,$myjson) = @_;
my $OpMode = $hash->{OPMODE};
my $name = $hash->{NAME};
@ -1232,7 +1235,7 @@ return($hash,$success,$myjson);
###############################################################################
# JSON Boolean Test und Mapping
###############################################################################
sub SSChatBot_jboolmap($){
sub SSChatBot_jboolmap {
my ($bool) = @_;
if(JSON::is_bool($bool)) {
@ -1247,7 +1250,7 @@ return $bool;
# Auflösung Errorcodes SVS API
# Übernahmewerte sind $hash, $errorcode
##############################################################################
sub SSChatBot_experror ($$) {
sub SSChatBot_experror {
my ($hash,$errorcode) = @_;
my $device = $hash->{NAME};
my $error;
@ -1268,7 +1271,7 @@ return ($error);
# Schwartzian Transform and the GRT transform
# Übergabe: "asc | desc",<Liste von Versionsnummern>
################################################################
sub SSChatBot_sortVersion (@){
sub SSChatBot_sortVersion {
my ($sseq,@versions) = @_;
my @sorted = map {$_->[0]}
@ -1289,7 +1292,7 @@ return @sorted;
######################################################################################
# botToken speichern
######################################################################################
sub SSChatBot_setToken ($$@) {
sub SSChatBot_setToken {
my ($hash, $token, $ao) = @_;
my $name = $hash->{NAME};
my ($success, $credstr, $index, $retcode);
@ -1322,7 +1325,7 @@ return ($success);
######################################################################################
# botToken lesen
######################################################################################
sub SSChatBot_getToken ($$$) {
sub SSChatBot_getToken {
my ($hash,$boot, $ao) = @_;
my $name = $hash->{NAME};
my ($success, $token, $index, $retcode, $credstr);
@ -1381,7 +1384,7 @@ return ($success, $token);
#############################################################################################
# FHEMWEB Extension hinzufügen
#############################################################################################
sub SSChatBot_addExtension($$$) {
sub SSChatBot_addExtension {
my ($name, $func, $link) = @_;
my $url = "/$link";
@ -1397,7 +1400,7 @@ return;
#############################################################################################
# FHEMWEB Extension löschen
#############################################################################################
sub SSChatBot_removeExtension($) {
sub SSChatBot_removeExtension {
my ($link) = @_;
my $url = "/$link";
@ -1420,7 +1423,7 @@ return;
#############################################################################################
# Leerzeichen am Anfang / Ende eines strings entfernen
#############################################################################################
sub SSChatBot_trim ($) {
sub SSChatBot_trim {
my $str = shift;
$str =~ s/^\s+|\s+$//g;
@ -1430,7 +1433,7 @@ return ($str);
#############################################################################################
# Länge Senedequeue updaten
#############################################################################################
sub SSChatBot_updQLength ($;$) {
sub SSChatBot_updQLength {
my ($hash,$rst) = @_;
my $name = $hash->{NAME};
@ -1452,26 +1455,37 @@ return;
#############################################################################################
# Text für den Versand an Synology Chat formatieren
# und nicht erlaubte Zeichen entfernen
# und nicht erlaubte Zeichen entfernen
#
# $txt : der zu formatierende String
# $func : ein Name zur Identifizierung der aufrufenden Funktion
#############################################################################################
sub SSChatBot_formText ($) {
my $txt = shift;
sub SSChatBot_formString {
my $txt = shift;
my $func = shift;
my (%replacements,$pat);
%replacements = (
'"' => "´", # doppelte Hochkomma sind im Text nicht erlaubt
" H" => "%20H", # Bug in HttpUtils(?) wenn vor großem H ein Zeichen + Leerzeichen vorangeht
"#" => "%23", # Hashtags sind im Text nicht erlaubt und wird encodiert
"&" => "%26", # & ist im Text nicht erlaubt und wird encodiert
"%" => "%25", # % ist nicht erlaubt und wird encodiert
"+" => "%2B",
);
if($func ne "attachement") {
%replacements = (
'"' => "´", # doppelte Hochkomma sind im Text nicht erlaubt
" H" => "%20H", # Bug in HttpUtils(?) wenn vor großem H ein Zeichen + Leerzeichen vorangeht
"#" => "%23", # Hashtags sind im Text nicht erlaubt und wird encodiert
"&" => "%26", # & ist im Text nicht erlaubt und wird encodiert
"%" => "%25", # % ist nicht erlaubt und wird encodiert
"+" => "%2B",
);
$txt =~ s/\n/ESC_newline_ESC/g;
} else {
%replacements = (
" H" => "%20H" # Bug in HttpUtils(?) wenn vor großem H ein Zeichen + Leerzeichen vorangeht
);
}
$txt =~ s/\n/ESC_newline_ESC/g;
my @acr = split (/\s+/, $txt);
$txt = "";
foreach (@acr) { # Einzeiligkeit für Versand herstellen
foreach (@acr) { # Einzeiligkeit für Versand herstellen
$txt .= " " if($txt);
$_ =~ s/ESC_newline_ESC/\\n/g;
$txt .= $_;
@ -1488,7 +1502,7 @@ return ($txt);
# Clienthash übernehmen oder zusammenstellen
# Identifikation ob über FHEMWEB ausgelöst oder nicht -> erstellen $hash->CL
#############################################################################################
sub SSChatBot_getclhash($;$$) {
sub SSChatBot_getclhash {
my ($hash,$nobgd)= @_;
my $name = $hash->{NAME};
my $ret;
@ -1539,7 +1553,7 @@ return ($ret);
# Versionierungen des Moduls setzen
# Die Verwendung von Meta.pm und Packages wird berücksichtigt
#############################################################################################
sub SSChatBot_setVersionInfo($) {
sub SSChatBot_setVersionInfo {
my ($hash) = @_;
my $name = $hash->{NAME};
@ -1574,7 +1588,7 @@ return;
# Common Gateway Interface
# parsen von outgoing Messages Chat -> FHEM
#############################################################################################
sub SSChatBot_CGI() {
sub SSChatBot_CGI {
my ($request) = @_;
my ($hash,$name,$link,$args);
my ($text,$timestamp,$channelid,$channelname,$userid,$username,$postid,$triggerword) = ("","","","","","","","");
@ -1770,7 +1784,7 @@ sub SSChatBot_CGI() {
$cr = $cr ne ""?$cr:"command '$command' executed";
Log3($name, 4, "$name - FHEM command return: ".$cr);
$cr = SSChatBot_formText($cr);
$cr = SSChatBot_formString($cr, "command");
SSChatBot_addQueue($name, "sendItem", "chatbot", $userid, $cr, "", "", "");
}
@ -1801,7 +1815,7 @@ sub SSChatBot_CGI() {
$cr = $cr ne ""?$cr:"command '$arg' executed";
Log3($name, 4, "$name - FHEM command return: ".$cr);
$cr = SSChatBot_formText($cr);
$cr = SSChatBot_formString($cr, "command");
SSChatBot_addQueue($name, "sendItem", "chatbot", $userid, $cr, "", "", "");
}