Chat Bot Funktionen

  • Jo, ich arbeite zu Zeit an einem Chat Bot und bräuchte vieleicht noch ein paar Anregungen zu unterschiedlichen Funktionen.
    Biesher kann der Bot:

    _google()
    _googleimg()
    _wiki()

    Spoiler anzeigen
    [autoit]

    #include <string.au3>
    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    msgbox(0,"",_google("hallo"))

    [/autoit] [autoit][/autoit] [autoit]

    ;=================Google Suche=================
    func _google($suchbegriff)
    $suchbegriff=stringreplace($suchbegriff," ", "+")

    inetget("http://www.google.de/search?q=" & $suchbegriff, "C:\temp.temp")
    local $file=fileopen("C:\temp.temp",0)
    $quelltext=fileread($file)
    fileclose($file)
    filedelete($file)

    $ergebnisse=_stringbetween($quelltext, '</div><li class=g><h3 class=r><a href="','" class=l')
    $textausschnitte=_stringbetween($quelltext, '</a></h3><div class="s">','<br><cite>')

    if isarray($ergebnisse) and isarray($textausschnitte) then
    $textausschnitte[0]=_htmlweg($textausschnitte[0])

    return $ergebnisse[0] & " - " & $textausschnitte[0]
    Else
    return "Fehler, es wurde nichts gefunden!"
    endif
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    ;======================Google Bilder Suche===========
    func _googleimg($suchbegriff)
    inetget("http://images.google.de/images?q=" & $suchbegriff, "C:\temp.temp")
    local $file=fileopen("C:\temp.temp",0)
    $quelltext=fileread($file)
    fileclose($file)
    filedelete($file)

    $ergebnisse=_stringbetween($quelltext, '<a href=/imgres?imgurl=','&imgrefurl=')

    return $ergebnisse[0]
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;=====================Wikipedia=================
    func _wiki($suchbegriff)
    inetget("http://de.wikipedia.org/wiki/" & $suchbegriff, "C:\temp.temp")
    local $file=fileopen("C:\temp.temp",0)
    $quelltext=fileread($file)
    fileclose($file)
    filedelete($file)

    if stringinstr($quelltext,"Diese Seite existiert nicht") Then
    return "Es gibt keinen Eintrag"
    else

    $ergebnisse=_stringbetween($quelltext, '<p>','<table id="toc" class="toc" summary="Inhaltsverzeichnis">')

    if isarray($ergebnisse) then
    $ergebnisse[0]=_htmlweg($ergebnisse[0])
    $ergebnisse[0]=stringmid($ergebnisse[0],1,100) & "..."

    [/autoit] [autoit][/autoit] [autoit]

    return "http://de.wikipedia.org/wiki/" & $suchbegriff & " - " & $ergebnisse[0]
    Else
    return "Es gibt keinen Eintrag"
    endif
    endif
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;=======================================Zusatzt============================

    [/autoit] [autoit][/autoit] [autoit]

    ;========Löscht alle html codes <> aus einem String
    func _htmlweg($text)
    $eckig=_stringbetween($text,"<",">")
    _ArrayDeleteEmpty($text)

    for $r=0 to ubound($eckig)-1
    $text=stringreplace($text,"<" & $eckig[$r] & ">","")
    next

    return $text
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    ;=======Löscht leere array elemente
    Func _ArrayDeleteEmpty(ByRef $ARRAY)
    If Not IsArray($ARRAY) Then Return 0
    Local $arTMP[1]
    For $i = 0 To UBound($ARRAY) -1
    If $ARRAY[$i] <> '' Then
    If $arTMP[0] = '' Then
    $arTMP[0] = $ARRAY[$i]
    Else
    ReDim $arTMP[UBound($arTMP)+1]
    $arTMP[UBound($arTMP)-1] = $ARRAY[$i]
    EndIf
    EndIf
    Next
    $ARRAY = $arTMP
    EndFunc

    [/autoit]

    Aber zur Zeit fällt mir nichts ein was so ein Bot noch so könenn sollte wenn man mal lange weile hat....
    Fals ihr selbst schon solche Funktionen geschrieben habt könnt ihr sie natürlich auch posten.

  • Ist doch dumm wenn HTML komplett entfernt wird, kann man keine Pseudotags mehr setzen.
    Wofür ist das? Was für ein Chat? HTML wird da doch nicht ausgeführt! Ist also kein Risiko, oder?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Der Chatbot ist für IRC und er läuft schon, und bei IRC kann man nix mit html anfangen.

    @ war10ck ok, youtube bau ich schnell mal ein

  • Das ist doch nur dazu da um bei gegooglten sachen oder wikipedia einträgen die <b>s usw wegzumachen....

    Egal, hier ist _youtube()

    Spoiler anzeigen
    [autoit]

    ;=================Youtube Suche=================
    func _youtube($suchbegriff)
    inetget("http://www.youtube.com/results?search_query=" & $suchbegriff, "C:\temp.temp")
    local $file=fileopen("C:\temp.temp",0)
    $quelltext=fileread($file)
    fileclose($file)
    filedelete($file)

    $video=_stringbetween($quelltext,'href="/watch?v=','"')

    $name=_stringbetween($quelltext,'rel="nofollow"><img title="','"')

    if isarray($video) and isarray($name) Then
    return "http://www.youtube.com/watch?v=" & $video[0]& " - " & $name[0]
    Else
    return "Fehler, es wurde nichts gefunden!"
    endif
    endfunc

    [/autoit]
  • So, habe noch eine 2 kleine KI funktionen gemacht:

    _botlearn()
    _botsay()

    Durch bot leran kann man ihm beibrigen das 2 wörter zusammen gehören und durch botsay kann man wiederum abfragen was ihm zu einem Begriff einfallen würde.

    z.B.
    Oger-Lord: botlearn autoIt=toll
    Oger-Lord: botlearn toll=programmieren
    Oger-Lord: bot? toll
    Bot: autoIt, programmieren

    Spoiler anzeigen
    [autoit]

    ;=========================Learning==================
    func _botlearn($a,$b)
    local $file=fileopen(@scriptdir & "\KI.txt",0)
    $text=fileread($file)
    fileclose($file)

    if stringinstr($text,$a & "||" & $b & @crlf) then
    else
    local $file=fileopen(@scriptdir & "\KI.txt",1)
    filewrite($file,$a & "||" & $b & @crlf)
    fileclose($file)
    endif
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    func _botsay($word)
    local $file=fileopen(@scriptdir & "\KI.txt",0)
    $text=fileread($file)
    fileclose($file)

    $antwort=""
    $zeilen=_stringsplit($text, @crlf)

    for $r=0 to ubound($zeilen)-1
    if $zeilen[$r]=@crlf then $zeilen[$r]=""
    next

    _ArrayDeleteEmpty($zeilen)

    $lang=ubound($zeilen)
    local $array[$lang][2]

    for $r=0 to ubound($zeilen)-1
    $bla=_stringsplit($zeilen[$r], "||")
    _ArrayDeleteEmpty($bla)
    $array[$r][0]=$bla[0]
    $array[$r][1]=$bla[1]
    next


    for $r=0 to ubound($zeilen)-1
    if $array[$r][0]=$word Then
    $antwort=$antwort & $array[$r][1] & ", "
    endif

    if $array[$r][1]=$word Then
    $antwort=$antwort & $array[$r][0] & ", "
    endif
    Next

    if $antwort="" then
    return "Das kenne ich nicht!"
    Else
    return $antwort
    endif
    endfunc

    [/autoit]
  • ctec:
    Das hilft mir aber nicht unbedingt so viel weiter, es war zwar ganz interessant mit dem Streichhölzern und darum hab ich es auch nachgebaut, aber um chatbots geht es dort nicht. Ein großes Problem ist es auch, dass der Bot nicht richtig lernen kann, da ihm niemand sagt, das seine Antwort gut oder vollkommender Mist war.

  • voll lustig wie mir alle nachmachen, nur weil ich im [Link entfernt] forum das protokoll des alten ajax chat nachgebaut habe.
    die func wiki[] z.b. ist einfach nur geklaut^^... naja jetzt wurde ja ne pseudo shoutbox integriert, damit auch jeder noob, der mein tcp tut gesehen hat
    nen clienten nachbaun kann... vorher wurde dies durch den komplexeren chat und dessen hash's weitgehetst verhindert...

    Edit Oscar: Bitte hier keine Verweise auf Botseiten posten!

    Einmal editiert, zuletzt von Oscar (27. Februar 2009 um 06:06)

  • Naja, dein Bot war die inspiration, mache aber selbst einen IRC bot.

    So, hier ist z.b. ein Ansatz wie er auf dem Bild beschrieebn wird:

    Spoiler anzeigen
    [autoit]

    #include <Sqlite.au3>
    #include <SQLite.dll.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;==========Die Datenbank würd geöffnet/Tabelle erstellt=====
    _SQLite_Startup()
    $sdbank = _SQLite_Open("Datenbank.db")
    _SQLite_Exec($sdbank,"Create Table if not exists KItabelle (Satz VARCHAR, Antwort VARCHAR)")
    ;==========Die Datenbank würd geöffnet/Tabelle erstellt=====

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _neueAntwort("hallo, ich bin bernd","hi hi") ;Neues gesprächsstück wird hinzugefügt
    msgbox(0,"",_Antwort("mimi, bernd")) ;Er soll auf bernd reagieren
    _close() ;Die Datenbank wird geschlossen und das programm beendet

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;=================Neue Antwort Eintragen================
    func _neueAntwort($satza,$satzb)
    _SQLite_Exec($sdbank,"INSERT INTO KItabelle (Satz, Antwort) VALUES ('"&$satza&"','"&$satzb&"')")
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;=================Eine Antowrt zurückgeben================
    func _Antwort($satz)
    Local $hQuery, $hZeile
    _SQLite_Query($sdbank,"SELECT Antwort FROM KItabelle WHERE `Satz` LIKE '%" &$satz& "%'",$hQuery)
    _SQLite_FetchData($hQuery, $hZeile)
    _SQLite_QueryFinalize ($hQuery)

    if $hZeile[0]<>"" Then
    return $hZeile[0]
    Else

    $satz=stringreplace($satz,"!","")
    $satz=stringreplace($satz,".","")
    $satz=stringreplace($satz,",","")
    $satz=stringreplace($satz,"?","")

    $worter=stringsplit($satz," ")

    if isarray($worter) Then

    $r=1
    while $r < ubound($worter)

    if stringlen($worter[$r]) > 3 then

    Local $hQuery, $hZeile
    _SQLite_Query($sdbank,"SELECT Antwort FROM KItabelle WHERE `Satz` LIKE '%" &$worter[$r]& "%'",$hQuery)
    _SQLite_FetchData($hQuery, $hZeile)
    _SQLite_QueryFinalize ($hQuery)

    if $hZeile[0]<>"" Then
    return $hZeile[0]
    endif

    Else
    $r=1000
    EndIf

    $r=$r+1
    wend
    return "Damit kann ich nichts anfangen!"
    Else
    return "Damit kann ich nichts anfangen!"
    endif

    endif

    [/autoit] [autoit][/autoit] [autoit]

    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;=================Das Programm beenden================
    func _close()
    _SQLite_Close("Datenbank.db")
    _SQLite_Shutdown ()
    endfunc

    [/autoit]