[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программирование|Delphi|Pascal » Пишем бота для ICQ » Статусы и список контактов
Статусы и список контактов
Максим Дата: Вторник, 22.02.2011, 16:12 | Сообщение # 1 | Добавить в цитатник [ ? ]
Группа: Прохожие





Здравствуйте Андрей Громов.
Я пишу ICQ клиент , за основу взял Ticqclient_v1_34_1 от Царя. Две
проблемы:

1)Не могу реализовать функци, как в QIP:
-Отправить "Вас добавили" {как сервисное сообщение};
-Удалить себя из его списка контактов;
-Позволить вас добавть.

2)При установке одного из статуса
(S_EATING;S_FFC;S_DEPRESSION;S_ANGRY;S_HOME;S_WORK ) - {как его видят
контакты} мой статус меняется на соответсвующий, но при изменений на
любой другой устанавливается только на S_ONLINE. Так же
экспериментировал с S_QIP...стутусами и флагами к
статусам(S_ALLOWDCO;S_ALLOWDAUTH;S_ALLOWDLIST) то же результат.

Значения из ICQWorks :

//Online statuses
S_ONLINE = $00000000; //Online
S_INVISIBLE = $00000100; //Invisible
S_AWAY = $00000001; //Away
S_NA = $00000005; //N/A
L_S_NA = $00000004; // added by eraser 8.7.03
S_OCCUPIED = $00000011; //Occupied
L_S_OCCUPIED = $00000010; // added by eraser 8.7.03 //занят
S_DND = $00000013; //Do Not Disturb
L_S_DND = $00000012; // added by eraser 8.7.03
S_FFC = $00000020; //Free For Chat
S_OFFLINE = $FFFFFFFF; //The user is offline. / Set status to
offline

//Volkov Ioann got this statuses by OnStatusChange from QIP, works
through ass
S_QIP_HOME = 268455936;
S_QIP_WORK = 268460032;
S_QIP_DEPRESSION = 268451840;
S_QIP_ANGRY = 268447744;
S_QIP_EATING = 268443649;
S_QIP_NA = 268435460;
S_QIP_OCCUPIED = 268435472;
S_QIP_DND = 268435458;
S_QIP_INVISIBLE = 268435712;

//Volkov Ioann got this statuses from:
http://yxu.org.ru/index.php?do=comments&id=1&cat=icq_inf
S_HOME = $0005000;
S_WORK = $00006000;
S_DEPRESSION = $00004000;
S_ANGRY = $00003000;
S_EATING = $00002001;

SF_BIRTH = $00080000; //Birtday

//Flags used with statuses
S_SHOWIP = $00020000; //show ip (for older clients), IP edit
removed in ICQ2000a+
S_WEBAWARE = $00030000; //do not show status from the www
S_ALLOWDCONN = $00000000; //allow direct connection with everyone
//позвольте прямую связь с каждым
S_ALLOWDAUTH = $10000000; //allow direct connection upon
authorization
S_ALLOWDLIST = $20000000; //allow direct connection with users in
contact list

По проблеме 1 если возмжно - пример кода;
По проблеме 2 рекомендаци / ссылки на иформацию.

Пишу на Delph7.
Заранее спасибо.

 

Гром Дата: Вторник, 22.02.2011, 16:14 | Сообщение # 2 | Добавить в цитатник [ ? ]
Всевидящее око
Группа: Владелец сайта
Сообщений: 792
Награды: 12
Статус: Offline
Здавствуй, Максим.

Сразу оговорюсь, что моя фамилия Гром, а не Громом ))).....Ну да ладно

Отвечаю по порядку:

1) -Отправить "Вас добавили" {как сервисное сообщение};
За отправку сервисных сообщений, о том, что вы добавили кого-то в список контактов отвечают две процедуры:

ICQClient1.SendAuthResponse(123456789, True, '');//скажем об успешной авторизации
ICQClient1.SendYouWereAdded(123456789);//отправим ответ об успешном добавлении в список

Вызываешь их в своей процедуре добавления контактов

2) -Удалить себя из его списка контактов;
Видел мельком реализацию этой функции, но не запомнил. Как то просто не обращал внимания. Точно знаю, что это возможно.

3)-Позволить вас добавть.
Когда приходит запрос авторизации, срабатывают события OnAuthRequest и OnAuthResponse. В обоих событиях приходит UIN, который просит авторизацию.

Вот пример:

procedure TForm1.ICQClient1AuthRequest(Sender: TObject; UIN,
Reason: String);
begin
ICQClient1.SSLActivate;
ICQClient1.SSLChangeStart(false);
ICQClient1.SSLAddGroup('Друзья', 0010);
ICQClient1.SSLAddUser(0010, i, uin, 'Grom', '', true, false);
ICQClient1.SendAuthRequest(StrToInt(Uin), 'Авторизируйте меня ;)');//отправим запрос авторизации (если требуется)
ICQClient1.SendAuthResponse(StrToInt(Uin), True, '');//скажеи об успешной авторизации
ICQClient1.SendYouWereAdded(StrToInt(Uin));//отправим ответ об успешном добавлении в список
ICQClient1.SSLChangeEnd;

end;

На счёт статусов честно скажу, у меня тоже не получилось. Работает только "Онлайн", "готов поболтать", "отошёл" и "не беспокоить". Да и в самом QIP'е тоже нет полной совместимости. Рекомендую изучить протокол ICQ и поюзать новые изменения.

По-любому для этого нужно будет лезть в исходник компонента и исправлять пакеты. У самого Волкова Ивана (Царь Иоанн) тоже не получилось разобраться со статусами, хотя он и я является автором исправленного компонента Ticqclient.

Посмотри на примере Царя Иоанна, Прямая ссылка на программу и на моём примере.

Методом проб и ошибок и с изучением протокола сможешь достичь результата.

 

KorniloFF Дата: Вторник, 22.02.2011, 22:02 | Сообщение # 3 | Добавить в цитатник [ ? ]
Даос по жизни :)
Группа: Админ-группа
Сообщений: 131
Награды: 3
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (Гром)
2) -Удалить себя из его списка контактов;
Видел мельком реализацию этой функции, но не запомнил. Как то просто не обращал внимания. Точно знаю, что это возможно.

Не знаю где как, а в QIP Infium это уже реализовано.


Заходи тихо, проси мало, уходи быстро!
 

Гром Дата: Вторник, 22.02.2011, 22:14 | Сообщение # 4 | Добавить в цитатник [ ? ]
Всевидящее око
Группа: Владелец сайта
Сообщений: 792
Награды: 12
Статус: Offline
Quote (KorniloFF)
Не знаю где как, а в QIP Infium это уже реализовано.

Это сделать не трудно. Просто я никогда не видел в этом для себя необходимости. Я писал бота, а для него чем больше контактов - тем лучше
 

Саня Дата: Вторник, 19.06.2012, 18:26 | Сообщение # 5 | Добавить в цитатник [ ? ]
Группа: Прохожие





привет всем! нужно чтоб в проге был забит список номеров к каждому пароль, и так прогу запустили и прога смотрит(чекает) на первый номер в сети он или нет? если в сети идёт дальше на второй, а вот если второй не в сети, берёт уин копирует в едит1 а пароль копирует в едит2
 

Форум » Программирование|Delphi|Pascal » Пишем бота для ICQ » Статусы и список контактов
  • Страница 1 из 1
  • 1
Поиск:

 
Ваш логин: Ваш пароль: