|
Вопрос # 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сця, де призупинилося.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|