Author Topic: MirLua  (Read 6417 times)

0 Members and 1 Guest are viewing this topic.

Offline zevnull

  • Newbie
  • *
  • Posts: 5
  • Karma: 0
Re: MirLua
« Reply #75 on: 29 08 2017, 18:15:23 »
Приветствую всех, у меня есть задача, предоставить упрощенный интерфейс создания чат комнаты для пользователей. Хочется добавить кнопку на основную панель, по нажатию на которую отрисуется интерфейс по созданию чат комнаты, где автоматически будет использоваться сервер конференций в формате conference.domain.com, где domain.com - эта та часть, что возьмется от login@domain.com. Таким образом пользователю останется ввести только название для чат комнаты. И еще момент, есть потребность принимать дефолтные настройки чат комнаты сразу по ее созданию.

Я буду крайне признателен, если уважаемый автор данного плагина MirLua, подскажет мне куда копать, для решение моей задачи! Я ни коим образом не прошу решить ее за меня, прошу лишь направить.
 

Offline unsaneTopic starter

  • Developer
  • *****
  • Posts: 124
  • Country: ru
  • Karma: 9
Re: MirLua
« Reply #76 on: 31 08 2017, 20:06:38 »
zevnull,
"в первом приближении это выглядит так"
Code: [Select]
local ttb = require('m_toptoolbar')
local icolib = require('m_icolib')

m.HookEvent('TopToolBar/ModuleLoaded', function ()
    ttb.AddButton({
        Name = 'Join chat',
        Service = 'JABBER/*/Groupchat',
        lParamDown = topointer(u'room_name@conference.jabber.ru'),
        Icon = icolib.AddIcon('joinChat', 'Join chat')
    })
end)

Проблемы:
  • без доработки Jabber'a не получится сделать подстановку сервера
  • название аккаунта вколочено гвоздями (JABBER_1) и может отличаться
  • непонятно что делать, если аккаунтов jabber'a несколько

upd
сделал фикс для Jabber'a со следующего ночника можно будет передать параметр для заполнения полей:
Code: [Select]
local ttb = require('m_toptoolbar')
local icolib = require('m_icolib')

m.HookEvent('TopToolBar/ModuleLoaded', function ()
    ttb.AddButton({
        Name = 'Join chat',
        Service = 'JABBER/*/Groupchat',
        lParamDown = topointer(u'room_name@conference.jabber.ru'),
        Icon = icolib.AddIcon('joinChat', 'Join chat')
    })
end)
« Last Edit: 02 09 2017, 14:54:00 by unsane »
Si no estas con nosotros, estas contra nosotros.
 
The following users thanked this post: Magic

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 51
  • Karma: 0
Re: MirLua
« Reply #77 on: 12 09 2017, 12:02:38 »
Здравствуйте. Пытаюсь запустить код
Code: [Select]
local message = require("m_message")
local winapi = require("winapi")

m.HookEvent("MirLua/RecvMessage", function(w, l)
  local ccd = CCSDATA(l)
  if ccd.Message == 'stopword' then
    winapi.ShellExecute('cmd.exe', 'file', 'args', 0)
    message.Send(ccd.hContact, ccd.Message)
    return 1;
  end
end)
При отправке сообщений выскакивает ошибка - attempt to call a nil value (global 'CCSDATA'), больше ничего не происходит.
Так же хотел бы узнать - как можно ограничить выполнение скрипта так, чтобы он выполнялся только при получении сообщения от конкретного отправителя?
 

Offline unsaneTopic starter

  • Developer
  • *****
  • Posts: 124
  • Country: ru
  • Karma: 9
Re: MirLua
« Reply #78 on: 12 09 2017, 18:38:01 »
Oneiron,
Code: [Select]
local db = require("m_database")
local message = require("m_message")
local winapi = require("winapi")

m.HookEvent("MirLua/RecvMessage", function(w, l)
  local ccd = CCSDATA.new(l)
  if db.GetContactInfo(ccd.hContact, 'Uid') == '<uid_of_contact>' and ccd.Message == '<stopword>' then
    winapi.ShellExecute('cmd.exe', 'file', 'args', 0)
    message.Send(ccd.hContact, ccd.Message)
    print(111)
    return 1;
  end
end)
Si no estas con nosotros, estas contra nosotros.
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 51
  • Karma: 0
Re: MirLua
« Reply #79 on: 13 09 2017, 08:57:44 »
Теперь - attempt to index a nil value (global 'CCSDATA')
 

Offline unsaneTopic starter

  • Developer
  • *****
  • Posts: 124
  • Country: ru
  • Karma: 9
Re: MirLua
« Reply #80 on: 13 09 2017, 10:32:22 »
хм. можно попробовать добавить
Code: [Select]
require('m_protocols') в начало.
Si no estas con nosotros, estas contra nosotros.
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 51
  • Karma: 0
Re: MirLua
« Reply #81 on: 13 09 2017, 11:03:15 »
Добавил. Ошибок при отправке больше не выскакивает, но и не работает. Дебаг в консольке в виде:
Code: [Select]
  local ccd = CCSDATA.new(l)
  print(ccd.Message)
Показывает, что внутри ccd.Message всегда "nil", независимо от того что я отправляю.
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 51
  • Karma: 0
Re: MirLua
« Reply #82 on: 13 09 2017, 15:06:09 »
В итоге заработал такой вариант:

Code: [Select]
local protocols = require('m_protocols')
local db = require("m_database")
local message = require("m_message")
local winapi = require("winapi")

m.HookEvent("MirLua/RecvMessage", function(w, l)
  local ccd = CCSDATA.new(l)
  local pre = PROTORECVEVENT(ccd.lParam)
  if pre.Message == "stopword" then
    winapi.CreateProcess(nil, 'cmd.exe /k', nil, nil, 0, 0, si, nil)
    message.Send(ccd.hContact, 'Принято!')
    return 1;
  end
end)
 

Offline unsaneTopic starter

  • Developer
  • *****
  • Posts: 124
  • Country: ru
  • Karma: 9
Re: MirLua
« Reply #83 on: 13 09 2017, 20:19:38 »
Oneiron, да, все правильно.


p.s. сделал фикс (в ночнике), чтобы работало
Code: [Select]
local ccd = CCSDATA(l)
Si no estas con nosotros, estas contra nosotros.