Hallo,
ich hatte mir heute überlegt ob es irgendwie möglich wäre
Infos/Nachrichten aus IPS zu einem IRC Server oder Slack-Chat
zu übertragen. Hat da vielleicht jemand eine Idee ?
MFG Matze
Hallo,
ich hatte mir heute überlegt ob es irgendwie möglich wäre
Infos/Nachrichten aus IPS zu einem IRC Server oder Slack-Chat
zu übertragen. Hat da vielleicht jemand eine Idee ?
MFG Matze
Hi Matze!
Gibt da so ein paar Sachen bei Google:
Php Irc Client - Tutorials - Infos - Anleitungen - Dreamcodes
Test IRC client bot in PHP · GitHub
GitHub - spoulson/Chatmore: Simplified web-based IRC client for PHP/Unix
php ‚2‘ IRC :: web-based chat :: webchat via web
ABER … PHP Scripte laufen bei IPS normal nur 30 Sekunden. Du könntest also nur dich mit dem IRC Server verbinden, eine Nachricht absetzen und die Verbindung wieder trennen. Eine dauerhafte Verbindung über z.B. mehrere Minuten/Stunden ist so nicht direkt möglich.
Grüße,
Chris
okay , danke für die Antwort, war auch nur so eine Idee
Du brauchst dafür einen Datenprovider. Also ein externes tool, dass quasi just-in-time mit dem IRC kommuniziert und dann nur die relevanten Daten von und zu IPS durchleitet. Im IPS-Chatroom, der auch auf dem IRC basiert, gabs zwei Bots, die ne kopplung an IPS hatten. Einer, der IPS_Attain, ist noch online. Isis, mein Bot, hab ich eingemottet weil mir für die Weiterentwicklung der KI auf Alice-basis (ein bekannter Chatbot) die Zeit fehlte.
Es geht also. Frage ist wie viel Zeit zu da reinstecken willst.
Toni
Hi,
ja ich habe einen IPS basierenden IRC Bot auf freenode.net am laufen.
Client Socket anlegen
Adresse irc.freenode.net
Port 6667
Daran eine Registervariable
Daran das folgende Script:
Das Script wird halt über eingehende IRC Messages jedesmal getriggert.
Wichtig ist das man auf PING abfragen reagiert, sonst wird man als inaktiv rausgeschmissen.
<?
##### Konfig ######
$debug = false;
$SemaphoreNameString = "IRC";
$ID = 22786 /*[Client Socket IRC]*/; // ID des Client Socket
$nickname = 'Nickname of the Bot';
$server_chan = '#irgendeinchannel';
if ($_IPS['SENDER'] == 'RegisterVariable')
{
$array = preg_split('/ /', $_IPS['VALUE'], 4);
//foreach ($array as $key => $value) IPS_LogMessage(IPS_GetName($_IPS['SELF']),".$key.".trim($value)."..");
IPS_SetScriptTimer($_IPS['SELF'],400); // Watchdog
if (IPS_SemaphoreEnter($SemaphoreNameString,9000))
{
if ($array[1] == "PRIVMSG")
{
$nick = GetTextBetween($array[0], ":", "!");
$chan = $array[2];
$msg = trim(substr($array[3],1));
if ($debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']),"Nachricht im Chan: $chan ist: $msg");
//If we have any msg at the server
if ($chan == $server_chan){
// IF we have a msg on channel
$msgarray = explode(" ",$msg);
if ($debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']),$msgarray[0]." ");
//Hier werden je nach eingehender Message über unterprogramme Antwoten gesendet....
If (strtolower($msgarray[0]) == "!version") SendCommand ("PRIVMSG " . $chan . " :Ich habe IPS Version ##" . GetValue(54123 /*[IPS Version\UpdateIdLocal]*/));
If (strtolower($msgarray[0]) == "!info") // if anybody type in !info at the channel, do this or that
// usw.....
}
if ($chan == $nickname){
// IF we have a privatmsg
$msgarray = explode(" ",$msg);
if ($debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']),$msgarray[0]." ");
//Hier werden je nach eingehender Message über unterprogramme Antworten gesendet....
If (strtolower($msgarray[0]) == "!info") // if anybody type in !info at the private chat, do this or that
}
switch ($array[1])
{
case "JOIN":
// if anybody joins the channel, do this or that
SendCommand ("NAMES $chan :"); // Userlist herrausfinden
break;
case "PART":
case "QUIT":
// if anybody left the channel, do this or that
SendCommand ("NAMES $server_chan :"); // Userlist herrausfinden
break;
case "NICK":
// if anybody changes the nick name, do this or that
break;
case "353": //userlist
$array = preg_split('/ /', $_IPS['VALUE'], 6);
$chan = $array[4];
// response after the NAMES command, do this or that
break;
}
if ($array[0] == 'PING'){
// IRC Sends a "PING" command to the client which must be anwsered with a "PONG"
// Or the client gets Disconnected
SendCommand("PONG ".trim($array[1]));
if ($debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']),"..PONG..");
}
if (FindString($_IPS['VALUE'], '*** Found your hostname')){
//if(trim($array[0]) == ":NickServ!NickServ@services."){
//If we have joined the server
SendCommand("JOIN $server_chan"); //Join the chanel
}
if (FindString($_IPS['VALUE'], 'Looking up your hostname')){
//Ok, we have connected to the server, now we have to send the login commands.
SendCommand("PASS NOPASS"); //Sends the password not needed for most servers
SendCommand("NICK $nickname"); //sends the nickname
SendCommand("USER $nickname USING IPSymcon IRC"); //sends the user must have 4 paramters
// SendCommand("/umode +i
\r");
}
IPS_SemaphoreLeave($SemaphoreNameString);
}
}
if ($_IPS['SENDER'] == 'WebFront')
{
SendCommand ("PRIVMSG $server_chan :".$_IPS['VALUE']);
SetValue($_IPS['VARIABLE'],"");
}
if ($_IPS['SENDER'] == 'TimerEvent')
{ //connect to the server lost -> reconnect
IPS_ApplyChanges($ID);
IPS_LogMessage(IPS_GetName($_IPS['SELF']),"Timer abgelaufen ->reconnect");
// ATN_SetValueEreignisListe(34832 /*[.Alarm/Meldungsliste\Meldungen]*/,"IRC","keine Rückmeldung vom Chat. Socket wird neu verbunden.");
}
if ($_IPS['SENDER'] == 'Execute')
{
SendCommand ("NAMES $server_chan :");
}
function SendCommand ($cmd)
{
global $ID;
CSCK_SendText($ID,$cmd ."
");
}
function FindString($string, $findme)
{
$pos = stripos($string, $findme);
return ($pos !== false);
}
function GetTextBetween($string, $start, $end){
preg_match_all( "/$start(.*)$end/U", $string, $match );
return $match[1][0];
}
?>
Ich habe das laufende Script gekürzt und hoffe das es trotzdem läuft.