Author Topic: MirLua  (Read 57420 times)

0 Members and 1 Guest are viewing this topic.

Offline unsane

MirLua
« on: 04 07 2015, 18:46:03 »
Данный плагин добавляет возможность расширения Miranda NG скриптами, написанными на языке Lua.
Скрипты - файлы с расширением ".lua", загружаются по умолчанию из папок "%miranda_path%\Scripts" и "%miranda_userdata%\Scripts".
Плагин следующие модули для взаимодействия с Miranda NG:
  • m_core
  • m_clist
  • m_database
  • m_icolib
  • m_genmenu
  • m_message
  • m_msg_buttonsbar
  • m_popup
  • m_toptoolbar
  • m_variables
Примеры работы с модулями находятся в вики.
Si no estas con nosotros, estas contra nosotros.
 

Offline watcher

Re: MirLua
« Reply #1 on: 04 07 2015, 19:28:30 »
Простенький пример - добавление в главное меню пункта перезагрузки:

Code: [Select]
local clist = require("m_clist")
local icolib = require("m_icolib")

m.CreateServiceFunction("Lua/Restart",
  function() m.CallService("Miranda/System/Restart", 1, 0) end)

clist.AddMainMenuItem({
  Name = "Restart",
  Service = "Lua/Restart",
  Uid = '9FC57A01-FAC6-41AC-A009-52F1C6594095',
  Icon = icolib.AddIcon('restart', 'Restart')
})
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline watcher

Re: MirLua
« Reply #2 on: 04 07 2015, 19:29:42 »
Добавление пунта перезагрузки языкового пакета:

Code: [Select]
local clist = require("m_clist")
local icolib = require("m_icolib")

clist.AddMainMenuItem({
  Name = "LangPack Reload",
  Service = "LangPack/Reload",
  Uid = '7EB16447-754B-43ED-940B-96EDBD92EDAC',
  Icon = icolib.AddIcon('langreload', 'LangPack Reload')
})
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline watcher

Re: MirLua
« Reply #3 on: 04 07 2015, 19:31:27 »
Кнопка "Send File" на панели кнопок TabSRMM:

Code: [Select]
local mbb = require('m_msg_buttonsbar')
local icolib = require('m_icolib')

local moduleName = 'watcherPackSendFile'
local BBBF_ISIMBUTTON = 32
local BBBF_ISRSIDEBUTTON = 128
local bbButton =
{
  Module = moduleName,
  ButtonID = 1,
  Flags = BBBF_ISIMBUTTON | BBBF_ISRSIDEBUTTON,
  Tooltip = m.Translate('Send File'),
  Icon = icolib.AddIcon(moduleName, 'Send File')
}

mbb.AddButton(bbButton)

mbb.OnMsgToolBarButtonPressed(function(w, l)
  if l.Module == moduleName and l.ButtonID == 1 then
    m.CallService('SRFile/SendCommand', l.hContact, 0)
  end
end)
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline watcher

Re: MirLua
« Reply #4 on: 04 07 2015, 19:33:16 »
Кнопка "Received Files" на панели кнопок TabSRMM:

Code: [Select]
local mbb = require('m_msg_buttonsbar')
local icolib = require('m_icolib')

local moduleName = 'watcherPackReceivedFiles'
local BBBF_ISIMBUTTON = 32
local BBBF_ISRSIDEBUTTON = 128
local bbButton =
{
  Module = moduleName,
  ButtonID = 1,
  Flags = BBBF_ISIMBUTTON | BBBF_ISRSIDEBUTTON,
  Tooltip = m.Translate('Received Files'),
  Icon = icolib.AddIcon(moduleName, 'Received Files')
}

mbb.AddButton(bbButton)

mbb.OnMsgToolBarButtonPressed(function(w, l)
  if l.Module == moduleName and l.ButtonID == 1 then
    m.CallService('SRFile/OpenContRecDir', l.hContact, 0)
  end
end)
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline Mikalair

Re: MirLua
« Reply #5 on: 04 07 2015, 19:33:33 »
Code: [Select]
-- ==LuaScript==
-- @name SmileyPackSwitcher
-- @description Switching big-small smileypack
-- @author MikalaiR
-- @version 1.5
-- ==/LuaScript==

-- ==Settings==
local fullpack = "Emoji_full"
-- ==/Settings==

local mbb = require('m_msg_buttonsbar')
local icolib = require('m_icolib')
local db = require('m_database')

local BBBF_ISLSIDEBUTTON = 64

local bbButton =
{
  Module = "MirLua_SmileyPackSwitcher",
  ButtonID = 1,
  Flags = BBBF_ISLSIDEBUTTON,
  Tooltip = "Big smiley pack",
  Icon = icolib.AddIcon('SmileySwitchIconD', 'SmileyPackSwitcher icon')
}

mbb.AddButton(bbButton)

mbb.OnMsgToolBarButtonPressed(function(w, l)
if l.Module == bbButton.Module and l.ButtonID == bbButton.ButtonID then
if db.GetContactSetting(l.hContact, "SmileyAdd", "CustomCategory") == fullpack then
db.DeleteContactSetting(l.hContact, "SmileyAdd", "CustomCategory")
else
db.WriteContactSetting(l.hContact, "SmileyAdd", "CustomCategory", fullpack)
end
end
end)
Code: [Select]
-- ==LuaScript==
-- @name LToButton
-- @description
-- @author MikalaiR
-- @version 1.1
-- ==/LuaScript==

-- ==Settings==
-- ==/Settings==

local mbb = require('m_msg_buttonsbar')
local icolib = require('m_icolib')
local vars = require('m_variables')
local db = require('m_database')
local message = require('m_message')
local BBBF_ISLSIDEBUTTON = 64

function GetCurrentSong()
local result = ""
local strArtist = vars.FormatString("%listening_artist%")
local strTitle = vars.FormatString("%listening_title%")

if strArtist ~= "" and strTitle ~= "" then
result = strArtist .. " - " .. strTitle
end
return result
end

function GetOutputText(isChat)
local result = ""
local strCurrentSong = GetCurrentSong()
if strCurrentSong ~= "" then
if isChat ~= 0 then
result = "/me слушает " .. strCurrentSong
else
result = "Я слушаю " .. strCurrentSong
end
else
if isChat ~= 0 then
result = "/me ничего не слушает"
else
result = "Я ничего не слушаю"
end
end
return result
end

local bbButton =
{
  Module = "MirLua",
  ButtonID = 3,
  Flags = BBBF_ISLSIDEBUTTON,
  Tooltip = "Я слушаю...",
  Icon = icolib.AddIcon('LTButtonIcon', 'ListeningTo button icon')
}

mbb.AddButton(bbButton)

mbb.OnMsgToolBarButtonPressed(function(w, l)
    if l.Module == bbButton.Module and l.ButtonID == bbButton.ButtonID then
local contactProto = db.GetContactSetting(l.hContact, "Protocol", "p")
local text = GetOutputText(db.GetContactSetting(l.hContact, contactProto, "ChatRoom", 0))
message.Paste(l.hContact, text)
    end
end)
//обновлено 20.07.2015
« Last Edit: 20 07 2015, 20:06:15 by Mikalair »
If you like my work, you can donate to me via Bitcoin: 1CHAseNjVFfLQViLWAhh1fe6fGTiR6p1UM
 

Offline watcher

Re: MirLua
« Reply #6 on: 04 07 2015, 19:58:12 »
Ещё один вариант для кнопки listening to:

Code: [Select]
local mbb = require('m_msg_buttonsbar')
local icolib = require('m_icolib')
local variables = require('m_variables')
local message = require('m_message')

local moduleName = 'watcherPackListeningTo'
local BBBF_ISCHATBUTTON = 16
local BBBF_ISIMBUTTON = 32
local BBBF_ISLSIDEBUTTON = 64
local IDC_MESSAGE = 1002
local IDC_CHATMESSAGE = 1009
local EM_REPLACESEL = tonumber('00C2', 16)
local bbButton =
{
  Module = moduleName,
  ButtonID = 1,
  Flags = BBBF_ISCHATBUTTON | BBBF_ISIMBUTTON | BBBF_ISLSIDEBUTTON,
  Tooltip = m.Translate('Listening To'),
  Icon = icolib.AddIcon(moduleName, 'Listening To')
}

mbb.AddButton(bbButton)

mbb.OnMsgToolBarButtonPressed(function(w, l)
  if l.Module == moduleName and l.ButtonID == 1 then
    local text = variables.FormatString('?puts(vl,`/me is listening to `%listening_artist%` - [`%listening_year%` - `%listening_album%`] - `%listening_track%`. `%listening_title%`.`)?if(?strncmp(!get(vl),`/me is listening to  - [ - ] - . .`,34),`/me is  listening to silence...`,!get(vl))')
    message.Paste(l.hContact, text)
  end
end)
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline watcher

Re: MirLua
« Reply #7 on: 08 07 2015, 06:37:01 »
Скрипты, залитые мной обновлены для MirLua версии 0.11.3.1 от 08.07.15
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline Dimsok

  • Sr. Member
  • ****
  • Posts: 282
  • Country: ru
Re: MirLua
« Reply #8 on: 20 07 2015, 19:51:12 »
А как можно свои иконки добавлять?
 

Offline Mikalair

Re: MirLua
« Reply #9 on: 20 07 2015, 20:04:26 »
Dimsok,
Code: [Select]
m_icolib = require('m_icolib')
local icon = m_icolib.AddIcon("icon_id", "Icon Name")
If you like my work, you can donate to me via Bitcoin: 1CHAseNjVFfLQViLWAhh1fe6fGTiR6p1UM
 

Offline Dimsok

  • Sr. Member
  • ****
  • Posts: 282
  • Country: ru
Re: MirLua
« Reply #10 on: 20 07 2015, 20:28:02 »
А где ид для иконок искать? Во всех представленных кнопках у меня одна и та же, хотя в них иды разные
 

Offline Dimsok

  • Sr. Member
  • ****
  • Posts: 282
  • Country: ru
Re: MirLua
« Reply #11 on: 20 07 2015, 20:33:38 »
Аа, все понял. Там вообще не нужен никакой ид. Просто через касомизацию иконок сменить
 

Offline Dimsok

  • Sr. Member
  • ****
  • Posts: 282
  • Country: ru
Re: MirLua
« Reply #12 on: 20 07 2015, 22:48:12 »
Какой код использовать, чтоб получилась кнопка для вставки сообщения /new (для омегла)? Если возможно, то чтоб отправлялось сразу как в "quick replies"
 

Offline unsane

Re: MirLua
« Reply #13 on: 21 07 2015, 12:50:01 »
Dimsok, например так:
Code: [Select]
local mbb = require('m_msg_buttonsbar')
local icolib = require('m_icolib')
local message = require('m_message')

local script = {}

local moduleName = 'omegleNewCommand'
local description = m.Translate('Send /new')

local BBBF_ISCHATBUTTON = 16
local BBBF_ISLSIDEBUTTON = 64

function script.Load()
  mbb.AddButton({
    Module = moduleName,
    ButtonID = 1,
    Flags = BBBF_ISCHATBUTTON | BBBF_ISLSIDEBUTTON,
    Tooltip = description,
    Icon = icolib.AddIcon(moduleName, description)
  })
end

mbb.OnMsgToolBarButtonPressed(function(w, l)
  if l.Module == moduleName and l.ButtonID == 1 then
    message.Send(l.hContact, '/new')
  end
end)

function script.Unload()
  mbb.RemoveButton(bbButton)
end

return script;
« Last Edit: 22 07 2015, 12:19:49 by unsane »
Si no estas con nosotros, estas contra nosotros.
 

Offline Dimsok

  • Sr. Member
  • ****
  • Posts: 282
  • Country: ru
Re: MirLua
« Reply #14 on: 21 07 2015, 14:59:51 »
Unsane, у меня с этим скриптом ошибку при старте миранда выдает