Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2009, 13:34   #1
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию ICQ бот и ini файлы

Пишу ICQ бота нужно зделать так чтобы в ini файле пишеш например Как дела?=Хорошо первая строчка Как дела? это вопрос после = Все отлично это то что должен ответить бот как это реализовать можно код пожалуйста!
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 03.11.2009, 13:44   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а почему именно ini то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.11.2009, 13:49   #3
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Да мне без разницы что лиж-бы работало.Пожалуйста помогите с меня +
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 03.11.2009, 14:30   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Давно где-то видел такое:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    GroupBox2: TGroupBox;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
TKeyWord = record
key,answer : string;
end;

const AnswersCount  = 310;

var
  GeneratedFraza : string='';
  Answers : array [1..AnswersCount] of TKeyWord;
  Dialog : array [1..20] of string;
  Hi : array [1..7] of string;
  Form1: TForm1;

implementation

{$R *.dfm}

function FindAnswer(text : string) : boolean;
var
i,count : integer;
ans : array [0..10] of integer;
begin
 count:=0;
 for i:=1 to AnswersCount do
 begin
 if Answers[i].key=text then
                        begin
                        ans[count]:=i;
                        inc(count);
                        end;
 end;
 if count<>0 then
 begin
 randomize;
 result:=true;
 GeneratedFraza:='Компьютер: '+Answers[ans[random(count)]].answer;
 end else result:=false;
end;

procedure LetAnswer(text : string);
var
i,found : integer;
slovo : string;
probel : boolean;
begin
slovo :='';
probel:=false;
found:=0;
 for i:=1 to length(text) do
   begin

   if text[i]=' ' then  probel:=true;
   if not probel then begin
   slovo:=slovo+text[i];
   if findanswer(lowercase(slovo)) then inc(found);
   end else begin slovo:=''; probel:=false; end;
   end;

if found=0 then
 form1.Memo1.Lines.Add('Компьютер: '+dialog[random(20)+1]) else
 form1.Memo1.Lines.Add(GeneratedFraza);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
s : Tstringlist;
i,a : integer;
f : string;
done : boolean;
begin

 if not fileexists(ExtractFilepath(Application.ExeName)+'Main') then
 begin
 Showmessage('Файл "Main" не найден.');
 Close;
 end;

s:=Tstringlist.Create;
s.LoadFromFile(ExtractFilepath(Application.ExeName)+'Main');

 for i:=1 to AnswersCount do
 begin
 f:=lowercase(s.Strings[i-1]);
 answers[i].key:='';
 answers[i].answer:=s.ValueFromIndex[i-1];
 done:=false;
      for a:=1 to length(f) do
        begin
          if f[a]='=' then done:=true;
          if not done then Answers[i].key:=Answers[i].key+f[a];
        end;
 end;

for i:=1 to 20 do dialog[i]:=s.ValueFromIndex[i+AnswersCount];
for i:=1 to 7 do  hi[i]:=s.ValueFromIndex[i+AnswersCount+21];
randomize;
memo1.Lines.Add('Компьютер: '+hi[1+random(7)]);

end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (key=vk_return) and (Edit1.Text<>'') then
  begin
  Memo1.Lines.Add('Пользователь: '+Edit1.Text);
  LetAnswer(lowercase(Edit1.Text));
  Edit1.Text:='';
  end;
end;

end.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 03.11.2009, 14:33   #5
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Файл : "Main" так приложу
Вложения
Тип файла: rar Main.rar (4.7 Кб, 17 просмотров)
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 03.11.2009, 14:41   #6
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Лампочка

Цитата:
Сообщение от Alex2009 Посмотреть сообщение
Пишу ICQ бота нужно зделать так чтобы в ini файле пишеш например Как дела?=Хорошо первая строчка Как дела? это вопрос после = Все отлично это то что должен ответить бот как это реализовать можно код пожалуйста!
А в чём проблема? Создай 2 TStringList'а загрузи в первый значения до "=" а во 2рой после "=" и проверяй что тебе пишут по первому TStringList. Если совпадает то отвечай строчкой из 2рого TStringList с таким-же номером.
Lime вне форума Ответить с цитированием
Старый 03.11.2009, 14:46   #7
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Не могли вы обьяснить код ато я непонимаю мне нужно так с Memo считываем что нам пишут и сверяем с файлом main если есть пишем ответ!!!
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 03.11.2009, 14:59   #8
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Вот код всавьте туда то что нужно для main
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ICQClient, ExtCtrls, ICQDb;

type
  TForm1 = class(TForm)

    Edit1: TEdit;
    Edit2: TEdit;
    Label3: TLabel;
    Memo1: TMemo;
    Timer1: TTimer;
    Timer2: TTimer;
    ICQDb1: TICQDb;
    ICQClient1: TICQClient;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ICQClient1Login(Sender: TObject);
    procedure ICQClient1ConnectionFailed(Sender: TObject);
    procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  rec:boolean;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ICQClient1.SendKeepAlive;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.MaxLength:=9;
Edit2.MaxLength:=8;

Memo1.ReadOnly:=True;
Memo1.ScrollBars:=ssVertical;
Memo1.Lines.Clear; //удалить строку Memo1
Timer1.Enabled:=False;
Timer1.Interval:=110000;

end;

procedure TForm1.ICQClient1Login(Sender: TObject);
begin
if ICQClient1.LoggedIn then //если соединение установлено
begin
Memo1.Lines.Add('Соединение с сервером установлено.'); //Добавляю в Memo1 строку о текущем положении
Timer1.Enabled := True; //Включаю таймер
end;
end;

procedure TForm1.ICQClient1ConnectionFailed(Sender: TObject);
begin
if not rec then Exit; //Если мы нажали на кнопку "Выход", то не нужно пытаться соединиться
Memo1.Lines.Add('Не удалось соединиться с сервером.');
if MessageDlg('Попытаться соединиться еще раз?',mtInformation,[mbOk,mbCancel],0) = mrOk
then
begin
ICQClient1.Login();
Memo1.Lines.Add('Соединение с сервером ICQ...');
end;
end;

procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
icq: cardinal;
begin
icq := StrToInt(UIN);
Memo1.Lines.Add(UIN + ': ' + Msg); //Добавляем полученное сообщение в Memo1
if Msg='Привет'  then
ICQClient1.SendMessage(icq,'Привет')
else
begin
if msg='привет' then
ICQClient1.SendMessage(icq,'Извините, мне не о чем с Вами поговорить... ');
end;


procedure TForm1.Image1Click(Sender: TObject);
begin
if
  (Edit1.Text = '') or (Edit2.Text = '') or //пустые поля
  (Length(Edit1.Text) < 4) or (Length(Edit2.Text) < 3) //Если UIN меньше 5 символов и пароль меньше 3
then
 begin
  MessageDlg('Не правельно заполнены поля!',mtInformation,[mbOk],0); //Выводим сообщение об ошибке
  Exit
end
else
 begin
  Label3.Caption:='Приветствую тебя ' + Edit1.Text;
end;
rec := True; //Удачное соединение
ICQClient1.UIN := StrToInt(Edit1.Text); //забираем UIN
ICQClient1.Password := Edit2.Text; //забираем пароль
ICQClient1.Login(); //Соединяемся с сервером
Memo1.Lines.Add('Соединение с сервером ICQ...');
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
if not ICQCLient1.LoggedIn then
MessageDlg('Соединение с сервером не установлено!',mtInformation,[mbOk],0)
else
begin
rec := False;
ICQCLient1.Disconnect;
Memo1.Lines.Add('Соединение с сервером оборвано.');
Timer1.Enabled := False;
end;
end;

end.
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 03.11.2009, 15:01   #9
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код:
type
TKeyWord = record
key,answer : string;
end;

const AnswersCount  = 310;

var
  GeneratedFraza : string='';
  Answers : array [1..AnswersCount] of TKeyWord;
  Dialog : array [1..20] of string;
  Hi : array [1..7] of string;
...
...
...
function FindAnswer(text : string) : boolean;
var
i,count : integer;
ans : array [0..10] of integer;
begin
 count:=0;
 for i:=1 to AnswersCount do
 begin
 if Answers[i].key=text then
                        begin
                        ans[count]:=i;
                        inc(count);
                        end;
 end;
 if count<>0 then
 begin
 randomize;
 result:=true;
 GeneratedFraza:=Answers[ans[random(count)]].answer;
 end else result:=false;
end;

function LetAnswer(text : string):string;
var
i,found : integer;
slovo : string;
probel : boolean;
begin
slovo :='';
probel:=false;
found:=0;
 for i:=1 to length(text) do
   begin

   if text[i]=' ' then  probel:=true;
   if not probel then begin
   slovo:=slovo+text[i];
   if findanswer(lowercase(slovo)) then inc(found);
   end else begin slovo:=''; probel:=false; end;
   end;

if found=0 then
 result:=dialog[random(20)+1] else
 result:=GeneratedFraza;
end;


procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
icq: cardinal;
begin
icq := StrToInt(UIN);
Memo1.Lines.Add(UIN + ': ' + Msg); //Добавляем полученное сообщение в Memo1
ICQClient1.SendMessage(icq,LetAnswer(lowercase(Msg)))
end;

...
...
...
Вот подправил немного.
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 03.11.2009 в 15:07.
russian-stalker вне форума Ответить с цитированием
Старый 03.11.2009, 15:09   #10
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Блин как мене добавить + Lime добавил нормально а rusian-stalker пишет что вы не можете добавить отзыв этому пользователю.
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ICQ бот Pavelok Общие вопросы Delphi 17 10.04.2009 18:51
ICQ бот UnD)eaD)Snake Фриланс 1 12.02.2009 21:02
icq бот на Delphi goodwin777 Работа с сетью в Delphi 4 20.06.2008 19:58
Icq бот PadonnoK Работа с сетью в Delphi 11 29.11.2007 12:42