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

Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вс окт 02, 2011 8:37 pm
Алексей Пикуров
UPD (18.01.2021)
Скрипт устарел, свежая версия для версии MyChat 8.4.0 и старше.

Итак, уже практически готова версия 4.10.4, в ней добавлена немаленькая пачка :D новых функций для скриптового движка и я хочу показать скрипт, который сможет поздравлять ваших пользователей с днями рождений. Автоматически.

Понятное дело, что для того, чтобы всё было правильно и красиво, ваши пользователи должны указывать день своего рождения в профиле, иначе грош цена будет этому скрипту:
birthday.png
День рождения в профиле пользователя MyChat

Далее, открываем сервер, инструмент "Скрипты", и вставляем скрипт на событие, которое будет выполняться каждый час:
scriptbirthdayreminder.png
Вставка скрипта-поздравлялки с днями рождений в редактор скриптов MyChat Server

Не забываем включить скрипт.

Более подробно о скрипте и о том, как он работает, будет отдельная статья в разделе "Статьи" на нашем сайте, а пока исходный текст скрипта:
Код: Выделить всё
//////////////////////////////////////////////////////////////
//                                                          //
// MyChat Server Script Language                            //
//                                                          //
// Скрипт автоматических поздравлений с днями рождений      //
// версия 1.0 от 02.10.2011                                 //
//                                                          //
// Copyright(c) Alexey Pikurov / Network Software Solutions //
// [email protected]                                        //
// http://www.nsoft-s.com                                   //
//                                                          //
// Выполнять каждый час                                     //
// Вопросы, пожелания, комментарии:                         //
// http://www.nsoft-s.com/forum/viewforum.php?f=35          //
//                                                          //
//////////////////////////////////////////////////////////////
var
  s, sUserFullName, sMsg, s2, sToday, sOld: string;
  iUIN, iSex: integer;
  sJSON: string;
begin
  sToday := FormatDateTime('ddmmyyyy', Now); // получаем текущую дату

  // читаем из реестра запись о прошлом запуске
  RegGetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sOld);

    // если мы ужа работали сегодня, то ничего не делаем, чтобч
    // не поздравить одних и тех же людей по второму кругу
    if sToday<>sOld then begin
      // записываем в реестр текущую дату
      RegSetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sToday);
     
      // получаем список UIN-ов людей, у которых сегодня день рождения
      s := mGetBirthdayUsers(Now);
                                 
          // и перебираем их всех по одному
          while length(s)>0 do begin
            iUIN := strtoint(GetNextSt(s, ','));

            sJSON := mGetUserDataAsJSON(iUIN, 'Sex');
            JSONGetInteger(sJSON, 'Sex', iSex); // получение пола пользователя

            sUserFullName := mGetUserFullNameByPreset(iUIN, 0); // ... и полного имени
             
              case iSex of
                0, 1: s2 := 'его';
                2: s2 := 'её';
              end;
       
            // формируем строку для поздравления
            sMsg := 'Сегодня ' + sUserFullName + ' празднует день рождения!' +
                    CRLF +
                    'Подравляем ' + s2 + ' с этим праздником и желаем всего самого ' +
                    'светлого и доброго!';
             
            // ...и размещаем её на доске объяалений, чтобы было видно всем пользователям,
            // а дату окончания объявления выставляем до конца текущего дня   
            mAddNewBBSMessage(false, sMsg, EndOfTheDay(Now));
          end;
    end;     
end.

Как видите, всё достаточно просто и линейно. Комментарии дополнительно поясняют алгоритм скрипта.

А вот и результат работы на доске объявлений у клиентов:
bbsbirthdays.png
Доска объявлений у клиентов чата MyChat с текстом поздравлений с днями рождений

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн окт 03, 2011 9:54 am
Volldemar
Hobit писал(а):Далее, открываем сервер, инструмент "Скрипты", и вставляем скрипт на событие, которое будет выполняться каждый час:

А в чем тайный смысл запуска данного скрипта каждый час? Не получится ли, что поздравления буду каждый час, в течении рабочего дня? не многовато ли? ;)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн окт 03, 2011 10:14 am
Алексей Пикуров
Если вы прочитаете исходник скрипта, то увидите, что там есть контроль на выполнение - раз в сутки. Почему каждый час - потому что неизвестно, в какое время суток будет запущен сервер. Время сервера считается по его аптайму, а не по системным часам. Соответственно, если сервер запустили, скажем, в 20:00, сутки "натикают" в 20:00 следующего дня. Кого в это время уже поздравлять? Рабочий день окончен. Поэтому схема запуска скрипта "раз в сутки" не подходит.

Читайте исходник - там всё элементарно. И есть комментарии :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 12:45 pm
Volldemar
Скопипастил текст скрипта -поздравлялки, но на сервере, в редакторе скриптов, русские буквицы отображаются крякозяблами. Какую кодировку воспринимает редактор скриптов сервера?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 12:51 pm
Андрей Раков
Воспринимается кодировка win1251.

Рекомендую сохранить текст скрипта в блокноте на сервере и скопировать уже оттуда в редактор скриптов.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 12:57 pm
Volldemar
И так тоже делал...

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 1:09 pm
Андрей Раков
Может у вас на сервере языковые настройки неправильные? Виндовс английская?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 3:14 pm
Volldemar
Gifer писал(а):Может у вас на сервере языковые настройки неправильные? Виндовс английская?


Свойства операционной системы
Название ОС Microsoft Windows 7 Ultimate
Язык ОС Русский (Россия)
Тип ядра ОС Multiprocessor Free (32-bit)
Версия ОС 6.1.7601
Пакет обновления ОС Service Pack 1
Дата инсталляции ОС 31.08.2011
Корневая папка ОС C:\Windows

Версии компонентов
Common Controls 6.16
Internet Explorer 9.0.8112.16421
Windows Mail 6.1.7600.16385 (win7_rtm.090713-1255)
Windows Media Player 12.0.7600.16385 (win7_rtm.090713-1255)
Windows Messenger -
MSN Messenger -
Internet Information Services (IIS) -
.NET Framework 3.5.30729.4926 built by: NetFXw7
Novell Client -
DirectX DirectX 11.0
OpenGL 6.1.7600.16385 (win7_rtm.090713-1255)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 5:18 pm
Алексей Пикуров
Попробуйте вот это: http://novikovmaxim.livejournal.com/135472.html

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 5:26 pm
Алексей Пикуров
Да, 100% дело в настройках локали системной. Если русские буквы показываются закорючками, значит система не может правильно их отобразить из-за неверной настройки локали.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 5:56 pm
Volldemar
Вот скрины, что у меня не так?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 07, 2011 5:57 pm
Volldemar
ещё один скрин

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср окт 12, 2011 12:07 pm
Volldemar
Проявился не приятный баг, поздравлялки, жаль :(
Значит так, при присоединении по веб-чату, сервер воспринимает дату подключения, как дату рождения, ну и ессно, поздравляет: "Сегодня WEB12102011_115237 празднует день рождения!
Подравляем его с этим праздником и желаем всего самого светлого и доброго!". Нада бы, как то решить такую неприятность...

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср окт 12, 2011 1:05 pm
Андрей Раков
Да, поздравление новорожденным :) исключим зарегистрированных через веб юзеров из поздравлений.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср окт 12, 2011 3:25 pm
Volldemar
Gifer писал(а):Да, поздравление новорожденным :) исключим зарегистрированных через веб юзеров из поздравлений.

Может для начала вести проверку в скрипте? К примеру на количество лет? ;) Скажем если меньше 10, но не поздравлять :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср окт 12, 2011 5:05 pm
Алексей Пикуров
:) Веб-юзерам будем проставлять 1900-й год и таких "аксакалов" поздравлять не будем в принципе. Надо же как-то отличать таких товарищей.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср окт 12, 2011 5:08 pm
Volldemar
Hobit писал(а)::) Веб-юзерам будем проставлять 1900-й год и таких "аксакалов" поздравлять не будем в принципе. Надо же как-то отличать таких товарищей.

Ну это на будущее, а как сейчас быть?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср окт 12, 2011 5:25 pm
Алексей Пикуров
Надо скрипт подправить, я сегодня что-то придумаю.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт окт 13, 2011 2:29 pm
Volldemar
Hobit писал(а):Надо скрипт подправить, я сегодня что-то придумаю.

Ждёмс подправленный скрипт ;) очень - очень :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт окт 13, 2011 3:32 pm
Алексей Пикуров
Сервер поправлен, залит на сайт - http://www.nsoft-s.com/downloadmychat.html

viewtopic.php?f=35&t=1963

Версия сервера не изменена, для обновления нужно просто установить поверху. Скрипт изменять не нужно.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт окт 13, 2011 3:58 pm
Volldemar
Hobit писал(а):Сервер поправлен, залит на сайт - http://www.nsoft-s.com/downloadmychat.html

http://www.nsoft-s.com/forum/viewtopic.php?f=35&t=1963

Версия сервера не изменена, для обновления нужно просто установить поверху. Скрипт изменять не нужно.


Исправления коснулись поля "дата рождения", которое некоторые особо стеснительные пользователи не заполняют. Теперь вновь регистрируемым (как в веб-чате, так и простая регистрация) при Не заполнении данного поля, будет присваиваться дата 01.01.1900. И данная дата будет пропускаться скриптом "поздравлялки", т.е. такие пользователи не будут получать поздравление с Днём рождения.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт окт 13, 2011 4:44 pm
Volldemar
Volldemar писал(а):Скопипастил текст скрипта -поздравлялки, но на сервере, в редакторе скриптов, русские буквицы отображаются крякозяблами. Какую кодировку воспринимает редактор скриптов сервера?


Проблему решил следующим способом:

В папке System32 файл C_1252.NLS меняем на C_1251.NLS(любым, удобным способам).
Для этого сначала дал себе права владельца, переименовал 1252 в 1252.old, а 1251 скопировал в другую директорию и там его переименовал в C_1252.NLS. Затем переименованный файл скопировал в директорию System32 и перезагрузился. После перезагрузки файл с расширением "old" можно удалить. Теперь все буквы на месте и показывают правильно. Система обращется к 1252, находит там 1251 и работает.

Способ нагуглил на просторах инета :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт окт 14, 2011 9:57 am
Volldemar
Странно, после обновления скрипт не хочет поздравлять, сегодня как раз есть кого...

Сорри, таки работает :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт мар 01, 2012 5:39 pm
Volldemar
Подправте пожалуйста скрипт, что бы поздравлял и тех, у кого припало ДР на суб. и воскр., и как то это писалось в поздравлении, что вот такого то числа (суббота) или (воскресенье), поздравляем бла-бла-бла :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт мар 01, 2012 5:50 pm
Алексей Пикуров
Попробуйте сами это сделать, если есть желание. Скрипт открыт, API тоже. Скриптовый движок для того и создавался, чтобы пользователи могли сами им пользоваться и расширяли возможности MyChat. Хотя бы попытайтесь.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт мар 01, 2012 5:54 pm
Volldemar
Hobit писал(а):Попробуйте сами это сделать, если есть желание. Скрипт открыт, API тоже. Скриптовый движок для того и создавался, чтобы пользователи могли сами им пользоваться и расширяли возможности MyChat. Хотя бы попытайтесь.

Желание - есть, но нет соответствующего образования...
Вот если что нить по ВЧ радиотехнике, то пожалуйста...

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт мар 01, 2012 8:19 pm
Алексей Пикуров
Попробуйте. Хватит школьных знаний по Паскалю, я вас уверяю :) А что неясно - мы расскажем и поможем. Тем более, в скрипте есть комментарии, поясняющие, что и как. Для людей же делали.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт мар 01, 2012 9:06 pm
Volldemar
Hobit писал(а):Попробуйте. Хватит школьных знаний по Паскалю, я вас уверяю :) А что неясно - мы расскажем и поможем. Тем более, в скрипте есть комментарии, поясняющие, что и как. Для людей же делали.

Вы будете смеяться, но когда я учился в школе, был предмет "информатика", и всё "изучение" происходило на доске преподавателя и в тетрадках в клеточку :), тогда не было в школах персоналок...
Понимаю, что некогда, что это не оплачивается, ну раз нет, так нет, не буду больше беспокоить глупыми просьбами...

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Чт мар 01, 2012 10:33 pm
Алексей Пикуров
Сделаем, если будет время лишнее. Или кто-то из пользователей, может, "расщедрится" раньше нас :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт апр 19, 2013 9:35 am
Ein
Появилась идея добавить к этому скрипту функцию оповещения о завтрашних именинниках. Но не в виде объявления на доске а в виде сообщения в чат.
Составить список завтрашних поздравлялок несложно: добавляем еще одну переменную(например t), и как мне подсказали в личном письме от суппорта - завтрашнее время будет получено командой
t := mGetBirthdayUsers(IncHour(Now, 24));
Затем в срипт добавляем еще один цикл while в котором s меняем на t.
А вот как прописать команду на отправку Ботом сообщения в канал чата я не понял. Основная проблема в том, что сервером управляю удаленно через TV и почему то комбинация ctrl+пробел для просмотра списка функций не срабатывает =)
Соответственно - хочу узнать функцию отправки Ботом сообщения в чат и её параметры(важно отправить сообщение в главный канал по времени когда все пользователи на местах).

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт апр 19, 2013 9:56 am
Алексей Пикуров
Функция отправки сообщения в канал: function mSendChannelMessage(iUID: integer; sMsg:string): integer

Для того, чтобы узнать UID канала по его имени, воспользуйтесь функцией function mGetTextChannelUIDByName(sName: string): integer

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт апр 19, 2013 11:43 am
Ein
Прекрасно! А сообщение можно сделать с привязкой к определенному часу? Или например, если в цикл добавить проверку текущего часа, то откуда взять параметр текущего времени?
Идеально было бы отправлять сообщение точно по времени. Например в 9:20 или в 12:10.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт апр 19, 2013 12:28 pm
Алексей Пикуров
Текущее время можно получить функцией Now.
А procedure DecodeDateTime(dt: double; var wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSec: word) поможет "распарсить" Now на "составные части" (часы/минуты/секунды...).

Например:
Код: Выделить всё
var
  wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSec: word;
begin
  DecodeDateTime(Now, wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSec);

    if (wHour = 9) and (wMinute = 20) then {bla-bla-bla};
end;

Навесить этот скрипт на выполнение каждую минуту:
scripteveryminute.png

Этот как вариант, способов можно ещё придумать :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Сб апр 20, 2013 12:17 pm
Ein
И в довершение: какой функцией получить из профиля год рождения? желательно в integer
А так же интересно, в скриптовом сообщении возможно указать параметры теста? (размер, шрифт и т.д.)

Как получу готовый скрипт - обязательно выложу его сюда =)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн апр 22, 2013 10:54 am
Алексей Пикуров
Получение даты рождения пользователя:

function mGetUserAttribute(iUIN: integer; sAttributeName: string): string

Дата получается в виде строки в формате "dd/mm/yyyy hh:nn:ss" (без кавычек).
Код: Выделить всё
var
  s: string;
  iYear: integer;
begin
  s := mGetUserAttribute(12, 'HOME_BIRTHDAY');
 
    if s <> '' then iYear := strtoint(copy(s, 7, 4))
      else iTear := -1;
end;

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн апр 22, 2013 10:57 am
Алексей Пикуров
P.S. Форматирование текста есть, но в справке пока не описано, напишите, что вы хотите сделать, я напишу, какие теги использовать.

Полное описание тегов форматирования текста будет немного позже. Их там много :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн апр 22, 2013 11:57 am
Ein
Хорошо, посмотрю что получится =) Спасибо!

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт авг 02, 2013 8:29 am
Денис
Проблему решил следующим способом:

В папке System32 файл C_1252.NLS меняем на C_1251.NLS(любым, удобным способам).
Для этого сначала дал себе права владельца, переименовал 1252 в 1252.old, а 1251 скопировал в другую директорию и там его переименовал в C_1252.NLS. Затем переименованный файл скопировал в директорию System32 и перезагрузился. После перезагрузки файл с расширением "old" можно удалить. Теперь все буквы на месте и показывают правильно. Система обращется к 1252, находит там 1251 и работает.

Способ нагуглил на просторах инета :)

Добрый день, проблема с кракозябрами такая же, стоит Server 2008 R2 64-bit, данный способ не помог исправить проблему. Что можете посоветовать?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт авг 02, 2013 10:30 am
Алексей Пикуров
Здравствуйте, Денис.

Попробуйте:
viewtopic.php?p=8396#p8396
viewtopic.php?p=7123#p7123

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн авг 19, 2013 8:26 am
Денис
Алексей Пикуров писал(а):Здравствуйте, Денис.

Попробуйте:
viewtopic.php?p=8396#p8396
viewtopic.php?p=7123#p7123

Перепробывал все, везде стоиит русский, замена с_1252.NLS тоже не решила пробему

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн авг 19, 2013 8:55 am
Алексей Пикуров
Денис, попробуйте погуглить, может что-то поможет. Я не знаю, что вам посоветовать. Если найдёте решение - пишите сюда.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт апр 12, 2016 10:43 am
avas
У меня заработало вот так:
sToday := FormatDateTime('ddmmmmyyyy', Now); // получаем текущую дату

Формат даты в скрипте поправил.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт апр 12, 2016 11:58 am
Алексей Пикуров
Как вы будете форматировать дату — дело вкуса.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт июл 19, 2016 8:23 am
to$ter
Алексей нежданно свалилась напасть:
Скрипт начал поздравлять именинников ежечасно.
Из расследований:
// записываем в реестр текущую дату
RegSetString(HKEY_CURRENT_USER, 'Software\MyChatServerScripts\BirthdayReminder', sToday);
в реестре записывает первые 4 знака (год отбрасывает), соответствено сравнение
if sToday<>sOld никогда не будет ложь и мы поздравляем каждый час.
формат sToday := FormatDateTime('ddmmyyyy', Now);
если в скрипте вывысти переменную sToday на экран имеет требуемый формат, для сегодня например: 19072016
система win2012 64bit
сервер чата 5.20.0
служба запускается с системной учеткой.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт июл 19, 2016 12:43 pm
Алексей Пикуров
Здравствуйте. Проблему повторил, разбираюсь, в чём дело.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт июл 19, 2016 3:38 pm
Алексей Пикуров
Исправлено, проблема была связана с переводом сервера на UNICODE, на днях будет готово обновление.

Также сейчас готовлю раздел справки сервера, где описываются функции для работы с реестром.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт июл 19, 2016 5:35 pm
Алексей Пикуров

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср июл 27, 2016 5:17 am
to$ter
Спасибо, с версии 5.21.0 заработало нормально.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср июл 27, 2016 8:28 am
Алексей Пикуров
Отлично. Спасибо за уведомление.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт сен 27, 2016 8:18 am
ovdt
Здравствуйте.
Сегодня обнаружил что отключился скрипт поздравления пользователей. При проверке скрипта выяснилось что ошибки в строках:
iSex := mGetUserSex(iUIN); // получение пола пользователя
sUserFullName := mGetUserFullName(iUIN, 0); // ... и полного имени

[Error] (38:21): Unknown identifier 'mGetUserSex'
[Error] (39:30): Unknown identifier 'mGetUserFullName'
Версия сервера 5.22.1.0 на предыдущей версии все работало.
Подскажите что можно сделать?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт сен 27, 2016 8:22 am
to$ter
Та-же история(((

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт сен 27, 2016 12:26 pm
Андрей Раков
ovdt писал(а):iSex := mGetUserSex(iUIN); // получение пола пользователя
sUserFullName := mGetUserFullName(iUIN, 0); // ... и полного имени

Эти функции нужно заменить на mGetUserFullNameByPreset + JSONGetInteger

Пример:
Код: Выделить всё
var
  sJSON: string;
  iSex: integer;
begin
  sJSON := mGetUserDataAsJSON(6, 'Sex');

  if JSONGetInteger(sJSON, "Sex", iSex) = 0 then
     // all ok
  else
     // error
end.


И mGetUserFullNameByPreset
Код: Выделить всё
sUserFullName := mGetUserFullNameByPreset(6, 0)

Как описано в справке, имя будет в формате "Александр Сергеевич Пушкин" для второго параметра "0".

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт сен 27, 2016 1:24 pm
ovdt
Исправьте все пожалуйста в шапке темы сообщения в скрипте так как я сам не пойму куда вставить

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт сен 27, 2016 1:30 pm
Андрей Раков
Поправил, можете пробовать.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт сен 27, 2016 1:33 pm
ovdt
Спасибо поставил без ошибок

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:10 am
Coolboy
Добрый день!
На Server 2008 R2 64-bit подмена С_1252.NLS на 1251 проблему с кракозябрами решает ;)
Чтоб ушли знаки вопроса и появились кракозябры в "Языках и региональных стандартах" везде, где можно ставим русский, а потом подменяем шрифты.

Дано:
Сервер 5.2.0

Проблема в строке 40: Unknown identifier 'mGetUserDataAsJSON'

Подскажите куда копать. Заранее благодарю!

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:40 am
Coolboy
Хм. Установил пробную версию сервера 5.24.0.64 и скрипт скомпилировался...
Но обновиться я на него , наверное, не смогу!? Как без перестановки узнать, подойдет ли моя лицензия?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:45 am
Coolboy
Ага, понял, как. Мой ключ до версии сервера 5.7... Где его качнуть и отработает ли там скрипт?

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:51 am
Алексей Пикуров
Добрый день.
Ага, понял, как. Мой ключ до версии сервера 5.7... Где его качнуть и отработает ли там скрипт?

Нет, не отработает. У вас очень старая версия, нужно обновиться. Для этого нужно приобрести подписку на обновления на год или больше.

Дистрибутивы старых версий мы предоставляем только клиентам, напишите нам на [email protected], вышлем ссылку, если вы потеряли свой дистрибутив.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:53 am
Алексей Пикуров
P.S. В следующей версии мы полностью переходим на UNICODE, так что кракозябры исчезнут, как явление :)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:55 am
Coolboy
А можно его(скрипт) поправить под мою версию? [smilie=help.gif]

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 9:57 am
Алексей Пикуров
Мы не занимаемся корректировкой старых версий и скриптов к ним, извините.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 10:01 am
Coolboy
Печально читать такие строки в службе техподдержки продукта, которым пользуешься...

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 11:02 am
Алексей Пикуров
Почему? У нас нет физической возможности поддерживать древние версии MyChat, мы оказываем техническую поддержку и исправляем ошибки только в самой свежей версии. Для этого и есть подписка на обновления.

Версия 5.7 вышла очень давно, посмотрите историю версий.

Я вам с удовольствием помогу, но и вы обновитесь на самую свежую версию.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 11:05 am
Coolboy
Спасибо вам!

Я поправил скрипт ручками, все работает ;)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пт мар 03, 2017 11:08 am
Алексей Пикуров
Вот и прекрасно. Но обновиться я вам всё равно настоятельно рекомендую.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн мар 11, 2019 9:27 am
tfosn
Версия 1.0 актуальна? 8 лет прошло
// Скрипт автоматических поздравлений с днями рождений //
// версия 1.0 от 02.10.2011

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн мар 11, 2019 9:50 am
Алексей Пикуров
Что мешает скопировать и вставить?)) Всё работает.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Вт янв 19, 2021 12:08 am
Алексей Пикуров
UPD (18.01.2021)
Скрипт устарел, свежая версия для версии MyChat 8.3.3 и старше.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср май 12, 2021 11:11 am
AlexSun
Да, спасибо за скрипт. Еще неплохо было бы, чтобы предупреждал за 2-3 дня (за 3 дня, в пятницу - если в понед выпадает ДР)

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Ср май 12, 2021 11:20 am
Алексей Пикуров
Пожалуйста. Поменяйте под свои нужды, это не проблема.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн авг 01, 2022 7:30 am
AlexaS
Сегодня заметил что у последней версии скрипта при переходе в следующий месяц объявление с субботы не дожило до понедельника (суббота 30 июля, понедельник 1 августа).
Код: Выделить всё
// ---------------------------------------
// Script created by Alexey Pikurov ([email protected])
// 18.01.2021 20:45:13
// ---------------------------------------
var
  iUIN: integer;
  dtExpired: double;
  sUsersList, sUserFullName, sMsg, sGender, sToday: string;
begin
  dtExpired := Now; // получаем текущую дату
  sToday := FormatDateTime('ddmmyyyy', dtExpired);

    // если мы уже работали сегодня, то ничего не делаем, чтобы
    // не поздравить одних и тех же людей по второму кругу
    if mDBStorageGetData('birthday-script') = sToday then exit
      else mDBStorageSetData('birthday-script', sToday);
 
  sUsersList := mGetBirthdayUsers(dtExpired); // получаем список UIN-ов людей, у которых сегодня день рождения
                                 
    while length(sUsersList) > 0 do begin
      iUIN := StrToInt(Fetch(sUsersList, ','));
      sUserFullName := mGetUserFullNameByPreset(iUIN, 0); // 0 — "Александр Сергеевич Пушкин"
     
        if mGetUserAttribute(iUIN, 'Sex') = '2' then sGender := 'её' // получение пола пользователя
          else sGender := 'его';
       
      // формируем строку для поздравления
      sMsg := 'Сегодня ' + sUserFullName + ' празднует день рождения!' +
              CRLF +
              'Подравляем ' + sGender + ' с этим праздником и желаем всего самого ' +
              'светлого и доброго!' +
                CRLF +
                'Пусть жизнь дарит Вам побольше ярких моментов и сбудутся все самые смелые и заветные желания!'+
                CRLF +
                'Желаем чтобы в Вашем доме всегда царили счастье и понимание.'+
                CRLF +
                'И пусть Вас окружают только искренние, верные, надежные друзья и добрые люди. ' +
                CRLF +
                'С уважением, администрация!';
       
        // если сегодня суббота или воскресенье, то добавляем нужное количество дней до понедельника
        case DayOfTheWeek(dtExpired) of
          6: IncDay(dtExpired, 2);
          7: IncDay(dtExpired, 1);
        end;

      // ...и размещаем поздравление на доске объяалений, чтобы было видно всем пользователям
      mAddNewBBSMessage(sMsg, dtExpired, false);
    end;
end.

Re: Скрипт для поздравления пользователей с днями рождений

СообщениеДобавлено: Пн авг 01, 2022 10:51 am
Алексей Пикуров
Скрипт написан неидеально, следует для даты окончания проставить что-то вроде EndOfTheDay, чтобы объявление было до конца суток, а не +1 или два дня с момента срабатывания события.