Почему TIdIRC не подключается к каналу? Есть ли компонент лучше?

Я боролся с дерьмовой документацией Google и не могу заставить программу присоединиться к каналу, хотя она нормально подключается к серверу. (Там написано Подключено к серверу)

//On Form Make
procedure TForm2.FormCreate(Sender: TObject);
  begin
   IdIRC1.Connect();
  end;

//on connected
procedure TForm2.IdIRC1Connected(Sender: TObject);
  begin
   ShowMessage('Connected to server');
   IdIRC1.Join('#TheChannel', 'password');
  end;      

Как только я закрываю форму, появляется сообщение об ошибке:

Project raised exception class EIdException with message 'Not Connected'

Также после подключения какие функции я использую для разговора по каналу/проверке входа? И какие еще варианты подключения IRC (компоненты) существуют для приложений Delphi?

ЛЮБАЯ ПОМОЩЬ БУДЕТ ПРИЗНАНА, У GOOGLE НИЧЕГО НЕТ ПО ЭТОМУ ДЕЙСТВИТЕЛЬНОМУ. Все, что я хочу, это иметь возможность подключаться / проверять сообщения чата канала и разговаривать в чате; Простой строковый ввод-вывод через IRC...


person Terrell G.    schedule 21.05.2012    source источник
comment
Прежде чем кто-то спросит вас о некоторых деталях или опубликует ответ; по ссылке вы можете find here.   -  person TLama    schedule 21.05.2012


Ответы (2)


Думаю, вы не выполняете все требования к серверу. Просто IdIrc.Connect недостаточно, у меня это работает:

FIRC.Host:= 'irc.freenode.org';
FIRC.Port := 6667;
FIRC.Username:= 'SapoIndy';
FIRC.Nickname:= 'SapoIndy';
FIRC.RealName:= 'Fabio Gomes';
FIRC.Connect;

FIRC.Join('#TheChannel');

Чтобы понять, что происходит, вам нужно получить вывод некоторых событий, я реализовал их:

FIRC.OnStatus:= @Status;
FIRC.OnNotice:= @Notice;
FIRC.OnMOTD:= @MOTD;

Получите некоторые события, и вы должны выяснить, что сервер говорит вам, не идите методом проб и ошибок.

А по поводу отправки и получения сообщений, кое-что из этого я реализовал некоторое время назад, вот проект, он был сделан с помощью Lazarus.

https://bitbucket.org/fabioxgn/irc/src/b510d73e553d/main.pas

person Fabio Gomes    schedule 22.05.2012

Не вызывайте Join() в событии OnConnected. Это событие просто означает, что базовое соединение сокета установлено. Connect() все еще работает и фактически еще не зашел на сервер IRC, когда инициировано событие OnConnected. Подождите, пока Connect() не выйдет, прежде чем вводить какие-либо команды:

procedure TForm2.FormCreate(Sender: TObject); 
begin 
  IdIRC1.Connect; 
  ShowMessage('Connected to server'); 
  IdIRC1.Join('#TheChannel', 'password'); 
end; 
person Remy Lebeau    schedule 22.05.2012