Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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.

Но к сожалению, у меня недостаточно опыта работы со строками.
Не подскажите ли, как добавить это в листбоксы.
Прости меня, я стал ничтожным прахом,
Холодный дождь смешал меня с землёй.
Нет больше боли, нет любви, нет страха.
Лишь только грусть осталась нам с тобой.....
bugmenot

bugmenot (статус: 3-ий класс), 7 марта 2012, 18:06 [#5]:

Это два разных ответа.
http://tools.ietf.org/html/rfc2812#section-5.1
см. RPL_NAMREPLY
виконання програми розпочинається з того самого мiсця, де призупинилося.

Елагин Сергей

Елагин Сергей (статус: Посетитель), 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

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

bugmenot (статус: 3-ий класс), 14 марта 2012, 17:06 [#11]:

Цитата (Ерёмин А.А.):

Мда, как всё прозрачно.

Это же Indy... У них там полно такого. Я бы порекомендовал
* взять последнюю версию из SVN,
* убедиться, что там всё так же криво,
* начать писать собственную реализацию

Цитата (Ерёмин А.А.):

там должен быть признак того, что это не новый список, а продолжение старого…

Что вы такое говорите? Признак конца списка отсылается, все RPL_NAMREPLY до него принадлежат списку. Вон же ссылка на стандарт!
виконання програми розпочинається з того самого мiсця, де призупинилося.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.