//////////////////////////////////////////////////////////////
// //
// MyChat Server Script Language //
// //
// Скрипт автоматических поздравлений с днями рождений //
// версия 1.1 от 13.05.2019 //
// //
// Copyright(c) Alexandr //
// //
// Проверяется весь список пользователей //
// Если необходимо ограничить список пользователей //
// Можно изменить функцию получения списка пользователей //
// на mGetUsersListByParams //
// Выполнять каждый час //
// Вопросы, пожелания, комментарии: //
// http://www.nsoft-s.com/forum/viewforum.php?f=35 //
// //
// История версий: //
// - изменен скрипт в соответствии с новыми функциями //
// //
//////////////////////////////////////////////////////////////
var
s, sUserFullName, sMsg, s2, sToday, sOld, date, ddmm : string;
iUIN, iSex, i, y, d, m: integer;
sPol: string;
begin
sToday := Copy(FormatDateTime('dd.mm.yyyy', Now),1,5); // получаем текущую дату
// читаем из реестра запись о прошлом запуске
RegGetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sOld);
// если мы ужа работали сегодня, то ничего не делаем, чтобч
// не поздравить одних и тех же людей по второму кругу
if sToday<>sOld then begin
// записываем в реестр текущую дату
RegSetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sToday);
// и перебираем их всех по одному
for i := 1 to mGetMaxRegisteredUIN() do begin
date := mGetUserAttribute(i, 'Home_Birthday');
ddmm := Copy(date,1,5);
if ((ddmm=sToday) and (date<>'01.01.1900.00.00.00')) then begin
sPol := mGetUserAttribute(iUIN, 'Sex');
sUserFullName := mGetUserFullNameByPreset(i, 0); // ... и полного имени
case iSex of
0, 1: s2 := 'его';
2: s2 := 'её';
end;
// формируем строку для поздравления
sMsg := 'Сегодня ' + sUserFullName + ' празднует день рождения!' +
CRLF +
'Подравляем ' + s2 + ' с этим праздником и желаем всего самого ' +
'светлого и доброго!';
// ...и размещаем её на доске объяалений, чтобы было видно всем пользователям,
// а дату окончания объявления выставляем до конца текущего дня
mAddNewBBSMessage(false, sMsg, EndOfTheDay(Now));
end;
end;
end;
end.
Чат со мной
//////////////////////////////////////////////////////////////
// //
// MyChat Server Script Language //
// //
// Скрипт автоматических поздравлений с днями рождений //
// версия 1.1 от 13.05.2019 //
// //
// Copyright(c) Alexandr //
// //
// Проверяется весь список пользователей //
// Если необходимо ограничить список пользователей //
// Можно изменить функцию получения списка пользователей //
// на mGetUsersListByParams //
// Выполнять каждый час //
// Вопросы, пожелания, комментарии: //
// http://www.nsoft-s.com/forum/viewforum.php?f=35 //
// //
// История версий: //
// - изменен скрипт в соответствии с новыми функциями //
// //
//////////////////////////////////////////////////////////////
var
s, sUserFullName, sMsg, s2, sToday, sTodayFull, sOld, date, ddmm : string;
iUIN, iSex, i, y, d, m: integer;
sPol: string;
begin
sToday := Copy(FormatDateTime('dd.mm.yyyy', Now),1,5); // получаем текущую дату
sTodayFull := FormatDateTime('dd.mm.yyyy', Now);
// читаем из базы запись о прошлом запуске
sOld = DBStorageGetData('RunBirthday');
// если мы ужа работали сегодня, то ничего не делаем, чтобч
// не поздравить одних и тех же людей по второму кругу
if sTodayFull<>sOld then begin
// записываем в реестр текущую дату
mDBStorageSetData('RunBirthday', sTodayFull);
// и перебираем их всех по одному
for i := 1 to mGetMaxRegisteredUIN() do begin
date := mGetUserAttribute(i, 'Home_Birthday');
ddmm := Copy(date,1,5);
if ((ddmm=sToday) and (date<>'01.01.1900.00.00.00')) then begin
sPol := mGetUserAttribute(iUIN, 'Sex');
sUserFullName := mGetUserFullNameByPreset(i, 0); // ... и полного имени
case iSex of
0, 1: s2 := 'его';
2: s2 := 'её';
end;
// формируем строку для поздравления
sMsg := 'Сегодня ' + sUserFullName + ' празднует день рождения!' +
CRLF +
'Поздравляем '+' с днем рождения! ' +
CRLF +
'Пусть жизнь дарит Вам побольше ярких моментов и сбудутся все самые смелые и заветные желания!'+
CRLF +
'Желаем чтобы в Вашем доме всегда царили счастье и понимание.'+
CRLF +
'И пусть Вас окружают только искренние, верные, надежные друзья и добрые люди. ' +
CRLF +
'С уважение, администрация!';
// ...и размещаем её на доске объяалений, чтобы было видно всем пользователям,
// а дату окончания объявления выставляем до конца текущего дня
mAddNewBBSMessage(false, sMsg, EndOfTheDay(Now));
end;
end;
end;
end.
Это верный вариант.
//////////////////////////////////////////////////////////////
// //
// MyChat Server Script Language //
// //
// Скрипт автоматических поздравлений с днями рождений //
// версия 1.1 от 13.05.2019 //
// //
// Copyright(c) Alexandr //
// //
// Проверяется весь список пользователей //
// Если необходимо ограничить список пользователей //
// Можно изменить функцию получения списка пользователей //
// на mGetUsersListByParams //
// Выполнять каждый час //
// Вопросы, пожелания, комментарии: //
// http://www.nsoft-s.com/forum/viewforum.php?f=35 //
// //
// История версий: //
// - изменен скрипт в соответствии с новыми функциями //
// //
//////////////////////////////////////////////////////////////
var
s, sUserFullName, sMsg, s2, sToday, sTodayFull, sOld, date, ddmm : string;
iUIN, iSex, i, y, d, m: integer;
sPol: string;
begin
sToday := Copy(FormatDateTime('dd.mm.yyyy', Now),1,5); // получаем текущую дату
sTodayFull := FormatDateTime('dd.mm.yyyy', Now);
// читаем из базы запись о прошлом запуске
sOld = DBStorageGetData('RunBirthday');
// если мы ужа работали сегодня, то ничего не делаем, чтобч
// не поздравить одних и тех же людей по второму кругу
if sTodayFull<>sOld then begin
// записываем в реестр текущую дату
mDBStorageSetData('RunBirthday', sTodayFull);
// и перебираем их всех по одному
for i := 1 to mGetMaxRegisteredUIN() do begin
date := mGetUserAttribute(i, 'Home_Birthday');
ddmm := Copy(date,1,5);
if ((ddmm=sToday) and (date<>'01.01.1900.00.00.00')) then begin
sPol := mGetUserAttribute(iUIN, 'Sex');
sUserFullName := mGetUserFullNameByPreset(i, 0); // ... и полного имени
case iSex of
0, 1: s2 := 'его';
2: s2 := 'её';
end;
// формируем строку для поздравления
sMsg := 'Сегодня ' + sUserFullName + ' празднует день рождения!' +
CRLF +
'Поздравляем '+' с днем рождения! ' +
CRLF +
'Пусть жизнь дарит Вам побольше ярких моментов и сбудутся все самые смелые и заветные желания!'+
CRLF +
'Желаем чтобы в Вашем доме всегда царили счастье и понимание.'+
CRLF +
'И пусть Вас окружают только искренние, верные, надежные друзья и добрые люди. ' +
CRLF +
'С уважение, администрация!';
// ...и размещаем её на доске объяалений, чтобы было видно всем пользователям,
// а дату окончания объявления выставляем до конца текущего дня
mAddNewBBSMessage(false, sMsg, EndOfTheDay(Now));
end;
end;
end;
end.
Чат со мной
Возможно ли доработать скрипт, чтобы он брал список лиц, которых сегодня нужно поздравить, из внешнего файла, а не только из числа пользователей чата? Т.к. не все члены коллектива используют чат, но напомнить остальным про их ДР будет не лишним)))
Чат со мной
2. Отключил скрипт в every hour, создал в скрипт в every day итог утром сервер чата висел в логах ничего.
Что неправильно в скрипте ?
// ---------------------------------------
// Script created by admin (UIN 1)
// 07.11.2019 11:54:34
// ---------------------------------------
var
s, sUserFullName, sMsg, s2, sToday, sTodayFull, sOld, date, ddmm : string;
iUIN, iSex, i, y, d, m: integer;
sPol: string;
begin
sToday := Copy(FormatDateTime('dd.mm.yyyy', Now),1,5); // получаем текущую дату
sTodayFull := FormatDateTime('dd.mm.yyyy', Now);
// читаем из реестра запись о прошлом запуске
RegGetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sOld);
// если мы ужа работали сегодня, то ничего не делаем, чтобы
// не поздравить одних и тех же людей по второму кругу
if sTodayFull<>sOld then begin
// записываем в реестр текущую дату
mDBStorageSetData('RunBirthday', sTodayFull);
// и перебираем их всех по одному
for i := 1 to mGetMaxRegisteredUIN() do begin
date := mGetUserAttribute(i, 'Home_Birthday');
ddmm := Copy(date,1,5);
if ((ddmm=sToday) and (date<>'01.01.1900.00.00.00')) then begin
sPol := mGetUserAttribute(iUIN, 'Sex');
sUserFullName := mGetUserFullNameByPreset(i, 0); // ... и полного имени
case iSex of
0, 1: s2 := 'его';
2: s2 := 'её';
end;
// формируем строку для поздравления
sMsg := 'Сегодня ' + sUserFullName + ' празднует день рождения!' +
CRLF +
'Поздравляем '+' с днем рождения! ' +
CRLF +
'Пусть жизнь дарит Вам побольше ярких моментов и сбудутся все самые смелые и заветные желания!'+
CRLF +
'Желаем чтобы в Вашем доме всегда царили счастье и понимание.'+
CRLF +
'И пусть Вас окружают только искренние, верные, надежные друзья и добрые люди. ' +
CRLF +
'С уважением, администрация!';
// ...и размещаем её на доске объявлений, чтобы было видно всем пользователям,
// а дату окончания объявления выставляем до конца текущего дня
mAddNewBBSMessage(false, sMsg, EndOfTheDay(Now));
end;
end;
end;
end.
поставил
Я не знаю, откуда вы копировали скрипт, но у вас внутри каша, перемешана логика.
RegGetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sOld);
и параллельно с ним
mDBStorageSetData('RunBirthday', sTodayFull);
Проверьте исходник, который вы копировали и прочитайте внимательно, что и как вы делаете.
Чат со мной
Как проверю отпишусь указав итоговый текст скрипта (для истории).
Надеюсь в новых версии работать тоже будет .
А если скрипт в разделе "Every Day" он по какому принципу запускается? Разово? В какое время?
Чат со мной
Во-первых, есть справка по всем скриптовым функциям, с примерами. Есть функция mDBStorageKeyExists для проверки существования ключа.
Во-вторых, в справке по функции mDBStorageGetData чётко написано:
Если данных с указанным ключом нет или ключ не существует, функция вернет пустую строку.
Пользуйтесь справкой. Она для этого и сделана Ну, а если в ней чего-то нет, то, конечно, спрашивайте на форуме, дополним.
Чат со мной
Подскажите, как на Ваш взгляд лучше реализовать запуск скрипта-оповещения о событиях (в том числе днях рождения)? Вот есть раздел EveryDay, в нем скрипт срабатывает в 00:00 (раз в сутки), при этом нужно, чтобы пользователи прийдя с утра на работу получили сообщение о том, какие сегодня знаменательные события. Так вот, если сделать рассылку в приваты от встроенного робота, получат ли пользователи сообщения после включения компов? Или лучше как-то запускать скрипт в определенное время и сообщение отправлять в общий канал?
// ---------------------------------------
// Script created by admin (UIN 1)
// 12.12.2019 11:25:39
// ---------------------------------------
const
myfile = 'C:\ProgramData\MyChat Server\db\Birthday.txt';
var
sTodayFull, TextLine, TODAY : string;
iCount, i : integer;
begin
TODAY:=(FormatDateTime('ddddd', now)); // в переменную TODAY кидаем текущую дату
begin
if FileExists(myfile) then
begin
icount := GetTextFileLinesCount(myfile,0); //
for i:=1 to iCount+1 do //Проходим по файлу до последней строки (правда
begin
LoadLineFromFile(myfile,i,TextLine);
if pos(TODAY, TextLine) = 1 // Нашли в строке есть дата, совпадающая с текущей
then begin
// delete(TextLine,1,11); //удалить дату
mLogScript(TextLine,''); //И выводим на экран (в консоль) строку с текстом события
end
end
end
else mSendPrivateMessage(0, 3, 'Файл c датами событий не существует!', 21, false); //сообщение на UIN3 о том, что файла нет
end
end.
В консоли он вполне работает. Теперь думаю, как лучше сделать его запуск, чтобы это было разово и не в 00 часов, а часов в 8:00.
(Файл для скрипта прилагаю)
Вложения
почему при отправке в канал "Главный" сообщения с помощью функции "mSendChannelMessage, например:
mSendChannelMessage(1,'test');
приходит следующее:
L$test
Откуда "L$" ?
Вот актуальный способ. В этой функции, для отправки текста используйте тип сообщения MSG_TYPE_TEXT.
Так вот, если сделать рассылку в приваты от встроенного робота, получат ли пользователи сообщения после включения компов?
Да.
Или лучше как-то запускать скрипт в определенное время и сообщение отправлять в общий канал?
Тут вам решать, как людям будет удобнее. Технически быстрее будет отправить в конференцию сообщение, а не в 100500 разных приватов, без разбора. Но если вашим пользователей не будет это "в напряг", то можно и в приваты отправлять.
Чат со мной
Чат со мной
Чат со мной
Ладно, спасибо. Главное, цель все равно достигнута)
https://nsoft-s.com/mcserverhelp/index.html?scripts.htm
viewtopic.php?f=35&t=1963
Чат со мной
Скрипт устарел, свежая версия для версии MyChat 8.4.0 и старше.
Чат со мной