|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Добавить в контакт лист 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
|
|||
|
|||
Даже просто контакт добавить не могу...
|
#3
|
|||
|
|||
Цитата:
И кстати ты написал тут весь код бота? что же он умеет? Подключаться к сети и читать список контактов? Смотрю сплошной copy+past из демо примера от царя, CheatICQ. Ну не в этом суть, пиши нормальным языком, что ты хочешь? если юзеры не могут добавить тебя - то это одно если же ты не можешь добавить контакт в КЛ, то это другое Цитата:
если пробовал, то почему то в твоём коде этого не видно. Вот тебе пример из хелпа по 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
|
|||
|
|||
Цитата:
Цитата:
Цитата:
Вопрос решил отдельной командой бота, которая просто дописывает в конец массива UIN отправителя) Твое предложение попробую вечером |