Jump to content
Korean Random
NemesiS

отправить сообщение в чат

Recommended Posts

Делаю так:

channelID = chatManager.battleTeamChannelID
            if channelID is not 0:
                BigWorld.player().broadcast(channelID, 'Hello')

не получаю никаких ошибок, но и сообщение тоже не вылазит.

И еще вроде кириллицей шлется как то по другому?

И как написать в общий чат?

 

Share this post


Link to post

Short link
Share on other sites

@NemesiS, не изобретай велосипед, клац.

И вообще советую поискать по форуму, как раковому, так и по корейке, кто использует гитхаб, и почитать там сорцы модов. Элементарных вопросов будет намного меньше.

 

common_controller = getBattleChatControllers()[2]
if common_controller is not None and common_controller.canSendMessage()[0]:
    message = u'Хелло ворлд! Это должно быть скомпилено в кодировке исходника utf-8 или закодировано через \x00\x01 и т.д. в кодировке utf-8 и сохранено как бинарная строка (тогда энкодер ниже в коде на отправку не требуется). Почему utf-8? В отличие от всякого разного остального шлака вроде windows-1251 поддерживаются все языки и символы. Это не говоря уже о том, что сообщения пересылаются в utf-8 кодировке бинарными строками. И вообще, вся эта огромная строка, написанная на одной строке или с переносами улетит в чат. Причем должна появиться там на русском, а не кракозябликами.'
    common_controller.sendMessage(message.encode('utf-8'))
З.Ы. В общий чат получится написать только если в него писать технически можно (если картоха дает добро), ибо я слышал что блокировали его, но м.б. уже разлочили, не в курсах. Edited by GPCracker
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Да в общий чат писать не получается, поэтому и ошибок нет.

message = 'Жопа!'
common_controller.sendMessage(message.encode('utf-8'))

Выдает кракозябры.

message = 'Жопа!'.encode('utf-8')
common_controller.sendMessage(message)

тоже кракозябры.

Закодировать тоже не вариант, текст в конфиге хочу хранить.


И еще клиент выдает что то типа "Message suspended for 0,5 sec" когда посылаю первый раз, со второго раза посылается.

Edited by NemesiS

Share this post


Link to post

Short link
Share on other sites

Выдает кракозябры.

1. Забыл мааааленькую буквочку `u` перед определением строки. Эта буквочка как раз таки принципиальна здесь. Почитай про типы строк в питоне.

2. В начале файла (если ты компилишь и кидаешь в клиент) нужно написать

 

# -*- coding: utf-8 -*-
и одну строку после этого оставить пустой

подробности прописаны тут. Либо брать отладчик, который понимает unicode.

3. Сначала попробуй писать в командный чат, потом просто заменишь контроллер на общий вместо командного.

4. Как вариант второго варианта можно попробовать сначала закодировать строку в бинарную, а потом уже отправлять через отладчик, но уже тогда без кодирования при отправке.

 

Кстати, что используешь для тестов? Компилишь файл и в клиент кидаешь? Или отладчиком пользуешься?

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

@NemesiS, не изобретай велосипед, клац.

И вообще советую поискать по форуму, как раковому, так и по корейке, кто использует гитхаб, и почитать там сорцы модов. Элементарных вопросов будет намного меньше.

 

common_controller = getBattleChatControllers()[2]
if common_controller is not None and common_controller.canSendMessage()[0]:
    message = u'Хелло ворлд! Это должно быть скомпилено в кодировке исходника utf-8 или закодировано через \x00\x01 и т.д. в кодировке utf-8 и сохранено как бинарная строка (тогда энкодер ниже в коде на отправку не требуется). Почему utf-8? В отличие от всякого разного остального шлака вроде windows-1251 поддерживаются все языки и символы. Это не говоря уже о том, что сообщения пересылаются в utf-8 кодировке бинарными строками. И вообще, вся эта огромная строка, написанная на одной строке или с переносами улетит в чат. Причем должна появиться там на русском, а не кракозябликами.'
    common_controller.sendMessage(message.encode('utf-8'))
З.Ы. В общий чат получится написать только если в него писать технически можно (если картоха дает добро), ибо я слышал что блокировали его, но м.б. уже разлочили, не в курсах.

 

 

А можно ли таким способом отправить сообщение в командный чат с помощью сокетов? Например как нибудь так..

from gui import SystemMessages
import socket
#данные сервера
UDP_IP = '127.0.0.1'
UDP_PORT = 10020

udp_socket = socket.socket(AF_INET, SOCK_DGRAM).bind( (UDP_IP,UDP_PORT) )
data, adress = udp_socket.recvfrom(1024)

if not data :
    udp_socket.close()
common_controller = getBattleChatControllers()[2]
if common_controller is not None and common_controller.canSendMessage()[0]:
    message = data
    common_controller.sendMessage(message.encode('utf-8'))

udp_socket.close()

Share this post


Link to post

Short link
Share on other sites

Например как нибудь так..

1. Как минимум меня смущает тот факт, что сообщение приходит по сокетам в бинарном виде... зачем тогда его кодировать? (encode('utf-8') не требуется, сообщение при передаче должно быть изначально закодировано)

2. Организация чтения из сокета. Больно нестабильно. Советов и примеров толковых правда дать не могу, ибо сам толком не вникал, как это наиболее правильно делать, но так, как реализовал это на примере ты... слишком многое не учтено, адрес отправителя, обработка исключений, отправка большого сообщения и т.д.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

1. Как минимум меня смущает тот факт, что сообщение приходит по сокетам в бинарном виде... зачем тогда его кодировать? (encode('utf-8') не требуется, сообщение при передаче должно быть изначально закодировано)

2. Организация чтения из сокета. Больно нестабильно. Советов и примеров толковых правда дать не могу, ибо сам толком не вникал, как это наиболее правильно делать, но так, как реализовал это на примере ты... слишком многое не учтено, адрес отправителя, обработка исключений, отправка большого сообщения и т.д.

 

"но так, как реализовал это на примере ты.." Та нет это только псевдокод, набросок для понимания вопроса)) Я уже почти разобрался как данные передавать в клиент, вот только осталось прикрутить это дело к чату, но пока не разобрался как правильно отправлять стандартное сообщение в командный чат..  Спасибо за быстрый ответ.

Мечтаю общий чат вернуть хотя бы посредством доп софта, с общим прикольнее было.. ))

Edited by Serfer_78

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...