QB64 Phoenix Edition
IRC Chat Bot Demo - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1)
+--- Forum: Prolific Programmers (https://qb64phoenix.com/forum/forumdisplay.php?fid=26)
+---- Forum: SMcNeill (https://qb64phoenix.com/forum/forumdisplay.php?fid=29)
+---- Thread: IRC Chat Bot Demo (/showthread.php?tid=301)



IRC Chat Bot Demo - SMcNeill - 05-01-2022

An oldie salvaged from the ashes of the old forums!



Code: (Select All)
TITLE "Steve QB64-IRC Bot"

DIM SHARED Client AS LONG, Server AS STRING, Channel AS STRING
crlf$ = CHR$(13) + CHR$(10)
nick$ = "SqbBot"
pass$ = ""
Server = "irc.freenode.net"
Channel = "#qb64"

PRINT "Connecting to " + Server + "..."
Client = _OPENCLIENT("TCP/IP:6667:" + Server)
IF Client& = 0 THEN PRINT "Error: could not connect...": SLEEP: SYSTEM
IF pass$ > "" THEN SendInfo "PASS" + pass$
SendInfo "NICK " + nick$
SendInfo "USER " + nick$ + " 0 * :" + nick$
PRINT "Connected!"

SendInfo "JOIN " + Channel
SendInfo "TOPIC " + Channel
PRINT "Joined "; Channel

respond = 0
DO
    _LIMIT 1000
    GET #Client&, , In$
    IF LEFT$(In$, 4) = "PING" THEN
        'Respond with PONG
        res$ = "PONG" + MID$(In$, 5) + CHR$(13) + CHR$(10)
        PUT #Client, , res$
    END IF

    'IF In$ <> "" THEN PRINT LEFT$(In$, LEN(In$) - 2) 'Unremark this is we want to see what's being typed by everyone.
    IF In$ <> "" AND respond THEN ProcessInput In$
    IF INSTR(In$, "End of /NAMES list.") THEN respond = -1 'Don't start responding to the automatic server messages, like an idiot bot!
LOOP UNTIL INKEY$ = CHR$(32) 'Spacebar to quit


SUB SendInfo (text$)
text$ = text$ + CHR$(13) + CHR$(10)
PUT #Client&, , text$
END SUB

SUB SendReply (text$)
text$ = "PRIVMSG " + Channel$ + " :" + text$ + CHR$(13) + CHR$(10)
PUT #Client&, , text$
COLOR 14: PRINT text$
END SUB

SUB ProcessInput (text$)

Speaker$ = MID$(text$, 2, INSTR(text$, "!") - 2)
c$ = UCASE$(Channel) + " :"
In$ = UCASE$(LEFT$(text$, LEN(text$) - 2)) + " " ' Strip off the CRLF
eval$ = " " + MID$(In$, INSTR(In$, c$) + LEN(c$)) + " "

IF INSTR(eval$, " SQBBOT ") THEN
    'someone is talking directly to the bot or giving it a command
    IF INSTR(eval$, " QUIT ") THEN SYSTEM 'A means to automatically shut down the bot
    IF INSTR(eval$, " FINISH ") THEN SYSTEM 'A means to automatically shut down the bot
    IF INSTR(eval$, " DIE ") THEN SYSTEM 'A means to automatically shut down the bot
    IF INSTR(eval$, " SHUT DOWN ") THEN SYSTEM 'A means to automatically shut down the bot
    IF INSTR(eval$, " EXIT ") THEN SYSTEM 'A means to automatically shut down the bot
    IF INSTR(eval$, " END ") THEN SYSTEM 'A means to automatically shut down the bot
    IF INSTR(eval$, " TELL") THEN
        IF INSTR(eval$, "TIME") THEN Out$ = Out$ + "The TIME is " + TIME$ + ".  "
        IF INSTR(eval$, "DATE") THEN Out$ = Out$ + "The DATE is " + DATE$ + ".  "
    END IF

    IF INSTR(eval$, " HI ") THEN Out$ = "Hiyas, " + Speaker$ + ".  "
    IF INSTR(eval$, " HELLO ") THEN Out$ = "Hello to you too, " + Speaker$ + ".  "
    IF INSTR(eval$, " YO ") THEN Out$ = "Hola!  " + Speaker$ + "  How's it hanging?  "
    IF INSTR(eval$, " HOLA ") THEN Out$ = "What's happening, " + Speaker$ + "?  "
END IF

IF INSTR(In$, " JOIN ") AND (INSTR(eval$, "JOIN") = 0) THEN Out$ = "Welcome to QB64 Chat, " + Speaker$ + ".  "

IF Out$ <> "" THEN
    COLOR 15
    l = INSTR(In$, "PRIVMSG")
    PRINT Speaker$; " on "; MID$(In$, l + 8) 'I put a print here, so we can see what our bot is responding to, no matter what.
    SendReply Out$
END IF
END SUB


Another program from the depths of my hard drive — the start of an IRC chat bot.  I’m certain many of the old regulars will remember this guy popping up over and over in the IRC channel as folks tested it and then used it as a base to build their own custom bot, but we have a lot of new members around now, and I thought they too deserved the chance to drive us old QB64 chat channel lurkers crazy...

(If anyone still uses IRC chat at all anymore.  Guess it's just another relic left over moldering from the past.  Sad )