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

Внутри JSON объект:
Код: Выделить всё
{
    "Link"  : "https://nsoft-s.com", // текст ссылки
    "Desc"  : "Бла-бла-бла"          // описание ссылки. Необязательный параметр, если его нет, вставлять в чат описание, равное тексту ссылки
}
Аватара пользователя
Алексей Пикуров
Це не помилка, переношу тему до розділу скриптів.
Аватара пользователя
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
Змінив тип даних на посилання, викидає помилку якщо зайти в конференцію де вставляєть це посилання.
Вложения
Screenshot_2.jpg
Screenshot_2.jpg (466.91 КБ) Просмотров: 4307
Аватара пользователя
Алексей Пикуров
Покажіть свій код, будь ласка.
Аватара пользователя
Алексей Пикуров
Ви повинні формувати корректний 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"  : "Бла-бла-бла" 
  }
   }
Вложения
Screenshot_3.jpg
Screenshot_3.jpg (38.87 КБ) Просмотров: 4303
Аватара пользователя
lostfeartoday
Дякую розібрався все працює :)
Код: Выделить всё
dict_obj = {
 "cmd"       : "0004",       # //номер команди
 "ServerKey" : "iddqd",       # //ключ IntegrationAPI
 "APIStype"  : "python",    # //з якого середовища відправляємо
 "UserFrom"  : "0",          # //від якого користувача відправляємо (uin)
 "UID"       : "31", #//в яку конференцію відправляємо (номер)
 "MsgType"   : "8",
 "Msg"       : {
 "Link"  : "https://nsoft-s.com", #// текст ссылки
 "Desc"  : "Бла-бла-бла"
 }
 }
 
Вложения
Screenshot_4.jpg
Screenshot_4.jpg (15.73 КБ) Просмотров: 4296
Аватара пользователя
Алексей Пикуров
Чудово, користуйтеся на здоров'я.
Аватара пользователя
lostfeartoday
В клієнті якщо вставити стандартно відкриває, якщо скриптом, то видає таке повідомлення.
Вложения
Screenshot_5.jpg
Screenshot_5.jpg (107.84 КБ) Просмотров: 4296
Аватара пользователя
Алексей Пикуров
Ви не той 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, #// текст ссылки
  }
 }
 
Вложения
Screenshot_5.jpg
Screenshot_5.jpg (107.84 КБ) Просмотров: 4296
Аватара пользователя
Алексей Пикуров
Очевидно, лінк недоступний. В повідомленні ясно про це сказано.
Аватара пользователя
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.