Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
ota-elena
Добрый день!
А можно для непонятливых....
В каком месте нужно указать метод?
Сейчас у меня есть процедура, которая прописана в every minute - я хочу ее перенести на запуск в конкретное время 1 раз в день и должна использовать mAddAutoScriptFromTemplate ? но где конкретно?
Аватара пользователя
Алексей Пикуров
Здравствуйте, Елена.

Пояснение работы time-скриптов в справке: https://nsoft-s.com/mcserverhelp/index. ... cripts.htm

Если вы хотите запускать скрипт один раз в день, поставьте добавление time-скрипта на событие Every day и укажите точное время, когда он должен выполниться. Только там есть нюанс, время считается от аптайма сервера, не от системного времени.

Покажите ваш код, я сделаю пример.
Аватара пользователя
ota-elena
Алексей, вот такой код
В пятницу в 11.30 запускается доска объявлений, запуск в каждую минуту, чтобы уж точно в 11.30 попадало, а раз теперь есть по типу расписания, то будет удобнее перенести.
Код: Выделить всё
var
   to_all:string;
   dt: double;
begin
  dt := Now;
  to_all :='Коллеги!Ежепятничное напоминание:' +CRLF+'Время заказа бортового питания закончится через 15 минут.'
  +CRLF+'С уважением';
  if (FormatDateTime('ddd', dt)='Пт') and (FormatDateTime('hhnn', dt) = '1130') then begin
      mAddNewBBSMessage(true, to_all, EndOfTheDay(Now));
  end;
 end.
Аватара пользователя
Алексей Пикуров
Используйте тег code при оформлении постов, легче читать. Я поправил ваше сообщение. Отвечу чуть позже.
Аватара пользователя
Алексей Пикуров
1. Обновите сервер: https://nsoft-s.com/files/mcserv.zip

Там сделаны исправления касаемо выполнения скриптов, "заточенных" на периодичность, раньше брался аптайп сервера в секундах для точки отсчёта, а теперь системное время.

viewtopic.php?p=24230#p24230

Помимо этого сделаны функции типа HourOf и MinuteOf, для удобства.

2. На событие "Every minute", посадите скрипт FridayRemindCheck, он будет срабатывать точно раз в минуту, в 11:30, в пятницу, он как раз и разместит сообщение на доске.

Пример:

Код: Выделить всё
var
  sMsg: string;
  dt: double;
begin
  dt := Now;

    if DayOfTheWeek(dt) = 5 then // пятница
      if (HourOf(dt) = 11) and (MinuteOf(dt) = 30) then begin
        sMsg := 'Коллеги! Ежепятничное напоминание:' +
                '<br><br>' +
                'время заказа бортового питания закончится через 15 минут.' +
                '<br><br>' +
                'С уважением';
       
        mAddNewBBSMessage(true, sMsg, EndOfTheDay(dt));
      end;
end.

P.S. Тег <br> нужен для перевода строк, на доске объявлений используется html.
Аватара пользователя
Алексей Пикуров
P.S. Time-скрипты для этой задачи — не очень правильное решение.
Аватара пользователя
ota-elena
Спасибо! завтра попробую.

ммм, а почему time-не лучшее решение задачи? Ведь. по-идеи, это как планировщик...
Аватара пользователя
Алексей Пикуров
Time-скрипт предназначен для разовой постановки скрипта в очередь выполнения.

Тогда логика вашей программы будет такая:
1. На временное событие, например, каждую минуту, ставим проверку, а не добавили ли мы тайм скрипт на пятницу, 11:30. Потому что неизвестно когда мы можем перезапустить сервер, вдруг это произойдёт именно в пятницу, часов в 11, например.

2. Если в очереди скрипта нету, добавляем его. Проще всего из шаблона, чтобы текстовую строку не клеить вручную.

Мне кажется, это не самый удобный вариант, но можете сделать и так, проблем нет, если будут неясности, я помогу.
Аватара пользователя
Zelen
Алексей Пикуров писал(а):Пример:

Код: Выделить всё
var
  sMsg: string;
  dt: double;
begin
  dt := Now;

    if DayOfTheWeek(dt) = 5 then // пятница
      if (HourOf(dt) = 11) and (MinuteOf(dt) = 30) then begin
        sMsg := 'Коллеги! Ежепятничное напоминание:' +
                '<br><br>' +
                'время заказа бортового питания закончится через 15 минут.' +
                '<br><br>' +
                'С уважением';
       
        mAddNewBBSMessage(true, sMsg, EndOfTheDay(dt));
      end;
end.

P.S. Тег <br> нужен для перевода строк, на доске объявлений используется html.

А могу я этот скрипт засунуть в EveryDay, чтобы каждый день в определенное время он всем участникам(онлайн и офлайн) отправлял напоминания?
Аватара пользователя
Алексей Пикуров
Вы вольны делать, что угодно, ваш же сервер :)

Только в этом примере делается сообщение на доске объявлений. Вы о ней говорите или о чём-то другом?
Аватара пользователя
Zelen
Алексей Пикуров писал(а):Вы вольны делать, что угодно, ваш же сервер :)

Только в этом примере делается сообщение на доске объявлений. Вы о ней говорите или о чём-то другом?


Я не умею писать эти скрипты. Вот поэтому спрашиваю у Вас, можно ли, а то вдруг что то не так сделаю :)
Да, я хочу, чтобы всем отправлялось объявление, типа "Напоминаю: бла бла бла"
Аватара пользователя
Алексей Пикуров
Я вас понял.

В таком случае можем написать любой скрипт по вашему желанию, "на заказ". Если скриптовых функций или какого-то функционала будет не хватать — доделаем. Ну и расскажем, с комментариями, подробно, что и как.