Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
kuks
Подскажите, пытаюсь выполнить скрипт по создании личного списка контактов
и постоянно сообщает
[14:05:10] (RunError "contacts"): Время выполнения скрипта: 5318 мс
[14:05:10] (RunError "contacts"): Script timed out
время выполнения скрипта всегда около 5к мс, можно как то увеличить время выполнения скрипта ?
пробовал и с галкой и без на пункте "отключать скрипты из-за превышения времени выполнения"
Аватара пользователя
Алексей Пикуров
Покажите текст своего скрипта, пожалуйста. Переношу тему в другой раздел.
Аватара пользователя
kuks
Код: Выделить всё
const
  GROUPS = 'RiverPark';
var
  sGroups, sCurrentGroup, sUINS, sBackup, s: string;
  iUINOwner, iUIN: integer;

begin
      sGroups := GROUPS;
      sUINS   := mGetUsersListInGroupsByNames(GROUPS); // получаем список пользователей группы
      sBackup := sUINS; // делаем резервную копию для цикла ниже
     
      while length(sUINS) > 0 do begin // перебираем пользователей группы
          iUINOwner := StrToInt(Fetch(sUINS, ','));
          mPersonalContactsClear(iUINOwner); // удаляем личный список контактов человека
          s := sBackup;
          mPersonalContactsAddGroup(iUINOwner, sGroups);

          while length(s) > 0 do begin // формируем ему новый личный список контактов
              iUIN := StrToInt(Fetch(s, ','));
             
                // если UIN человека не равен нашему собственному - добавляем его в список,
                // название группы - название компании, в которой работает человек
                // mSendPrivateMessage(28, 25, IntToStr(iUINOwner) + ' > ' + IntToStr(iUIN), 1);
                if (iUIN > 1) AND (iUINOwner <> iUIN) then mPersonalContactsAddUser(iUINOwner, iUIN, sGroups);
          end;
          // mSendPrivateMessage(28, 25, IntToStr(iUINOwner) + ' ! ', 1);

          // если пользователь онлайн - обновляем его личный список контактов
          if mIsUINOnline(iUINOwner) then mPersonalContactsRefresh(iUINOwner);
      end;
end.
Аватара пользователя
Алексей Пикуров
Сколько пользователей в группе "RiverPark" ?

P.S. Используйте тег code при вставке исходников в форум.
Аватара пользователя
kuks
92
PS: Ok
Аватара пользователя
Алексей Пикуров
Код будет очень долго выполняться. 92 * 92 = 8 464 раз только цикл будет основной крутиться, а там обращения к базе данных и рассылки пользователям.

Зачем такая дичь? Почему не воспользоваться общим списком контактов?
Аватара пользователя
Алексей Пикуров
Есть функция SetScriptTimeOut, можете с ней поиграться.
Аватара пользователя
kuks
Мы перешли с другого чата, и там была возможность просто отключить группы, чтобы просто всем списком пользователей, вот решили в личный список контактов засунуть просто список.
Аватара пользователя
Алексей Пикуров
Не понял вашего ответа.

Почему вы не хотите использовать один общий список контактов вместо 92 личных, которые абсолютно одинаковы ?
Аватара пользователя
kuks
у меня список контактов разбит по подразделениям и в них пользователи, а хочется чтобы было два варианта и просто список и группированный по подразделениям
Аватара пользователя
Алексей Пикуров
Я не очень понимаю, зачем :) Поясните, возможно, я предложу какое-то удобное для вас решение. Я понимаю, что вы привыкли к какому-то другому продукту с другой идеологией.

Поясните вашу задачу и что вы хотите получить в итоге. Формировать личные списки контактов сплошной простынёй, дублируя общий список контактов, по меньшей мере, странно.
Аватара пользователя
kuks
все просто, кому-то удобно чтобы по группам было видно, кому-то общим списком
Аватара пользователя
Алексей Пикуров
Фильтр контактов же есть. Неужели удобно глазами пробегать 92 позиции?

Да и всё равно основное общение будет не из контактов, а из диалогов.

Но хозяин — барин :) Лупите огромные таймауты или выполняйте скрипты по частям, по 10-20 пользователей, что у вас быстрее отработает.
Аватара пользователя
Алексей Пикуров
Я добавлю на будущее специальную функцию, аналогичную mPersonalContactsAddUser, чтобы можно было добавлять в список не по одному юзеру, а сразу блоком, это сильно сэкономит время работы с базой данных.

В вашем конкретном случае вместо 92 итераций будет одна.
Аватара пользователя
Алексей Пикуров
Сделали функцию mPersonalContactsAddUsers.

Обновитесь на 8.5.4, пожалуйста.
Аватара пользователя
Алексей Пикуров
Обновились, сделали скрипт с новой функцией?