[ reiser @ 11.07.2004. 15:08 ] @
Pisem ChatBot-a u Delphi-u koji bi trebao da odgovara na pitanja u kviz-sobi. E sad, nemam ideju kako da napravim da se konektuje (udje) u sobu i da salje/prima odgovore. Trazio sam po net-u komponente i nista konkretno nisam nasao...


Poz
[ Crazy Mix @ 11.07.2004. 16:08 ] @
E, jesi li uspeo nesto sa onim komponentama sto sam ti slao?
[ reiser @ 11.07.2004. 22:49 ] @
Nisam nista, nijedna nece da si instalira (javlja gresku da fali neki unit u uses listi) - imam Delphi 7.
Videcu source kasnije.
[ igac @ 11.07.2004. 23:56 ] @
pa imas one socket komponente (sirove sockete) a ja mislim da delphi 7 ima i irc client komponente...

sa obicnim (da ne citas rfc bezze)
ono connect se na host/port
i saljes prvo
Code:

nick arg1 #13#10
pa 
user arg1 arg2 arg3 arg4 #13#10
i onda kada ti kaze PING :blabla
vratis PONG :blabla

dalje znas... privmsg #kanal/nick :poruka
[ reiser @ 12.07.2004. 01:21 ] @
E sad cu bas da vidim, nasao sam nesto i na experts exchange.

600!
[ reiser @ 12.07.2004. 02:17 ] @
Evo dokle sam stigao :

Code:

  IRC := TClientSocket.Create(IRC);

  IRC.Host := 'irc.rstel.net';
  IRC.Port := 6667;
  IRC.Active := TRUE;
  IRC.Open;


E sad, sta ti je ovo nick, jer to treba da posaljem bas tako, "nick arg1" + #13#10 ?
Isto pitanje vazi i za user ?
Posle toga, treba da koristim Socket.ReadText, da bi dobio informaciju kad mi je poslao "PING :blabla", jer tako ? I sta je ovo blabla, jer isti text mora da posaljem i kad vracam informaciju (PONG :blabla) ?

Poz
[ reiser @ 12.07.2004. 02:38 ] @
OK, mislim da sam razjasnio i ona pitanja koja sam postavio u prethodnoj poruci, btw, imam sledeci kod :

Code:

var
  RecStr  : String;
  PongStr : String;
begin
  IRC := TClientSocket.Create(IRC);

  IRC.Host := 'irc.rstel.net';
  IRC.Port := 6667;
  IRC.Open;

                  repeat
                    RecStr := IRC.Socket.ReceiveText;
                  until RecStr <> '';

  IRC.Socket.SendText('USER ' + Nick + ' 0 0 0' + #13#10);
  IRC.Socket.SendText('NICK ' + Nick + #13#10);

  If Pos('PING', RecStr) <> 0 Then
  Begin
    PongStr := StringReplace(RecStr, 'I', 'O', [rfReplaceAll]);
    IRC.Socket.SendText(PongStr + #13#10);
    IRC.Socket.SendText('JOIN ' + Channel +#13#10);
  end;

  If Pos('.version', RecStr) <> 0 Then
    IRC.Socket.SendText('PRIVMSG #root :Version: 1.00' + #13#10);


Naravno, ja moram da sacekam da mi server posalje PING, sto i radim u bloku koji sam malo vise nazubio, btw, izgleda da server nista ne salje ?!
[ igac @ 12.07.2004. 21:25 ] @
sto to nisi stavio u eventse ? on connect da ti salje nick i user... receive, send,...

po rfc-u bi trebao da salje ping pri connectu ali...
Code:

iggie@kittie:~$ telnet irc.rstel.net 6667
Trying 81.93.87.131...
Connected to irc.rstel.net.
Escape character is '^]'.
NOTICE AUTH :*** Looking up your hostname...
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** No Ident response
nick igac
user a a a a  


NOTICE AUTH :*** Couldn't look up your hostname
:irc.rstel.net 001 igac :Welcome to the Internet Relay Network igac
:irc.rstel.net 002 igac :Your host is irc.rstel.net[irc.rstel.net/6667], running version 2.8/hybrid-6.4.1
:irc.rstel.net 003 igac :This server was created Sat Sep 6 2003 at 10:14:11 CEST
:irc.rstel.net 004 igac irc.rstel.net 2.8/hybrid-6.4.1 oOiwszcrkfydnxb biklmnopstve
:irc.rstel.net 005 igac WALLCHOPS EXCEPTS INVEX MODES=4 MAXCHANNELS=20 MAXBANS(beI)=25 MAXTARGETS=4 NICKLEN=24 TOPICLEN=400 KICKLEN=90 :are supported by this 
server
:irc.rstel.net 005 igac CHANTYPES=#& PREFIX=(ov)@+ CHANMODES=beI,k,l,imnpst NETWORK=BalcanNet CASEMAPPING=rfc1459 :are supported by this server
:irc.rstel.net 251 igac :There are 5 users and 126 invisible on 10 servers
:irc.rstel.net 252 igac 18 :Smurf Targets (IRC Operators) online
:irc.rstel.net 254 igac 128 :channels formed
:irc.rstel.net 255 igac :I have 47 clients and 2 servers
...

quit
ERROR :Closing Link: igac[[email protected]] (Quit: igac)
Connection closed by foreign host.

iggie@kittie:~$

vidim da ne salje bas ping... ali vjerovatno kasnije hoce jer se tako provjerava jel user "ziv" :)
a to PING :123456
moras vratiti PONG :123456 da bi te server "prepoznao"...
mozda treba izbaciti ":" znaci PONG 123456 (ali nisam sig...)

stavi memo1.lines.add(irc.socket.receivetext);
pa gledaj sta ti salje...
[ hwfanatic @ 01.08.2004. 14:53 ] @
Pretpostavljam da si celu stvar već završio, i pretpostavljam da ovo što ću da predložim nije ono što si tražio, ali...

Ja bi, da sam na tvom mestu, sve to odradio kao skriptu u mIRC-u, a njega pustio da se zaje*ava sa socketima... Mnogo manje vremena bi potrošio oko cele stvari, a skriptovanje u mIRC-u nije teško, i pruža dosta mogućnosti. Može i neki drugi klijent koji podržava skripte, naravno (recimo dIRC)...

Ovo je samo ideja. :)
[ reiser @ 01.08.2004. 19:11 ] @
Nisam zavrsio, izbrisao sam ceo projekat.
Btw, ja sam poceo da pisem Bot-a u cilju da bih nesto naucio oko tih socket-a itd..., tako da mIRC skriptanje otpada

poz
[ Srki_82 @ 12.12.2004. 14:38 ] @
Za prvi program sa socket-ima bih ti preporucio neki mali chat programcic. Nista posebno. Samo da dva programa razmenjuju porukice. Bez nekih obrada ili bilo cega... na jednom programu napises 'CAO' i to na drugom iskoci na formi. Prilicno jednostavno. Preporucio bih ti da koristis Indy kontrole. Dolaze zajedno sa Delphi-em i jako su lake za koriscenje.