Страница 1 из 1

Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Сб сен 15, 2018 2:20 pm
Алексей Пикуров
Схема работы такая:

  1. Создаём на компьютере с сервером MyChat папку "c:\messages\broadcast\".
  2. Добавляем туда текстовые файлы, которые делаем в обычном Блокноте. Названия файлов — это время, когда должны отправляться сообщения. Например, "17.35.txt" или "08.00.txt". Расширение .txt Блокнот добавляет автоматически при сохранении файла. Время должно быть кратно пяти минутам.
  3. Создаём одну или несколько групп пользователей в MyChat Server и добавляем туда людей, для которых будут делаться оповещения.
  4. Создаём скрипт на событие "User defined scripts", "Every 5 minutes", включаем его.
  5. Профит!
Как это выглядит в редакторе скриптов:

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

Текст скрипта:
Код: Выделить всё
// ---------------------------------------
// 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.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 11:52 am
tfosn
Отправил 4 подряд оповещения, не дает закрыть окно оповещения
Screenshot_159.jpg
Screenshot_159.jpg (28.76 КБ) Просмотров: 3756

выключил через диспетчер задач,
включил снова
появилось окно снова но с новыми кнопками
Screenshot_160.jpg
Screenshot_160.jpg (21.9 КБ) Просмотров: 3756

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

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 12:04 pm
tfosn
Еще вариант одно оповещение одно окно т.е. 4 окна каждое по верх предыдущего, т.к. не все понимают что нужно кнопку вбок нажать и поставить еще одну галочку.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:33 pm
Алексей Пикуров
Так а в чём проблема-то? Вы отправили оповещение с требованием подтверждения о прочтении, на клиенте появляется окно и требует подтверждения.

Абсолютно штатное поведение.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:38 pm
Алексей Пикуров
Погодите, вы хотите сказать, что у вас появилось окно оповещения, но кнопок для переключения между ними "влево-вправо" не было? Как это повторить?

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:39 pm
tfosn
Это штатное поведение если оповещение отправлено одно
а я отправил 4 подряд одновременно.
создайте скрипт отправляющий Вам 4 одновременных оповещения с подтверждением и попробуйте закрыть окно. скрин 1
у Вас это не получится т.к. надо поставить 4 галочки а на скрине 1 этого невозможно сделать так как нет кнопки навигации по оповещениям " Предыдущее (3)"
Эта кнопка появляется только после перезапуска клиента из диспетчера задач

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:40 pm
Алексей Пикуров
Окей, сейчас попробуем из скрипта. Из MyChat Client отправили 4 подряд, всё ок.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:44 pm
Алексей Пикуров
Да, получилось повторить, спасибо за наблюдение, будем разбираться.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:56 pm
tfosn
А так я могу людям приват отправить от алисы?

Код: Выделить всё
 'mSendPrivateMessage(0, sUIN, sMsg, 1, true);

Пишет выполнено но ни чего не приходит
Код: Выделить всё
const sGroupsList = 'aaa'; // группы пользователей, через запятую, без пробелов
       function GetUsersList(sGroupsList: string): string;
            Var
                    UsersCount, I, N: integer;
                    Str, Msg, ms, Date, User, str1, str2, str3, KKS, Status, sMsg, sGroupsOriginal, sCurrentGroup, sUsersList, sUIN, sResult : string;
   
            Begin
                Msg:='';
                UsersCount:= GetTextFileLinesCount('\\disk\TempFolder\log1.txt');
                For i:=1 to UsersCount do
                Begin
                    ms:=msg; //сохраняем Msg в ms
                    LoadLineFromFile('\\disk\TempFolder\log1.txt',i,str);//вычитываем строку из файла
                    N:=strtoint(copy(str,1,pos('|',str)-1));//получаем Uin пользователя
                    str1:=copy(str,pos('|',str)+1,length(str)-pos('|',str));//получаем вторую часть строки после разделителя
                    Date:=copy(str1,1,pos('|',str1)-1);
                    sGroupsOriginal:= sGroupsList;
                    sMsg:=Date;
                   
                    while length(sGroupsOriginal) > 0 do begin
                      sCurrentGroup := GetNextSt(sGroupsOriginal, ',');

                              sUsersList := mGetUsersListInGroupsByNames(sCurrentGroup);
 
                                if length(sUsersList) > 0 then
                                    while length(sUsersList) > 0 do begin
                                      sUIN:= GetNextSt(sUsersList, ',');
                                     sResult:= sResult+ CRLF +sUIN;
                                      result:= 'qds';
                                    mSendPrivateMessage(0, sUIN, sMsg, 1, true);
                                    end;
                                 // mSendBroadcast(sMsg, sUsersList, EndOfTheDay(Now), 1);
                        end;                   
                End;
           End;
           
           
begin
  mLogScript(GetUsersList(sGroupsList), 'Group1');
end.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 1:57 pm
Алексей Пикуров
Можете, от Элизы. Алиса у Яндекса :) И используйте тег форматирования [code][/code]

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 2:00 pm
Алексей Пикуров
И пожалуйста, делайте отдельные темы по каждому вопросу. Спасибо.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Пн мар 11, 2019 5:17 pm
Алексей Пикуров
Баг исправлен, сегодня выложим свежую сборку на сайт.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Вт авг 06, 2019 2:27 pm
galus.pro
Сделал такой вот скрипт по образцу, проверил на ошибки компилятором, запустил ничего не произошло. Что я сделал не так ?

Код: Выделить всё
// ---------------------------------------
// Script created by я
// 06.08.2019 11:59:36
// ---------------------------------------
const
  sGroupsList = 'IT'; // группы пользователей, через запятую, без пробелов
  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) + '14.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 < 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.

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Вт авг 06, 2019 2:30 pm
Алексей Пикуров
Обрамляйте текст скрипта в тег code..code

Формально всё правильно. А что конкретно вы хотите сделать?

Вы смысл данного конкретного скрипта понимаете?

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Вт авг 06, 2019 2:47 pm
galus.pro
Задача делать каждый день напоминания в определенное время определенной группе. В файле 14.30.txt -текст напоминания. IT- группа (кому напоминание ). В создании скриптов опыта нет((

Re: Скрипт для отправки оповещений группам людей из текстовых файлов в указанное время, по рабочим дням

СообщениеДобавлено: Вт авг 06, 2019 2:51 pm
Алексей Пикуров
Хорошо. Чтобы проверить, что скрипт работает, вам нужно выполнить его ровно в 14:30

Код: Выделить всё
 sFileName := FormatDatetime('hh.nn', Now) + '14.30.txt'; // например, 17.45.txt

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

Код: Выделить всё
 sFileName := '14.30.txt';

Ну и на сервере должен быть текстовый файл c:\messages\broadcast\14.30.txt