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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 18:08   #1
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
Восклицание ICQ BOT...

Вобщем задумка сделать бот по продаже некого товара. Но застрял на одном моменте. Допустим при отправке произвольного сообщения первый раз, бот отвечает:

Цитата:
Welcome to **********!
Please choose your laguage:
1 - EN
2 - RU
Thank you for using service.
После этого я отправляю 2. Бот присылает:

Цитата:
Выберите категорию:
1 - Поиск/Купить
2 - Служба поддержки
3 - Моя корзина
0 - Выбор языка
А вот тут у меня и тормаза. Я бы мог сверять if Msg = 1 then .... Но ведь получается что сверка будет языка, а не категории т.к. в выборе языка можно тоже отослать один... Как же тогда сделать так сказать ветвление? Что бы при отправке 1 или 2 или 3 или 4 был выбор уже категории, а не языка.
sergeyrulit вне форума Ответить с цитированием
Старый 07.06.2010, 18:10   #2
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию

Ps: используется компонент TICQClient.
sergeyrulit вне форума Ответить с цитированием
Старый 07.06.2010, 18:22   #3
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

К примеру:

Код:
var
  Pos: integer;
begin
  case pos of
  begin
    0:  
      begin
        if Msg = 1 then
        begin
          //
        end else
        begin
          //
        end;
        Inc(Pos);
        Exit;
      end;
    1: 
       begin
         //
         Inc(Pos);
       end;
  end;
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 07.06.2010, 18:53   #4
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию

Спасибо за подсказку.

Появилась новая проблема. Допустим первый UIN посылает боту команду 1, бот увеличивает pos ( Inc(Pos) из кода выше) на 1.

Теперь если стукнет еще один UIN боту, то Pos то будет равен 1, а не 0. Так вот, как сделать так что бы для каждого UINa был уникальный Pos. Или может выносить в отдельный поток каждый UIN?.

Последний раз редактировалось Stilet; 21.06.2010 в 10:48.
sergeyrulit вне форума Ответить с цитированием
Старый 20.06.2010, 18:29   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Заведи массив, например, типа TPoint (или какую-нибудь структуру), X - составляющая будет хранить UIN, Y - уровень. При приходе сообщения, ищем в массиве нужный UIN по X (если не нашли, то добавляем новую запись), затем получаем уровень Y и если уровень = 1, то предложить выбор языка, если уровень = 2, то предложить категорию и т.д.
eoln вне форума Ответить с цитированием
Старый 20.06.2010, 18:46   #6
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию

Спасибо. Задумку понял но с TPoint не работал. Можно пример кода "ищем в массиве нужный UIN по X (если не нашли, то добавляем новую запись), затем получаем уровень Y и если уровень = 1, то предложить выбор языка, если уровень = 2, то предложить категорию и т.д."
sergeyrulit вне форума Ответить с цитированием
Старый 20.06.2010, 19:38   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

типа так...
Код:
type mas = record
 uin, poss: integer;
end;

var mass: array of mas;

procedure messagercv(uin: integer; text: string);
var i,z: integer;
     p: boolean;
begin
 p:= false;
 for i:= low(mass) to high(mass) do
  if uin = mass[i].uin then begin p:= true; z:= i; break end;
 //
 if not p then begin // вводим нового абонента с его нач.параметрами
  setlength(mass, length(mass)+1);
  mass[length(mass)-1].uin:= uin;
  mass[length(mass)-1].poss:= 0;
 end else begin // абонент есть в списке
  //
  mass[z].poss:= mass[z].poss + 1
  //
 end;
 ...
 ну и так далее
end;
смысл ясен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bot fufel HTML и CSS 9 08.03.2011 19:05
ICQ Bot + Simply-Art Софт 8 03.09.2009 07:54
ICQ Bot - защита от флуда snakesoft Работа с сетью в Delphi 4 13.12.2007 04:35