Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
lostfeartoday
Доброго дня, тестую 8 версію, дякуємо за те що можна вставляти внутрішні посилання, але є одне но, коли, пробую вставити посилання з скрипту на Python текст не перетворюється в посилання, а просто вставляться текстом, так якщо на нього натиснути начебто працює, коли натискаешь то відкриває браузер, а не провідник...
Дякую)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
MessageType - MSG_TYPE_LAN_LINK, #7.

Внутри JSON объект:
Код: Выделить всё
{
    "Link"  : "https://nsoft-s.com", // текст ссылки
    "Desc"  : "Бла-бла-бла"          // описание ссылки. Необязательный параметр, если его нет, вставлять в чат описание, равное тексту ссылки
}
Аватара пользователя
Алексей Пикуров
Це не помилка, переношу тему до розділу скриптів.
Аватара пользователя
lostfeartoday
Так Ви праві дякую)
Аватара пользователя
Алексей Пикуров
Все вийшло?
Аватара пользователя
lostfeartoday
ДА ні перед цім, я написав що дякую що перенесли в вірний розділ повідомлення)
"MyChat Scripts Language: справочник "Типы сообщений" та команда Type - MSG_TYPE_LAN_LINK, #7 mychat, це для внутрішньої скриптової мови "MyChat"?
Аватара пользователя
Алексей Пикуров
Так.
Аватара пользователя
lostfeartoday
А в мене скрипт обробляє Python(по прикладу, що був у Вас розміщений), який вставляє посилання в MyChat .
Відкривши базу повідомлень з історії, я побачив, якщо додаю с буферу через ctrl+V, то додается, ось такий тег:
Код: Выделить всё
{"Link":"n:\\\u041f\u041e\u0427\u0422\u0410\\2020\\\u0412\u0445\u0456\u0434\u043d\u0430\\07\\15\\","Desc":"n:\\\u041f\u041e\u0427\u0422\u0410\\2020\\\u0412\u0445\u0456\u0434\u043d\u0430\\07\\15\\"}
Аватара пользователя
Алексей Пикуров
І що вас лякає?
Аватара пользователя
lostfeartoday
а якщо цей же тег спробувати вставити з скрипту на Python то вставляется простим текстом
Аватара пользователя
Алексей Пикуров
У відправці повідомлення треба правильно вказати message type. Покажіть свій код.
Аватара пользователя
lostfeartoday
Код: Выделить всё
# -*- coding: utf-8 -*-
import sys
import socket
import json
import struct
HOST = "ip"
PORT = 2004
with open(r"C:\Python27\m.txt", "r") as file_handler:
    for line in file_handler:
        print(line)

dict_obj = {
 "cmd"       : "0004",       # //номер команди
 "ServerKey" : "iddqd",       # //ключ IntegrationAPI
 "APIStype"  : "python",    # //з якого середовища відправляємо
 "UserFrom"  : "0",          # //від якого користувача відправляємо (uin)
 "UID"       : "20",             #//в яку конференцію відправляємо (номер)
 "Msg"       : (line)    # //власне, саме повідомлення
}"

CRLF = r"\r\n";  # #13#10
CRLF = struct.pack("BB", 13, 10)  # #13#10


MCIAPI_CS_SendPrivateMessage  = "0002"
MCIAPI_CS_IsUINOnline         = "0003"
MCIAPI_CS_SendChannelMessage  = "0004"
MCIAPI_CS_GetUINByNick        = "0005"
MCIAPI_CS_GetUINByEmail       = "0006"
MCIAPI_CS_IsUINExists         = "0007"
MCIAPI_CS_AddBBSMessage       = "0008"
MCIAPI_SC_SetChannelTopic     = "0009"
MCIAPI_CS_GetChannelNameByUID = "0010"
MCIAPI_CS_IsChannelExists     = "0011"
MCIAPI_CS_GetUINByADLogin     = "0012"
MCIAPI_CS_GetInfoByUIN        = "0013"
MCIAPI_CS_GetServerInfo       = "0014"

MagicPacket = struct.pack("BB", 23, 6)  # B - unsigned char. 1 byte
cs_integration_api = "0077"
iFlag = "30"

try:

    try:
        skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error as e:
        print ("Error creating socket: %s" % e)

    try:
        skt.connect((HOST, PORT))
    except socket.gaierror as e:
        print("Address-related error connecting to server: %s" % e)
    except socket.error as e:
        print("Error connecting to socket: %s" % e)

    try:
        skt.send(b'mc5.20\r\n')
        data = skt.recv(1024)
        print(bytes.decode(data))

        skt.send(MagicPacket + cs_integration_api + iFlag + MCIAPI_CS_SendChannelMessage + json.dumps(dict_obj) + CRLF)

        data = skt.recv(1024)
        print bytes.decode(data)

    except socket.error as e:
        print("Error connecting to socket: %s" % e)

finally:
    skt.close()
   
Аватара пользователя
Алексей Пикуров
Понял. Не получится сделать отправку, в Integration API нельзя указать MessageType, там строго текст сейчас, без вариантов.
Аватара пользователя
Алексей Пикуров
Добавили в функции отправки текстовых сообщений в конференции и приваты необязательный параметр MsgType. Если его нет, то сообщение передаётся всегда текстом, если есть - то в чате будет происходить рендер согласно типа сообщения.

Я подготовлю документацию и сброшу сюда ссылку, будет работать в версии 8.2.5, сборка на сайте будет на этой неделе.
Аватара пользователя
Алексей Пикуров
Аватара пользователя
lostfeartoday
Змінив тип даних на посилання, викидає помилку якщо зайти в конференцію де вставляєть це посилання.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Покажіть свій код, будь ласка.
Аватара пользователя
Алексей Пикуров
Ви повинні формувати корректний JSON, а не відправляти аби що.

https://nsoft-s.com/mcserverhelp/index. ... etypes.htm

Код: Выделить всё
MSG_TYPE_ANY_LINK

Интернет-ссылка. JSON объект. Примеры:
http://
https://
ftp://
www.nsoft-s.com
ya.ru
domain.google
internal.yandex
домен.укр

{
   "Link"  : "https://nsoft-s.com", // текст ссылки
   "Desc"  : "Бла-бла-бла"          // описание ссылки. Необязательный параметр,
                                    // если его нет, вставлять в чат описание,
                                    // равное тексту ссылки
}
Аватара пользователя
lostfeartoday
Тобто для того щоб був правильне формування корректного JSON замість
у
Код: Выделить всё
dict_obj = {
    "Msg"       : (line)    # //власне, саме повідомлення
 }


треба підставити

Код: Выделить всё
dict_obj = {
    "Link"     : (line)    # //посилання
 }
Аватара пользователя
Алексей Пикуров
Нет. В Msg внутри должен быть JSON объект. С двумя полями, как в справке написано.
Аватара пользователя
lostfeartoday
Код: Выделить всё
dict_obj = {
 "cmd"       : "0004",       # //номер команди
 "ServerKey" : "iddqd",       # //ключ IntegrationAPI
 "APIStype"  : "python",    # //з якого середовища відправляємо
 "UserFrom"  : "0",          # //від якого користувача відправляємо (uin)
 "UID"       : "31", #//в яку конференцію відправляємо (номер)
 "Msg"       :
 {
   "Link"  : "https://nsoft-s.com", #// текст ссылки
   "Desc"  : "Бла-бла-бла" 
  }
   }
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
А MsgType где в JSON ?
Аватара пользователя
lostfeartoday
Дякую розібрався все працює :)
Код: Выделить всё
dict_obj = {
 "cmd"       : "0004",       # //номер команди
 "ServerKey" : "iddqd",       # //ключ IntegrationAPI
 "APIStype"  : "python",    # //з якого середовища відправляємо
 "UserFrom"  : "0",          # //від якого користувача відправляємо (uin)
 "UID"       : "31", #//в яку конференцію відправляємо (номер)
 "MsgType"   : "8",
 "Msg"       : {
 "Link"  : "https://nsoft-s.com", #// текст ссылки
 "Desc"  : "Бла-бла-бла"
 }
 }
 
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Чудово, користуйтеся на здоров'я.
Аватара пользователя
lostfeartoday
В клієнті якщо вставити стандартно відкриває, якщо скриптом, то видає таке повідомлення.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
І ?
Аватара пользователя
Алексей Пикуров
Ви не той MsgType взяли.

Вам треба "7. MSG_TYPE_LAN_LINK". Ви ж лінк в локальній мережі хочете отримати.
Аватара пользователя
lostfeartoday
Код: Выделить всё
dict_obj = {
 "cmd"       : "0004",       # //номер команди
 "ServerKey" : "iddqd",       # //ключ IntegrationAPI
 "APIStype"  : "python",    # //з якого середовища відправляємо
 "UserFrom"  : "0",          # //від якого користувача відправляємо (uin)
 "UID"       : "31", #//в яку конференцію відправляємо (номер)
 "MsgType"   : "7",
 "Msg"       : {
 "Link"  : line, #// текст ссылки
  }
 }
 
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Алексей Пикуров
Очевидно, лінк недоступний. В повідомленні ясно про це сказано.
Аватара пользователя
lostfeartoday
Якщо копіюю та вставлю тут же то переходить нормально)
Аватара пользователя
Алексей Пикуров
Думаю, для доступа к вашей сетевой папке надо первый раз вводить имя и пароль пользователя. Это так?
Аватара пользователя
lostfeartoday
по логам якщо вставляю вручну:

Код: Выделить всё
{"Link":"\\\\10.0.23.75\\Poshta\\\u041f\u041e\u0427\u0422\u0410\\2020\\\u0412\u0445\u0456\u0434\u043d\u0430\\12\\21\\-\u0420\u043e\u0449\u0456\u043d\u0430 \u0412\u0456\u043a\u0442\u043e\u0440\u0456\u044f \u041e\u043b\u0435\u043a\u0441\u0456\u0457\u0432\u043d\u0430-\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430_ \u043c.\u0421\u0443\u043c\u0438\\","Desc":"\\\\10.0.23.75\\Poshta\\\u041f\u041e\u0427\u0422\u0410\\2020\\\u0412\u0445\u0456\u0434\u043d\u0430\\12\\21\\-\u0420\u043e\u0449\u0456\u043d\u0430 \u0412\u0456\u043a\u0442\u043e\u0440\u0456\u044f \u041e\u043b\u0435\u043a\u0441\u0456\u0457\u0432\u043d\u0430-\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430_ \u043c.\u0421\u0443\u043c\u0438\\"}


якщо скриптом
Код: Выделить всё
{"Link":"\\\\10.0.23.75\\Poshta\\ПОЧТА\\2020\\Вхідна\\12\\21\\"}
Аватара пользователя
Алексей Пикуров
Кирилицу надо экранировать в JSON.
Аватара пользователя
Алексей Пикуров
Позвоните мне, есть вопросы.
Аватара пользователя
lostfeartoday
Дякую розробникам, зв'язалися та допомогли розібратися та знайти проблему.
Так треба екранувати кирилицю в JSON.