OLD MaxXBot Forum

Объявление

Внимание! В связи с истечением срока делегирования домена
maxxbot.ru, новый форум теперь находится по адресу:

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » OLD MaxXBot Forum » Команды » Учимся писать плагины


Учимся писать плагины

Сообщений 1 страница 30 из 40

1

От Maxx(а)

Руководство по созданию плагинов для MaxXBot v1.6 (примеры на Delphi).

Скачать (rar – 17 кб)

Пример плагина “Время”, в комплекте исходники на Delphi с подробными комментариями.
Скачать (rar – 27 кб)

Думаю эта тема не станет лишней о том, как нужно писать плагины. У меня есть желание научиться, но я не знаю многого в программировании.
Вот я открыл пример "sample_PLC"

Код:
library sample_PLC;

{$E plc}

uses
  SysUtils;

  
//Название
function PlugName: Pchar;
begin
  result :='Sample_PLC';
end;


//Информация - автор и описание.
function AboutPlug: Pchar;
begin
 result :='буква в логе;© Год Автор;Строка Описания 1;Строка Описания 2;...;';
end;


//Командные слова
function PlWord: Pchar;
begin
  result :='sample1;sample2';
end;


procedure LoadMain;
begin
//Загружаем...
end;


{Выполняем при запросе.
mess - входящее сообщение;
adress - адрес отправителя сообщения
index - номер командного слова, если их несколько}

function PlExecCmd(mess, adress: string; index: integer): pchar;
begin
case index of
0: result:='Ответ на первую команду';
1: result:='Ответ на вторую команду';
else result:='Бывает и так ;)';
end;
end;


//Редирект реультата на адрес
function PlNumber: Pchar;
begin
  result := '';
end;


procedure UnLoadMain;
begin
//Выгружаем...
end;

exports
  PlugName, PlNumber, PlWord, AboutPlug, PlExecCmd, LoadMain, UnLoadMain;
begin

end.

Как мне сделать, например, чтобы сообщение любого человека сохранялось в Sv.txt? Именно сохранялось и заменяло всё.

Отредактировано mag-news (2010-02-09 21:29:44)

0

2

Так он у тебя не целиковый, и зачем выложил, он у всех есть :D

0

3

я бы назвал эту тему "учимся программировать", во флудилке

mag-news написал(а):

Как мне сделать, например, чтобы сообщение любого человека сохранялось в Sv.txt? Именно сохранялось и заменяло всё.

http://www.delphisources.ru/pages/faq/f … e.php.html

+1

4

Спасибо :)

0

5

mag-news написал(а):

Как мне сделать, например, чтобы сообщение любого человека сохранялось в Sv.txt?

вариантов уйма

function PlExecCmd(mess, adress: string; index: integer): pchar;
var
db:tstringlist;
begin
db:=tstringlist.creat;
try

db.text:=mess;//создаем

db.savetofile('имя.txt')

case index of
0: result:='Ответ на первую команду';
1: result:='Ответ на вторую команду';
else result:='Бывает и так ;)';
end;

finally
freeandnil(db); //освобождаем
end

end;

0

6

Вот у меня получилось так, верно ли?

Код:
library sample_PLC;

{$E plc}

uses
  SysUtils;

  
//Название
function PlugName: Pchar;
begin
  result :='Sample_PLC';
end;


//Информация - автор и описание.
function AboutPlug: Pchar;
begin
 result :='буква в логе;© Год Автор;Строка Описания 1;Строка Описания 2;...;';
end;


//Командные слова
function PlWord: Pchar;
begin
  result :='save';
end;


procedure LoadMain;
begin
  // Попытка открыть Test.txt файл для записи
  AssignFile(myFile, 'Test.txt');
  ReWrite(myFile);
// Запись нескольких известных слов в этот файл
  WriteLn(myFile, 'mess');
end;


{Выполняем при запросе.
mess - входящее сообщение;
adress - адрес отправителя сообщения
index - номер командного слова, если их несколько}

function PlExecCmd(mess, adress: string; index: integer): pchar;
begin
case index of
0: result:='Ответ на первую команду';
else result:='Ошибка!';
end;
end;


//Редирект реультата на адрес
function PlNumber: Pchar;
begin
  result := '';
end;


procedure UnLoadMain;
begin
   CloseFile(myFile);
//Выгружаем...
end;

exports
  PlugName, PlNumber, PlWord, AboutPlug, PlExecCmd, LoadMain, UnLoadMain;
begin

end.

0

7

от части верно, но одно но, ты каждый раз будешь получать один и тот же файл с одной и тойже записанной в него строкой mess
пиши мне если надо будет в аску отвечу там номер найдешь если надо будет

...а где ты написал var myFile:textfile; хм

Отредактировано DDM (2010-02-09 22:21:22)

0

8

DDM написал(а):

если надо будет в аску отвечу там

ок

И у меня не компилирует, выделяет строку:   AssignFile(myFile, 'Test.txt');

0

9

uses
  SysUtils;

var
myFile:textfile;

пропиши так

0

10

сделал, теперь выделяет: uses

0

11

DDM
вот что у меня вышло, наверно, я не так сделал

Код:
library Save;

{$E plc}

uses
  SysUtils;

//Название
function PlugName: Pchar;
begin
  result :='Sample_PLC';
end;


//Информация - автор и описание.
function AboutPlug: Pchar;
begin
 result :='буква в логе;© Год Автор;Строка Описания 1;Строка Описания 2;...;';
end;


//Командные слова
function PlWord: Pchar;
begin
  result :='save';
end;


procedure LoadMain;
begin
  // Попытка открыть Test.txt файл для записи
var
myFile:textfile;
// Запись нескольких известных слов в этот файл
  WriteLn(myFile, 'mess');
end;


{Выполняем при запросе.
mess - входящее сообщение;
adress - адрес отправителя сообщения
index - номер командного слова, если их несколько}

function PlExecCmd(mess, adress: string; index: integer): pchar;
begin
case index of
0: result:='Сохранено!';
else result:='Ошибка!';
end;
end;


//Редирект реультата на адрес
function PlNumber: Pchar;
begin
  result := '';
end;


procedure UnLoadMain;
begin
   CloseFile(myFile);
//Выгружаем...
end;

exports
  PlugName, PlNumber, PlWord, AboutPlug, PlExecCmd, LoadMain, UnLoadMain;
begin

end.

0

12

ура, вроде так:

Код:
library Save;

{$E plc}

uses
  SysUtils;

//Название
function PlugName: Pchar;
begin
  result :='Sample_PLC';
end;


//Информация - автор и описание.
function AboutPlug: Pchar;
begin
 result :='буква в логе;© Год Автор;Строка Описания 1;Строка Описания 2;...;';
end;


//Командные слова
function PlWord: Pchar;
begin
  result :='save';
end;

var
myFile:textfile;

procedure LoadMain;
begin
  // Попытка открыть Test.txt файл для записи
  AssignFile(myFile, 'Test.txt');
  ReWrite(myFile);
// Запись нескольких известных слов в этот файл
  WriteLn(myFile, 'mess');
end;


{Выполняем при запросе.
mess - входящее сообщение;
adress - адрес отправителя сообщения
index - номер командного слова, если их несколько}

function PlExecCmd(mess, adress: string; index: integer): pchar;
begin
case index of
0: result:='Сохранено!';
else result:='Ошибка!';
end;
end;


//Редирект реультата на адрес
function PlNumber: Pchar;
begin
  result := '';
end;


procedure UnLoadMain;
begin
   CloseFile(myFile);
//Выгружаем...
end;

exports
  PlugName, PlNumber, PlWord, AboutPlug, PlExecCmd, LoadMain, UnLoadMain;
begin

end.

0

13

Плагин вроде и работает, но где файл test.txt?

0

14

mag-news написал(а):

ура, вроде так:

DDM написал(а):

но одно но, ты каждый раз будешь получать один и тот же файл с одной и тойже записанной в него строкой mess

в PlExecCmd добавь

Код:
ReWrite(myFile);
WriteLn(myFile, mess);

0

15

Maxx написал(а):

в PlExecCmd добавь

сделал, но где находится Test.txt?

0

16

mag-news написал(а):

но где файл test.txt?

mag-news написал(а):

AssignFile(myFile, 'Test.txt');

рядом с ехешничком хост приложения (т.е. в корне папки с программой)

0

17

Maxx написал(а):

рядом с ехешничком хост приложения

нашёл, но в него ничего не сохраняется

0

18

Когда освобожусь и когда скачаешь джаббер ( :D ) всё подробно-преподробно объясню :)

0

19

AndreyMal написал(а):

скачаешь джаббер

у меня есть, нужно только пароль восстановить

+1

20

Люди, помогите пожалуйста! Почему в файл ничего не сохраняется? Там всегда пусто, даже если бот отвечает, что сохранено

0

21

procedure LoadMain ... AssignFile() А не рано ли?  в лоаде?

0

22

AndreyMal
я не знаю, как нужно?

0

23

Вдруг ты во время рыботы бота захочешь прочитать файл, а он получится у тебя занят ботом :) Дадо полюбому по другому: принял команду - открыл файл, записал, закрыл и забыл :) А то недоступен будет

0

24

То есть AssignFile и CloseFile (если именно они - целикового кода не видел) нада перенести соответственно перед ReWrite и после writeln :) (ReWrite с AssignFile забыл, тоже переместить)

Отредактировано AndreyMal (2010-02-10 00:18:49)

+1

25

AndreyMal написал(а):

А то недоступен будет

это верно, Блокнот пишет файл занят

0

26

AndreyMal
спасибо! Всё заработало!

Код:
library save;

{$E plc}

uses
  SysUtils;

//Название
function PlugName: Pchar;
begin
  result :='Sample_PLC';
end;


//Информация - автор и описание.
function AboutPlug: Pchar;
begin
 result :='буква в логе;© Год Автор;Строка Описания 1;Строка Описания 2;...;';
end;


//Командные слова
function PlWord: Pchar;
begin
  result :='save';
end;

var
myFile:textfile;

procedure LoadMain;
begin
  // Попытка открыть Test.txt файл для записи
  AssignFile(myFile, 'Test.txt');
  ReWrite(myFile);
// Запись нескольких известных слов в этот файл
  WriteLn(myFile, 'mess');
end;


{Выполняем при запросе.
mess - входящее сообщение;
adress - адрес отправителя сообщения
index - номер командного слова, если их несколько}

function PlExecCmd(mess, adress: string; index: integer): pchar;
begin
  ReWrite(myFile);
WriteLn(myFile, mess);
   CloseFile(myFile);
case index of
0: result:='Сохранено!';
else result:='Ошибка!';
end;
end;


//Редирект реультата на адрес
function PlNumber: Pchar;
begin
  result := '579807770';
end;


procedure UnLoadMain;
begin
   CloseFile(myFile);
//Выгружаем...
end;

exports
  PlugName, PlNumber, PlWord, AboutPlug, PlExecCmd, LoadMain, UnLoadMain;
begin

end.

0

27

:) (я ушёл спать)

0

28


1) Как правильно задать путь сохранения текстового файла? Например, я хочу сюда: Base\Save.txt
2) Как сделать настройку? Чтобы в боте в настройке плагина можно было изменить командное слово и название файла?

Отредактировано mag-news (2010-02-10 00:36:44)

0

29

mag-news написал(а):

1) Как правильно задать путь сохранения текстового файла? Например, я хочу сюда: Base\Save.txt

Необходимо из самсого плагина узнать путь до него)))) и соответственно это будет то что тебе нужно, скачай DelphiWord или DRKB, там очень много разобрано таких простых типычных вопросов;)

mag-news написал(а):

2) Как сделать настройку? Чтобы в боте в настройке плагина можно было изменить командное слово и название файла?

Я не думаю что стоит так сразу прыгать за звездами, за два дня ты не наберешь самого при самого минимума что позволяло бы тебе достаточно критично мыслить и реализоввывать идеи, ну а так подскажу что тебе надо прочитать про inifiles

+1

30

DDM
спасибо :)

0


Вы здесь » OLD MaxXBot Forum » Команды » Учимся писать плагины