Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
ota-elena
Добрый день!
В скрипте использую метод mSendPrivateMessage и мне нужно, чтобы на выходе пользователь от бота получил сообщение такого вида:
Платеж №1 не отправлен
Платеж №2 не отправлен
Пишу s:=text1+#13#10+text2;
В итоге получаю
Сообщение от Бота: Платеж №1 не отправлен
<пустая строка>

то есть text1+#13#10 отработал, а дальше текст не съел((( Что я делаю не так?
Аватара пользователя
Алексей Пикуров
Здравствуйте.

В тексте просто вставьте слово [CRLF] — это и есть признак переноса строки.
Аватара пользователя
Алексей Пикуров
Елена, в новой версии MyChat скриптовая функция mSendPrivateMessage была изменена, пожалуйста, учтите это и переделайте свои скрипты.

Справка
Аватара пользователя
Алексей Пикуров
Елена, в новой версии MyChat скриптовая функция mSendPrivateMessage была изменена, пожалуйста, учтите это и переделайте свои скрипты. Вставка константы для переноса строки уже не нужна, можно воспользоваться специальной функцией, а можно просто добавить #13#10, как вам удобнее. Классика, в общем :)

Справка
Аватара пользователя
ota-elena
Поздно увидела ваше сообщение, уже успела новую тему создать.
Спасибо за ответ, пойду исправлять свои тексты((
Аватара пользователя
ota-elena
Не получается, такая же ошибка, как и в теме поста
Исходный файл такого вида:
2 3 Задача №
24421 от 09.10.15 была изменена. Состояние - Выполнена

Сообщение пользователю приходит только Задача № и больше текста нет
Аватара пользователя
ota-elena
Делаю как в пример https://nsoft-s.com/mcserverhelp/ s := s + CRLF + 'OS: ' то есть в самом скрипте прописываю перенос строки - то же самое, после пусто (((
Или я что-то не так делаю, может у меня моя обработка текстового файла не верная для измененных методов? раньше же усе работалоооо
Аватара пользователя
Алексей Пикуров
Покажите исходный текст своего скрипта полностью, пожалуйста.
Аватара пользователя
ota-elena
да я уже залезла в скрипт, правлю (там так все коряво) - сейчас попробую подправить
Аватара пользователя
ota-elena
В общем имеем текст типа (поставила разделитель | свой, чтобы парсить текст)
2 Сервис-менеджеру.|В заявке 131357 от 26.09.16 Возможно статутс:Вып_частично.решение не найдено.Открывали памятку по эскалации
Надо текст, что после | имел перенос строки
Ковыряю код

if FileExists(nameFile1) then begin
x1:=GetTextFileLinesCount(nameFile1);
for i1:=1 to x1 do begin
LoadLineFromFile(nameFile1,i1,s1);
n1:=pos(' ',s1);
uin0:=strtoint(copy(s1,1,n1-1)); // здесь получатель
delete(s1,1,n1);
zx:=pos('|',s1);
st_message_begin:=copy(s1,1,zx-1);
st_message1:=st_message_begin; // то, что до |
delete(s1,1,zx);
st_message1:=st_message1+CRLF+s1;

MSendPrivateMessage(uin11,uin0,st_message1,21,true);
end;

В итоге получает пользователь сообщение вида
[Чт 29 сен 13:05:46] SpamBot> Сервис-менеджеру.
В заявке 131357 от 26.09.16 Возможно статутс:Вып_частично.решение не найдено.Открывали памятку по эскалации
Аватара пользователя
Алексей Пикуров
В текстовом файле какой конкретно текст находится?
Аватара пользователя
ota-elena
Раньше был просто текст с прописанной константой разделителя и функция отправки его "понимала " в тексте, как свой язык.
2 Сервис-менеджеру.[CRLF] В заявке 131357 от 26.09.16 Возможно статутс:Вып_частично.решение не найдено.Открывали памятку по эскалации

После того, как добавился признак iMsgType integer тип приватного сообщения равный 21 в метод mSendPrivateMessage , все воспринимает система сплошным текстом
Аватара пользователя
Алексей Пикуров
Ок, сейчас напишу вам пример.
Аватара пользователя
ota-elena
Спасибо, жду
В принципе можно и без переноса, но для визуального понимания пользователю лучше "разбивать текст"
Аватара пользователя
Алексей Пикуров
Ждите, делаю ещё функцию чтения из файла, чтобы не извращаться с построчным чтением, скоро всё будет :)
Аватара пользователя
Алексей Пикуров
Добрый день, Елена.

Написал скрипт, получилось вот так:

Код: Выделить всё
// ---------------------------------------
// Script created by Алексей Пикуров (UIN 6)
// 30.09.2016 11:16:43
// ---------------------------------------
const
  FILE_NAME = 'C:\Temp\message.txt';
var
  sMsg, sCurrentLine, sOut: string;
  iUINTo: integer;
begin
  if FileExists(FILE_NAME) then begin
    sMsg := trim(LoadTextFromFile(FILE_NAME, 6)); // текстовый файл в UTF-8
   
      while length(sMsg) > 0 do begin
        sCurrentLine := getnextst(sMsg, CRLF);     
        iUINTo := strtoint(getnextst(sCurrentLine, ' '));
        sOut := ReplaceString(sCurrentLine, '|', CRLF, true, false);
        mSendPrivateMessage(0, iUINTo, sOut, 10, true);
      end;
   
    DeleteFile(FILE_NAME);
  end; 
end.

Он читает строки из текстового файла, каждая строка может быть отдельным сообщением. Выбирает оттуда UIN, кому отправлять и остаток отправляет многострочным текстом. Затем удаляет исходный файл.

Выглядит это так:

testscriptfromfile.png
Отправка сообщения в приват из текстового файла с помощью скрипта в MyChat Server
testscriptfromfile.png (29.35 КБ) Просмотров: 2331

Сам файл (в формате UTF-8, если у вас другая кодировка — поставьте в функции LoadTextFromFile нужную):

Текстовый файл с подготовленными сообщениями
(334 байт) Скачиваний: 93


Обновлённый сервер — https://nsoft-s.com/files/mcserv.zip
Справка по используемым функциям — на сайте: https://nsoft-s.com/mcserverhelp/index. ... ctions.htm

Клиентов обновлять не нужно, версия та же, 5.22.1, обновить только сервер, поверху.
Аватара пользователя
ota-elena
Спасибо большое!!!
"Ура,заработало (с)",
кодировку поставила 0 (как есть)
Аватара пользователя
Алексей Пикуров
Ок, работайте на здоровье :)