Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5]      все
 Re: Дженерики: передача процедуры в качестве параметра  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3862
X11
JaDi
Было еще в самом начале 21717308

Менеджер определяет, что за команда и отправляет ее нужному боту:


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

Нет, достаточно договориться о протоколе. Например, что каждая команда должна начинаться со спецсимвола типа \. Или что несколько команд можно задать в виде скобок. Или в видео start -end. Короче, вариантов масса. И всё это реализуется как раз в одном месте -- в менеджере, который должен распарсить сообщение пользователя и дальше передать в обработку (одному, нескольким ботам или сразу пачкой команд).

Эти правила будут действовать для всех (боты будут видеть эти команды как отдельные -- без пользовательских сессий будет проблемно объединить их в одну пачку... короче, тут много вариантов в зависимости от требований).


Или если речь про конкретного бота -- то пускай он для себя и парсит в той нотации, что ему удобнее (собственно, так боты в том же телеграмме и других чатах так и работают) -- у всех свои правила для обработки.

Пример: "бот1 скачай лалала преобразуй в какака сожми отправь ссылку на лулулу"
Команда: "бот1"
Параметры: "скачай лалала.... на лулулу".

На вход бот1 получает список и дальше сам парсит. Например, команда, команда и параметр.
Команда: "скачай", параметр: "лалала"
Команда: "преобразуй в", параметр: "какака"
Команда: "сожми", дефолтный параметр: результат с последней команды
Команда: "отправь ссылку на", параметр: "лулулу"
8 ноя 18, 15:27    [21728306]     Ответить | Цитировать Сообщить модератору
 Re: Дженерики: передача процедуры в качестве параметра  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12484
JaDi
И всё это реализуется как раз в одном месте -- в менеджере, который должен распарсить сообщение пользователя и дальше передать в обработку (одному, нескольким ботам или сразу пачкой команд).


ну я вроде бы так и делаю
8 ноя 18, 15:31    [21728312]     Ответить | Цитировать Сообщить модератору
 Re: Дженерики: передача процедуры в качестве параметра  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12484
JaDi
Пример: "бот1 скачай лалала преобразуй в какака сожми отправь ссылку на лулулу"
Команда: "бот1"
Параметры: "скачай лалала.... на лулулу".


да, я так примерно и делаю
8 ноя 18, 15:34    [21728313]     Ответить | Цитировать Сообщить модератору
 Re: Дженерики: передача процедуры в качестве параметра  [new]
Гирлионайльдо
Member

Откуда:
Сообщений: 286
А точно, баг в Invoke происходит из за Pointer

  MyWide = type PWideChar;


Не сможет вызвать не один тип PInteger, Pointer и прочие.

+
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils, rtti;

type
  MyWide = type PWideChar;

  TMyClass = class
  public
    procedure badCall(const p: MyWide);
  end;

procedure TMyClass.badCall(const p: MyWide);
begin
  Writeln(PWideChar(p));
end;

var
  context: TRttiContext;
  myclass: TMyClass;
  badCall: TRttiMethod;

begin
  try
    myclass := TMyClass.Create;

    badCall := context.GetType(myclass.ClassInfo).GetMethod('badCall');
    badCall.Invoke(myclass, [PWideChar('Hello World')]);

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.


Хочу напомнить, что всё же можно напороться на этот баг, примеру с вызовом функции TStyleManager.SetStyle
9 ноя 18, 01:50    [21728939]     Ответить | Цитировать Сообщить модератору
 Re: Дженерики: передача процедуры в качестве параметра  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1164
Так типы то якобы разные...
Вот так работает...
Не надо совмещать похожие но не одинаковые типы...
TRttiContext.Create.GetType(ClassType).GetMethod('badCall').Invoke(Self, [TValue.From<MyWide>(MyWide(PWideChar('Hello World')))])
9 ноя 18, 11:53    [21729208]     Ответить | Цитировать Сообщить модератору
 Re: Дженерики: передача процедуры в качестве параметра  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12484
Гирлионайльдо, да, я читал твою тему :)
9 ноя 18, 12:59    [21729340]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5]      все
Все форумы / Delphi Ответить