Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.05.2009, 17:59
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию Добавить в контакт лист TICQClient

Делаю бота, почти все закончил... Возникла проблема, когда бота кто-либо добавляет его контакт лист не обновляется и пользователь не добавляется?

Код:
type
  TfrmMain = class(TForm)
    ICQClient: TICQClient;
    mmoEvents: TMemo;
    lstContactList: TListBox;
    tmrWaitToAskCL: TTimer;
    Button1: TButton;
    Button2: TButton;
    edtTimeMsg: TLabeledEdit;
    edtSendMsg: TLabeledEdit;
    TimerMsg: TTimer;
    edtMinTimeMsg: TSpinEdit;
    edtMaxTimeMsg: TSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Button3: TButton;
    procedure AddEvent(EventText : String);
    procedure FormDestroy(Sender: TObject);
    procedure ICQClientLogin(Sender: TObject);
    procedure ICQClientLogOff(Sender: TObject);
    procedure ICQClientConnectionFailed(Sender: TObject);
    procedure ICQClientError(Sender: TObject; ErrorType: TErrorType;
      ErrorMsg: String);
    procedure ICQClientServerListRecv(Sender: TObject;
      SrvContactList: TList);
    procedure tmrWaitToAskCLTimer(Sender: TObject);
    procedure ICQClientMessageRecv(Sender: TObject; Msg, UIN: String);
    procedure ICQClientOfflineMsgRecv(Sender: TObject; DateTime: TDateTime;
      Msg, UIN: String);
    procedure ICQClientAddedYou(Sender: TObject; UIN: String);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
  NeedToConnectAgain, FullReloadContactList: Boolean;
  UIN, MinTime, MaxTime: Integer;
  Password: String;
  Rnd: TStrings;

implementation

{$R *.dfm}

procedure TfrmMain.AddEvent(EventText : String);
begin
 EventText := DateToStr(Date) + ' ' + TimeToStr(Time) + ' >>> ' + EventText;
  if mmoEvents.Text = '' then
    mmoEvents.Text := EventText
  else
    mmoEvents.Lines.Add(EventText);
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
 if ICQClient.LoggedIn then
  ICQClient.LogOff;
end;

procedure TfrmMain.ICQClientLogin(Sender: TObject);
begin
 Button1.Enabled := False;
 Button2.Enabled := True;
 AddEvent('Успешно подключились под номером ' + IntToStr(ICQClient.UIN));
 NeedToConnectAgain := True;
 tmrWaitToAskCL.Enabled := True; // запрос контактов
end;

procedure TfrmMain.ICQClientLogOff(Sender: TObject);
begin
 Button1.Enabled := True;
 Button2.Enabled := False;
 AddEvent('Успешно отключились');
end;

procedure TfrmMain.ICQClientConnectionFailed(Sender: TObject);
begin
 if NeedToConnectAgain then
 begin
  AddEvent('Подключение сорвалось! Переподключаемся...');
  Button1Click(Self);
 end;
end;

procedure TfrmMain.ICQClientError(Sender: TObject; ErrorType: TErrorType;
  ErrorMsg: String);
begin
 AddEvent('Ошибка! ' + ErrorMsg);
end;

procedure TfrmMain.ICQClientServerListRecv(Sender: TObject;
  SrvContactList: TList);
var
 i: LongInt;
 UserInfo: TUINEntry;
begin
  if FullReloadContactList then
  begin
   FullReloadContactList := False;
   lstContactList.Clear;
  end;

  if SrvContactList.Count > 0 then
   for i := 0 to SrvContactList.Count - 1 do
   begin
    UserInfo := PUINEntry(SrvContactList.Items[i])^;
     if UserInfo.CType = 0 then  //если это пользователь (CType = 0), то добавляем в список
      lstContactList.AddItem(IntToStr(UserInfo.UIN), Self);
   end;

 AddEvent('Получен список контактов');
 ICQClient.DestroyUINList(SrvContactList);
end;

procedure TfrmMain.tmrWaitToAskCLTimer(Sender: TObject);
begin
 tmrWaitToAskCL.Enabled := False;
 FullReloadContactList := True;
 ICQClient.RequestContactList;
 AddEvent('Запрошен список контактов');
 ICQClient.RequestOfflineMessages;
 AddEvent('Запрошены оффлайн сообщения');
end;

procedure TfrmMain.ICQClientMessageRecv(Sender: TObject; Msg, UIN: String);
begin
 AddEvent('От (' + UIN + ') принято сообщение: [' + Msg + ']');
end;

procedure TfrmMain.ICQClientOfflineMsgRecv(Sender: TObject;
  DateTime: TDateTime; Msg, UIN: String);
begin
 AddEvent('От (' + UIN + ') принято сообщение в оффлайн в {' + DateTimeToStr(DateTime) + '}: [' + Msg + ']');
end;

procedure TfrmMain.ICQClientAddedYou(Sender: TObject; UIN: String);
begin
 AddEvent('Меня добавил UIN ' + UIN + '.');

end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
 ICQClient.UIN := UIN;
 ICQClient.Password := Password;
  try
   ICQClient.Login(S_ALLOWDAUTH)
  except
   ShowMessage('Невозможно установить соединение!');
  end;
end;

procedure TfrmMain.Button2Click(Sender: TObject);
begin
 NeedToConnectAgain := False;
 ICQClient.LogOff;
end;

Что сделано не так?
Ответить с цитированием
  #2  
Старый 30.05.2009, 18:06
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Даже просто контакт добавить не могу...
Ответить с цитированием
  #3  
Старый 26.06.2009, 03:01
DjFly DjFly вне форума
Прохожий
 
Регистрация: 22.11.2008
Адрес: Ставрополье
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Drozh
Делаю бота, почти все закончил... Возникла проблема, когда бота кто-либо добавляет его контакт лист не обновляется и пользователь не добавляется?

Что сделано не так?
Когда номер твоего бота добавляет какой нибудь пользователь?
И кстати ты написал тут весь код бота? что же он умеет?
Подключаться к сети и читать список контактов?
Смотрю сплошной copy+past из демо примера от царя, CheatICQ.
Ну не в этом суть, пиши нормальным языком, что ты хочешь?

если юзеры не могут добавить тебя - то это одно
если же ты не можешь добавить контакт в КЛ, то это другое
Цитата:
Сообщение от Drozh
Даже просто контакт добавить не могу...
тут же следует вопрос, а ты пробовал это как нибудь сделать?
если пробовал, то почему то в твоём коде этого не видно.

Вот тебе пример из хелпа по TICQClient

Код:
procedure SSLAddUser(GroupID, UserID: Word; UIN, Name, SMSNumber: String; Authorize, UpdateUser: Boolean)
Adds user to server side list.
GroupID - id of the group user belongs to (passed in the second parameter in SSLAddGroup procedure)
UserID - random value (from interval: 1 to 32767) associated with this user
UIN - UIN of the user
Name - Nick name of this user (can be empty)
SMSNumber - localy assigned user's SMS number (can be empty)
Authorize - set to True if you are awaiting authorization from this user
UpdateUser - set to True if you are updating user's info: when you want to change Name or SMSNumber
As answer you will receive OnSSLChangeResponse event. 

Notes: 
If user requires authorization before adding him in your contact list you have to request authorization wait untill OnAuthResponse event is called and if authorization is granted -- add UIN to SSL, otherwise you will receive OnSSLChangeResponse with ErrorCode = ERRSSL_AUTH (User not authorized).

Also, there is another way to add user with authorization required -- set FirstUpload parameter in SSLChangeStart procedure to True. But if you do it often server will stop adding users to SSL. Do it when uploading the whole contact list for the first time.

To delete user you have to use procedure SSLDelUser. Example: 

procedure TMainForm.Button1Click(Sender: TObject);
begin
  ICQClient1.SSLChangeStart(False);
  ICQClient1.SSLAddGroup('My Good Friends', 0010);                                  //Create group 'My Good Friends' with id 0010
  ICQClient1.SSLAddGroup('Me lovers', 0011);                                        //Create group 'Me lovers' with id 0011
  ICQClient1.SSLAddUser(0010, 0020, '4024781', 'Coban', '', False, False);          //Add user Coban with UIN 4024781 in 'My Good Friends' group
  ICQClient1.SSLAddUser(0010, 0021, '98384233', 'Animal Killer', '', False, False); //Add user Animal Killer in 'My Good Friends' group
  ICQClient1.SSLAddUser(0011, 0015, '848382', 'Britney', '', False, False);         //Add user Britney in 'Me lovers' group
  ICQClient1.SSLAddUser(0011, 0015, '848382', 'Britney my Love!', '', False, True); //Rename 'Britney' to 'Britney my Love!' ;)
  ICQClient1.SSLDelUser(0011, 0015, '848382', 'Britney my Love!', '', False);       //Remove user 'Britney my Love!' from 'Me lovers' group
  ICQClient1.SSLChangeEnd;
end;
  
Another example, UIN 398712 uses authorization:

{First stage - send authorization request:}
procedure TMainForm.Button1Click(Sender: TObject);
begin
  ICQClient1.SendAuthRequest(398712, 'Authorize me, please, we met at school!');
end;

{Second stage - add user to SSL:}
procedure TMainForm.ICQClient1AuthResponse(Sender: TObject; UIN: String;
  Granted: Boolean; Reason: String);
begin
  ICQClient1.SSLChangeStart(False);
  if Granted then
    ICQClient1.SSLAddUser(0010, 0025, '398712', '', '', False, False)               //Add user(ID: 0025) to group(ID: 0010) after we've been authorized 
  else
    ICQClient1.SSLAddUser(0010, 0025, '398712', '', '', False, True);               //Add user(ID: 0025) to group(ID: 0010), user refused to authorize us (may be you lie ;), so add him in SSL with authorization awaiting status
  ICQClient1.SSLChangeEnd;
end;

Another example, UIN 398712 uses authorization:

{Add user without authorization.}
procedure TMainForm.ICQClient1AuthResponse(Sender: TObject; UIN: String;
  Granted: Boolean; Reason: String);
begin
  ICQClient1.SSLChangeStart(True);                                                  //Now it's not require to request authorization
  ICQClient1.SSLAddUser(0010, 0025, '398712', '', '', False, False);                //Add user(ID: 0025) to group(ID: 0010)
  ICQClient1.SSLChangeEnd;
end;
Ответить с цитированием
  #4  
Старый 26.06.2009, 12:54
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Цитата:
Когда номер твоего бота добавляет какой нибудь пользователь?
Да, именно это и имел ввиду
Цитата:
И кстати ты написал тут весь код бота? что же он умеет?
Подключаться к сети и читать список контактов?
Нет это не весь код, а только скелет)))
Цитата:
Смотрю сплошной copy+past из демо примера от царя, CheatICQ.
Незнаю ни про какого царя))) Все это мой код, написанный методом тыка, кроме получения списка контактов

Вопрос решил отдельной командой бота, которая просто дописывает в конец массива UIN отправителя)

Твое предложение попробую вечером
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter