Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Разработчикам [PtokaX] _ Реализация NMDC команды $MCTo

Автор: Setuper 26.8.2009, 17:19

Расширяем протокол. А именно, добавляем дополнительные возможности: http://mydc.ru/index.html?showtopic=915&view=findpost&p=6917
Данная команда NMDC протокола работает как встроенная характеристика на YnHub-е.
На поддержку хабом этой команды указывает характеристика MCTo в команде $Supports.

Скриптовая реализация этой NMDC команды в PtokaX:

Код
function UnknownArrival(tUser, sData)
  local to, n, m = sData:match"%$MCTo: (%S+) %$(%S+) (.+)|$"
  if to and n == tUser.sNick then
    Core.SendToNick(to, "<"..n.."> "..m)
    Core.SendToUser(tUser, "<"..n.."> "..m)
    return true
  end
end


Для использования команды в настройках клиента нужно создать менюшку.
Заходим Файл > Настройки > Команды юзера > Добавить
Тип команды: RAW
Контекст: Меню юзера
Название: Сообщение этому юзеру в чат
Команда: $MCTo: %[userNI] $%[myNI] %[line:Сообщение]|

Или же менюшку можно создать средствами хаба:
Код
function UserConnected(tUser)
  Core.SendToUser(tUser, "$UserCommand 1 2 Сообщение этому юзеру в чат$$MCTo: %[nick] $%[mynick] %[line:Сообщение]&#124;")
end
RegConnected, OpConnected = UserConnected, UserConnected

Автор: Trans 26.8.2009, 19:17

Попробовал и через команды клиента и через скриптик. Нашёл это очень удобным способом отключиться от хаба. big_smile.gif

Автор: Setuper 26.8.2009, 19:30

Странно. У меня всё работает а у тебя почему-то нет.
Что-то не то значит делаешь)))

Возможно ты где-то неправильно команду прописал.

Код
$MCTo: %[userNI] $%[myNI] %[line:Сообщение]|

Автор: Serx 26.8.2009, 19:38

здесь есть скрипт http://mydc.ru/topic108.html?hl=whisper, по сравнению с этим способом он проигрывает в производительности? и если да то намного ли?

может ли это работать, если в клиенте нет галочки на опции Посылать неизвестные команды хабу ?

Автор: Setuper 26.8.2009, 20:07

Да, действительно. Про галочку в клиенте я совсем забыл упомянуть.

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

В отличии от указанного скрипта (сказать шёпотом), данная команда устроена так, что жертва не знает о том, что именно ему пришло сообщение, а считает, что это общее сообщение чата. Поэтому всем окружающим будет казаться, что он разговаривает сам с собой. Очень весело получается)))

Автор: Trans 26.8.2009, 21:31

2Setuper:
Я просто скопировал команду как ты написал, тут трудно ошибиться.
Да и скриптовое отправление команды так же - целиком копирнул, создал файл, дал название и запустил.
А отправка неизвестных команд хабу - галочка у меня стоит, как всегда.
Клиент - Флайлинк. Пробовал и другой клиент - так же.
АПИ1 (скрипт подправил под апи1)

Автор: Setuper 27.8.2009, 0:13

Значит так подправил, что не работает)))

API 1:

Код
function UnknownArrival(tUser, sData)
  local to, n, m = sData:match"%$MCTo: (%S+) %$(%S+) (.+)|$"
  if to and n == tUser.sName then
    SendToNick(to, "<"..n.."> "..m)
    tUser:SendData(n, m)
    return 1
  end
end


Наверняка ты написал return true, а не return 1. Поэтому и не работало big_smile.gif

Автор: Trans 27.8.2009, 15:18

А вот и нет big_smile.gif Я воспользовался всего лишь отправкой команды клиенту через хаб...это второй код в твоем сообщении.

Автор: Setuper 27.8.2009, 16:16

Для хаба эта команда неизвестная, поэтому он тебя и отключает. Для того, чтобы она стала известно нужно написать скрипт))

Автор: Alexey 28.8.2009, 1:17

А какой-нибудь клиент нативно эту команду поддерживает?

Автор: Setuper 28.8.2009, 2:03

Данная команда, как и команда кика может вызываться только из меню как RAW команда. Однако, в отличии от команды кика, данная команда не является основной, а является дополнительной. Поэтому, если хаб поддерживает данную команду, то пользователь может добавить соответствующую контекстную менюшку.

То есть клиенты не поддерживают эту команду только из-за того, что она является дополнительной, и устанавливается только в случае поддержки со стороны хаба.

Команда мало распространена, поэтому и нет её явной реализации в клиентах. Хотя клиенты могли бы добавлять контекстное меню, так же как они добавляют меню для кика. Меню для кика добавляется в клиенте в том случае, если клиент в команде $OpList обнаружит свой ник. А команда $MCTo могла бы добавляться клиентом, если бы клиент обнаружил в команде $Supports характеристику MCTo, которая указывает на то, что хаб поддерживает команду $MCTo.
Конечно же можно разработчикам клиентов сделать запрос на реализацию менюшки для этой команды в клиентах. Думаю, что было бы не плохо, если бы данная команда появилась в клиентах в виде менюшки. Расширение функциональности - это всегда плюс big_smile.gif

Автор: Delion 28.8.2009, 2:07

Цитата
Расширение функциональности - это всегда плюс

Спорно вне контекста.

Автор: Setuper 28.8.2009, 2:14

Не понял. Что спорно?
YnHub поддерживает эту команду. Я в свой хаб тоже уже её включил. Тем более, что эта команда не просто так наобум взятая, это команда NMDC протокола, хоть и является не основной, а дополнительной.

Автор: alex82 28.8.2009, 4:20

Цитата
Команда мало распространена, поэтому и нет её явной реализации в клиентах

Она мало распространена потому, что от неё толку никакого. Сообщение "шепотом" можно реализовать при помощи банальной чат-команды. И работать она будет ничуть не хуже, чем команда протокола.

Автор: Setuper 28.8.2009, 9:25

Сколько людей, столько и мнений.

Автор: Delion 28.8.2009, 16:59

Цитата
Расширение функциональности - это всегда плюс

Вот это и спорно.