Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
fmuser
Здравствуйте, скажите пожалуйста как модифицировать Ваш скрипт для работы только по Пятницам и каждый час (скажем с 10 и до 15-00)?


Скрипт для отправки оповещения из текстовых файлов для групп людей в MyChat
script-broadcast-to-group-from-file.png (82.9 КБ) Просмотров: 3078

Текст скрипта:
Код: Выделить всё
// ---------------------------------------
// Script created by Алексей Пикуров ([email protected])
// отправка оповещений по времени из текстовых файлов
// для указанных групп людей
// 15.09.2018 14:13:00
// ---------------------------------------

const
  sGroupsList = 'Special'; // группы пользователей, через запятую, без пробелов
  sPath = 'c:\messages\broadcast\'; // путь на диске сервера, откуда брать файлы для оповещений
var
  sFullName, sFileName, sMsg, sUsersList, sCurrentGroup, sGroupsOriginal: string;
  iDay: integer;
  bFlag: boolean;
begin
  iDay := DayOfTheWeek(Now);
  sFileName := FormatDatetime('hh.nn', Now) + '.txt'; // например, 17.45.txt
 
  sGroupsOriginal := sGroupsList;
 
    while length(sGroupsOriginal) > 0 do begin
      sCurrentGroup := GetNextSt(sGroupsOriginal, ',');

      sFullName := sPath + sFileName;
     
        if FileExists(sFullName) then
          if iDay < 6 then begin // выполняем скрипт только по рабочим дням
            sMsg := Trim(LoadTextFromFile(sFullName, 0));
     
            if length(sMsg) > 0 then begin
              sUsersList := mGetUsersListInGroupsByNames(sCurrentGroup);
         
                if length(sUsersList) > 0 then
                  mSendBroadcast(sMsg, sUsersList, EndOfTheDay(Now), 1);
            end; 
          end;
    end;
end.
Аватара пользователя
Алексей Пикуров
Добрый день.

Вставляйте пожалуйста теги для кода, чтобы текст скрипта был отформатирован. Я отредактировал ваше сообщение.
скажите пожалуйста как модифицировать Ваш скрипт для работы только по Пятницам и каждый час (скажем с 10 и до 15-00)?

Изменить код условий на тот, что вам нужен. Что-то типа этого:
Код: Выделить всё
if iDay = 5 then begin

+ поставить выполнение скрипта на событие каждый час, и контролировать время запуска в условии, чтобы попасть в нужный вам временной диапазон. Если вы не владеете минимальными знаниями Pascal и не знаете, как именно — можете заказать написание скрипта у нас.
Аватара пользователя
fmuser
Спасибо!
Аватара пользователя
fmuser
Здравствуйте,

апну свою же тему

пытаюсь сделать запуск скрипта по расписанию на группу

Вопросы - группа может обзываться на русском или обязательно на латинском? Как вставить ссылку в сообщение ведущую в локальную папку вида \\192.168.0.1\Obmen? - чат пытается открыть в веб.

И, наконец, сам скрипт

// Script created by Алексей Пикуров ([email protected])
// отправка оповещений по времени из текстовых файлов
// для указанных групп людей
// 15.09.2018 14:13:00
// ---------------------------------------

const
sGroupsList = 'ADMIN'; // группы пользователей, через запятую, без пробелов
sPath = 'c:\messages\broadcast\'; // путь на диске сервера, откуда брать файлы для оповещений
var
sFullName, sFileName, sMsg, sUsersList, sCurrentGroup, sGroupsOriginal: string;
iDay: integer;
bFlag: boolean;
begin
iDay := DayOfTheWeek(Now);
sFileName :='11.30.txt'; // например, 17.45.txt

sGroupsOriginal := sGroupsList;

while length(sGroupsOriginal) > 0 do begin
sCurrentGroup := GetNextSt(sGroupsOriginal, ',');

sFullName := sPath + sFileName;

if FileExists(sFullName) then
if iDay = 5 then begin // выполняем скрипт только по рабочим дням
sMsg := Trim(LoadTextFromFile(sFullName, 0));

if length(sMsg) > 0 then begin
sUsersList := mGetUsersListInGroupsByNames(sCurrentGroup);

if length(sUsersList) > 0 then
mSendBroadcast(sMsg, sUsersList, EndOfTheDay(Now), 1);
end;
end;
end;
end.


- сам текстовой файлик 11.30 положил в папку c:\messages\broadcast\
- куда помещать сам скрипт на запуск? в какой-то конкретный каталог?
- при выполнение проверки\выполнить скрипт отрабатывает, но только при проверке, а так, по расписанию (Пятница, в 11.30) - тишина
Аватара пользователя
Алексей Пикуров
Группы могут называться как угодно, главное, чтобы имя было уникальным. Справка. Вы их создаёте в админке, если что-то не так — сервер про это скажет.
Как вставить ссылку в сообщение ведущую в локальную папку вида \\192.168.0.1\Obmen? - чат пытается открыть в веб

В оповещении эта ссылка показывается обычным текстом. О каком сообщении идёт речь?
if iDay = 5 then begin // выполняем скрипт только по рабочим дням

Комментарий неверен. Согласно условию, скрипт будет выполняться только по пятницам.
Скрипт нужно разместить в раздел "Timed scripts", "Every day", судя по логике скрипта, чтобы он выполнялся один раз в день.

Но в целом, исходник этого скрипта для вашей задачи, как мне кажется, кривоват. Что конкретно вы хотите сделать?
Аватара пользователя
fmuser
Здравствуйте Алексей,

итак, вот скриншот (первый скрин)настроек скрипта - он выполняется как надо в 15-00, при нажатии кнопки выполнить. Появляется уведомление для группы ADMIN (в которой я один тестовый пользователь).
В папке c:\messages\broadcast\ - лежит текстовой файлик 15-00 с текстом внутри.
Но по расписанию ничего не происходит. Может я что-то недокрутил?

Внутри фалйика 15-00 текст:
УВАЖАЕМЫЕ КОЛЛЕГИ, ПОЖАЛУЙСТА, НЕ ЗАБУДЬТЕ ЗАПОЛНИТЬ ТАБЛИЦУ "ОБЕДЫ" ДО 14-00.
\\192.168.30.6\obed
Оповещение будет появляться в Пятницу автоматически (один раз) в 11-00.

Если нажать мышью на эту строчку в появляющемся тестовом уведомлении, то открывается браузер с вот таким содержимым (второй скин)

Если сделать вот такую строчку (конкретно до файла)
"\\192.168.30.6\obed\ОБЕДЫ МИЛТИ.xls" , то просто пустая вебстраница (третий скрин).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Я писал выше:
Скрипт нужно разместить в раздел "Timed scripts", "Every day"

Не "Every week", а "Every day".
Остальное проверю.
Аватара пользователя
fmuser
Алексей, скрипт должен раз в неделю (например по средам в 3 часа дня выдать группе, например ADMIN (для теста) уведомление про заполнить таблицу Обед.
При проверке никаких ошибок не выдает с срабатывает четко. Но по расписанию просто тишина. Ничего не происходит.
Новые скрины.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Но по расписанию просто тишина. Ничего не происходит.

Как вы это определили? В протоколах есть информация о выполненных скриптах, вы смотрели протоколы?

Плюс вы сами можете запротоколировать работу скрипта, в файл, например. Чтобы он сработал, надо, чтобы сервер непрерывно отработал сутки, время в этих событиях считается не по системному времени, а по аптайму.

Поэтому надёжнее переформулировать условие и написать, скажем, запуск каждый час.
Аватара пользователя
fmuser
Алексей, время теряем.
Что значит как я это определил ?
При нажатии кнопки - Проверить и Выполнить чат рапортует об успешном выполнении и даже всё отрабатывает, но при постановке в расписание ничего не происходит (визуально естественно), в логи не смотрел, но посмотрю раз просите.
Но, может, Вам самому попробовать запустить этот скрипт у себя и посмотреть его отработку?

// ---------------------------------------
// Script created by Алексей Пикуров ([email protected])
// отправка оповещений по времени из текстовых файлов
// для указанных групп людей
// 15.09.2018 14:13:00
// ---------------------------------------

const
sGroupsList = 'ADMIN'; // группы пользователей, через запятую, без пробелов
sPath = 'c:\messages\broadcast\'; // путь на диске сервера, откуда брать файлы для оповещений
var
sFullName, sFileName, sMsg, sUsersList, sCurrentGroup, sGroupsOriginal: string;
iDay: integer;
bFlag: boolean;
begin
iDay := DayOfTheWeek(Now);
sFileName :='15.00.txt'; // например, 17.45.txt

sGroupsOriginal := sGroupsList;

while length(sGroupsOriginal) > 0 do begin
sCurrentGroup := GetNextSt(sGroupsOriginal, ',');

sFullName := sPath + sFileName;

if FileExists(sFullName) then
if iDay = 5 then begin // выполняем скрипт только по рабочим дням
sMsg := Trim(LoadTextFromFile(sFullName, 0));

if length(sMsg) > 0 then begin
sUsersList := mGetUsersListInGroupsByNames(sCurrentGroup);

if length(sUsersList) > 0 then
mSendBroadcast(sMsg, sUsersList, EndOfTheDay(Now), 1);
end;
end;
end;
end.
Аватара пользователя
fmuser
Где здесь логи смотреть - пишет, что 0
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Если в логах записи нету, значит, прошло меньше суток с момента, как вы включили скрипт.
Но, может, Вам самому попробовать запустить этот скрипт у себя и посмотреть его отработку?

Это нужно вам, а не мне. Более того, вы не делаете то, что я вам пишу, что толку?
Как вы это определили? В протоколах есть информация о выполненных скриптах, вы смотрели протоколы?

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

Сделали? Нет.
Поэтому надёжнее переформулировать условие и написать, скажем, запуск каждый час.

Сделали? Нет.
Аватара пользователя
fmuser
Алексей, думаете мне больше заняться нечем, чем всю эту хрень перебирать?
и потом - клиент всегда прав - не забыли?
Аватара пользователя
Алексей Пикуров
Я думаю, что вам сюда: https://secure.2checkout.com/checkout/b ... port&qty=1
Аватара пользователя
fmuser
ну это я сам решу. чатов то много разных и бесплатные есть.
Аватара пользователя
Алексей Пикуров
Ок, без проблем.
Аватара пользователя
Алексей Пикуров
Доделали обработку и рендеринг локальных и UNC-ссылок в тексте чата: viewtopic.php?p=50855#p50855