Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
АндрейКузнецов
День добрый.
Хотел написать бота для рассылки информации по пользователям. Но выдает ошибку.

Код: Выделить всё
import socket
import json
import struct

HOST = "mychat.avtomaster.com"
PORT = 8080

dict_obj = {
    "UserTo": 440,
    "UserFrom": 0,
    "Msg": "Hello",
    "hash": "",
    "APIStype": "mcrest",
    "ServerKey": "Avtos2013"
}

n = json.dumps(dict_obj)

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

MCIAPI_CS_SendPrivateMessage  = struct.pack("l", 2) # l - signed long type. 4 bytes
MCIAPI_CS_IsUINOnline         = struct.pack("l", 3)
MCIAPI_CS_SendChannelMessage  = struct.pack("l", 4)
MCIAPI_CS_GetUINByNick        = struct.pack("l", 5)
MCIAPI_CS_GetUINByEmail       = struct.pack("l", 6)
MCIAPI_CS_IsUINExists         = struct.pack("l", 7)
MCIAPI_CS_AddBBSMessage       = struct.pack("l", 8)
MCIAPI_SC_SetChannelTopic     = struct.pack("l", 9)
MCIAPI_CS_GetChannelNameByUID = struct.pack("l", 10)
MCIAPI_CS_IsChannelExists     = struct.pack("l", 11)
MCIAPI_CS_GetUINByADLogin     = struct.pack("l", 12)
MCIAPI_CS_GetInfoByUIN        = struct.pack("l", 13)
MCIAPI_CS_GetServerInfo       = struct.pack("l", 14)

MagicPacket = struct.pack("BB", 23, 6) # B - unsigned char. 1 byte
cs_integration_api = struct.pack("l", 77)
iFlag = struct.pack("h", 30) # h - signed short. 2 bytes

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.18')
        #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()


-------------------------------------------
Код: Выделить всё
Traceback (most recent call last):
  File "D:\PT\myChat.py", line 66, in <module>
    skt.send(MagicPacket + cs_integration_api + iFlag + MCIAPI_CS_SendPrivateMessage + json.dumps(dict_obj)+CRLF)
TypeError: can't concat str to bytes
Аватара пользователя
Георгий Лысенко
Скрипт написан для версии Python 2.7. Для версий старше, адаптируйте, пожалуйста, сами.