| 
| 
 | Вопрос # 5 982/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Пишу ботика для irc сети, используя стандартный компонент IdIrc, но не получается научить его отличать опов от хопов и войсов. Делал так:
 
 If idIRC1.IsOp(idIRC1.Users.Items[i].Nick) then
 ListBox1.Items.Add('@' + idIRC1.Users.Items[i].Nick)
 
 Но эффекта - 0. Жду Вашей помощи. Заранее благодарю
 
|  |   Вопрос задал: Елагин Сергей (статус: Посетитель)Вопрос отправлен: 6 марта 2012, 11:10
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 11; последнее сообщение — 14 марта 2012, 17:06; участников в обсуждении: 3. 
|   | Ерёмин А.А. (статус: *Администратор), 6 марта 2012, 18:20 [#1]:Компонент глючный и многое в нём либо не доделано, либо доделано, но не работает — сам когда-то пытался его использовать и прилично намучался. 
 Уточняющий вопрос: список ников вообще приходит? Без статусов, просто ники хотя бы?
 
 Насколько я помню, я статусы посетителей получал в момент обновления списка юзеров канала в событии OnRawData (название не помню точно, может там просто OnRaw). Нужно ловить код 353.
 |  
|   | Елагин Сергей (статус: Посетитель), 6 марта 2012, 18:55 [#2]:А какой Вы компонент посоветуете? Список то приходит, просто ники, без статусов.
 Прости меня, я стал ничтожным прахом,Холодный дождь смешал меня с землёй.
 Нет больше боли, нет любви, нет страха.
 Лишь только грусть осталась нам с тобой.....
 |  
|   | Ерёмин А.А. (статус: *Администратор), 6 марта 2012, 19:21 [#3]: Цитата (Елагин Сергей): А какой Вы компонент посоветуете? Кроме этого других не использовал, так что посоветовать не могу.
 
 Цитата (Елагин Сергей): Список то приходит, просто ники, без статусов. Попробуйте вывести то, что приходит Raw с кодом 353. Это может помочь.
 |  
|   | Елагин Сергей (статус: Посетитель), 7 марта 2012, 10:50 [#4]:От Сервера приходят сообщения такого типа: NAMES #bot :тобсик @ChanServ
 NAMES #bot :End of /NAMES list.
 
 Но к сожалению, у меня недостаточно опыта работы со строками.
 Не подскажите ли, как добавить это в листбоксы.
 Прости меня, я стал ничтожным прахом,Холодный дождь смешал меня с землёй.
 Нет больше боли, нет любви, нет страха.
 Лишь только грусть осталась нам с тобой.....
 |  
|   | Елагин Сергей (статус: Посетитель), 7 марта 2012, 19:52 [#6]:На сколько я понял, сервер посылает список ников со статусами. Но вот не разобрался где они обрезаются. Я на верном пути, наверное)
 Прости меня, я стал ничтожным прахом,Холодный дождь смешал меня с землёй.
 Нет больше боли, нет любви, нет страха.
 Лишь только грусть осталась нам с тобой.....
 |  
|   | Ерёмин А.А. (статус: *Администратор), 8 марта 2012, 11:13 [#7]: Цитата (Елагин Сергей): На сколько я понял, сервер посылает список ников со статусами. Именно так, это я и использовал.
 
 Вот, нашёл кусочек:
 
 var S: String; Nicks: TStringList;
 
  if Copy(AMessage,1,3) = '353' then
  begin
    S:=AMessage;
    S:=Trim(Copy(S,Pos(':',S)+1,Length(S)));
    Nicks:=TStringList.Create;
    Nicks.Delimiter:=' ';
    Nicks.DelimitedText:=S;
    Nicks.Sort;
    Nicknames.Items:=Nicks;
    Nicks.Free;
  end;Nicknames — TListBox.
 |  
|   | bugmenot (статус: 3-ий класс), 8 марта 2012, 12:33 [#8]:Зачем сортировать? Оно же отсортируется по моду, а не по нику. 
 О, ведь макаронные кодеры абсолютно правы:
 
 function TIdIRC.IsOp(const ANickname: String): Boolean;
begin
  Result := TextStartsWith(ANickname, '@');
end;А с войсом полная чухня: 
 function TIdIRC.IsVoice(const ANickname: String): Boolean;
begin
  Result := TextEndsWith(ANickname, '+');
end; виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Елагин Сергей (статус: Посетитель), 8 марта 2012, 15:26 [#9]:Ерёмин А.А.: У Вас ошибочка маленькая в коде, надо так:
 
  if Copy(ACommand,1,3) = '353' thenВсё хорошо, но нашлась ещё одна проблемка: Если список юзеров слишком большой, то сервер посылает 2 или 3 строчки со списком и добавляются юзеры только из последнего сообщения.
 Прости меня, я стал ничтожным прахом,Холодный дождь смешал меня с землёй.
 Нет больше боли, нет любви, нет страха.
 Лишь только грусть осталась нам с тобой.....
 |  
|   | Ерёмин А.А. (статус: *Администратор), 14 марта 2012, 14:37 [#10]: Цитата (Елагин Сергей): У Вас ошибочка маленькая в коде, надо так: Этому коду несколько лет, так что в Indy названия сто раз могли поменяться.
 
 Цитата (bugmenot): А с войсом полная чухня: Мда, как всё прозрачно.
 
 Цитата (Елагин Сергей): Если список юзеров слишком большой, то сервер посылает 2 или 3 строчки со списком Ну тогда там должен быть признак того, что это не новый список, а продолжение старого…
 |  
|   | bugmenot (статус: 3-ий класс), 14 марта 2012, 17:06 [#11]: Цитата (Ерёмин А.А.): Мда, как всё прозрачно. Это же Indy... У них там полно такого. Я бы порекомендовал
 * взять последнюю версию из SVN,
 * убедиться, что там всё так же криво,
 * начать писать собственную реализацию
 
 
 Цитата (Ерёмин А.А.): там должен быть признак того, что это не новый список, а продолжение старого… Что вы такое говорите? Признак конца списка отсылается, все RPL_NAMREPLY до него принадлежат списку. Вон же ссылка на стандарт!
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |