Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
lostfeartoday
Взяв приклад:
"Пример отправки приватного сообщения в чат на языке Python 2.7"
https://nsoft-s.com/mcserverhelp/index. ... lejava.htm
Спробував застосувати на останньому Python 3.8 (там читав дуже змінився синтаксис).
Викидає помилку:

Traceback (most recent call last):
File "C:\Users\rudenko\Documents\Mychat.py", line 59, in <module>
skt.send(MagicPacket + cs_integration_api + iFlag + MCIAPI_CS_SendPrivateMessage + json.dumps(dict_obj) + CRLF)
TypeError: can't concat str to bytes
Аватара пользователя
Андрей Раков
Добрий день.

Приклад працює лише з версією 2.7

Для старших версій вам потрібно адаптувати скрипт самостійно, у нас нема спеціалістів з python.
Аватара пользователя
lostfeartoday
"UserTo": це для юзера, а яка команда, якщо потрібно відправити у конференцію?
Дякую)
Аватара пользователя
lostfeartoday
ict_obj = {
"SendChannelMessage": 3,- і тут канал?
"UserFrom": 0,
"Msg": "Hello",
"hash": "",
"APIStype": "python",
"ServerKey": "iddqd"

CRLF = r"\r\n"; # #13#10
CRLF = struct.pack("BB", 4, 2) # #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"
Аватара пользователя
Георгий Лысенко
Ні. Ось як виглядає синтаксис команди:
Код: Выделить всё
Синтаксис
{
 "cmd"       : "0004",       //номер команди
 "ServerKey" : "iddqd",       //ключ IntegrationAPI
 "APIStype"  : "python",    //з якого середовища відправляємо
 "UserFrom"  : "0",          //від якого користувача відправляємо (uin)
 "UID"       : 12,             //в яку конференцію відправляємо (номер)
 "Msg"       : "bla-bla-bla"    //власне, саме повідомлення
}
Аватара пользователя
lostfeartoday
Ага побачив у Вас в Help дані команди, але чомусь не відправляє у конференцію....
Аватара пользователя
Георгий Лысенко
Покажіть повний код, який намагаєтесь виконати, постараюся допомогти. (Вставте його в тег [code] на форумі)
Аватара пользователя
lostfeartoday
Код: Выделить всё
# -*- coding: utf8 -*-
import socket
import json
import struct

HOST = "127.0.0.0"
PORT = 2004


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

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_SendPrivateMessage + 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()
   
Аватара пользователя
Георгий Лысенко
У рядку
Код: Выделить всё
skt.send(MagicPacket + cs_integration_api + iFlag + MCIAPI_CS_SendPrivateMessage + json.dumps(dict_obj) + CRLF)
ви використовуєте MCIAPI_CS_SendPrivateMessage замість MCIAPI_CS_SendChannelMessage
Аватара пользователя
lostfeartoday
Ага, і то правда не додивився)
Красно дякую, допомогли) [smilie=good2.gif]