Author Topic: PtokaX settings - get/set px settings. Lua 5.1 - 5.3 / PtokaX 0.4.2.0 and newer  (Read 1715 times)

0 Members and 1 Guest are viewing this topic.

Offline PPK

  • Administrator
  • Emperor
  • *****
  • Posts: 1 475
  • Karma: +209/-22
  • PtokaX developer
This is script to show actual PtokaX settings and to change them. Script require PtokaX 0.4.2.0 or higher. Script is compatible with Lua 5.1, 5.2 and 5.3.

Simply download http://www.PtokaX.org/Scripts/pxsettings.lua and move it to PtokaX_dir\scripts directory.
On PtokaX 0.5.0.3 with Lua 5.1 (because of bug) and older PtokaX versions is needed compatibility script http://www.PtokaX.org/Scripts/idcompat.lua that must be moved to PtokaX_dir\scripts\compat directory.

By default only Master (profile number 0) is allowed to use this script.
This can be changed in this part of script:
Code: Lua
  1. local tAllowedProfiles = {
  2.         -- true when profile is allowed to use this script or nil when not
  3.         -- when profile is not here then it is same as when is here with nil
  4.         [0] = true, -- Master
  5.         [1] = nil -- Operator
  6. }
For example when you want to allow operator (profile number 1) to use this script then change line
Code: Lua
  1. [1] = nil -- Operator
to
Code: Lua
  1. [1] = true -- Operator

Usage of this script is simple.
With command !help you can list all available commands:
Quote
Available commands:
   !getbooleans - display list of all actual boolean settings.
   !getbooleanids - display list of available boolean identificators.

   !getnumbers -  display list of all actual number settings.
   !getnumberids - display list of available number identificators.

   !getstrings -  display list of all actual string settings.
   !getstringids - display list of available string identificators.

   !getboolean <boolean_identificator> - return actual state for given boolean identificator.
   !getnumber <number_identificator> - return actual value for given number identificator.
   !getstring <string_identificator> - return actual string for given number identificator.

   !setboolean <boolean_identificator> <enable/disable> - change state for given boolean identificator.
   !setnumber <number_identificator> <number> - change number for given number identificator.
   !setstring <string_identificator> <string> - change string for given string identificator.

In case of requests, bug reports or questions post them below ;)

Complete script:
Code: Lua
  1. --[[
  2.                 PtokaX settings script version 0.9. Script to get and set all PtokaX settings.
  3.  
  4.                 Copyright (c) 2015 Petr Kozelka, PPK at PtokaX dot org
  5.  
  6.                 This script is licensed under
  7.                         Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
  8.                         See http://creativecommons.org/licenses/by-nc-nd/4.0/ for license details.
  9. ]]--
  10.  
  11. -- tables where we store lower case and sorted settings identificators
  12. local tBooleans = { }
  13. local tNumbers = { }
  14. local tStrings = { }
  15.  
  16. local tSortedBooleans = { }
  17. local tSortedNumbers = { }
  18. local tSortedStrings = { }
  19.  
  20. local tAllowedProfiles = {
  21.         -- true when profile is allowed to use this script or nil when not
  22.         -- when profile is not here then it is same as when is here with nil
  23.         [0] = true, -- Master
  24.         [1] = nil -- Operator
  25. }
  26.  
  27. -- compare function to sort settings identificators
  28. function fCompare(t1, t2)
  29.         if t1[2] < t2[2] then
  30.                 return true
  31.         elseif t1[2] == t2[2] and t1[1] > t2[1] then
  32.                 return true
  33.         end
  34. end
  35.  
  36. function OnStartup()
  37.         -- test if we running on supported PtokaX version
  38.         if Core.BuildNumber == nil then
  39.                 error("This script require PtokaX 0.4.2.0 build 258 or higher!")
  40.         end
  41.  
  42.         -- when we run on PtokaX before 0.5.0.3 then we need to load settings ids from compatibility script
  43.         if Core.BuildNumber < 482 then
  44.                 dofile(Core.GetPtokaXPath().."scripts/compat/idcompat.lua")
  45.         end
  46.  
  47.         -- bug in 0.5.0.3 where identificator tables missing when Lua 5.1 is used
  48.         if Core.BuildNumber == 482 and _VERSION == "Lua 5.1" then
  49.                 dofile(Core.GetPtokaXPath().."scripts/compat/idcompat.lua")
  50.         end
  51.  
  52.         RegMan = nil
  53.         BanMan = nil
  54.         ProfMan = nil
  55.         TmrMan = nil
  56.         UDPDbg = nil
  57.         ScriptMan = nil
  58.         IP2Country = nil
  59.  
  60.         collectgarbage()
  61.        
  62.         for k, v in pairs(SetMan.tBooleans) do
  63.                 tBooleans[string.lower(k)] = v
  64.                 table.insert(tSortedBooleans, { string.lower(k), v })
  65.         end
  66.  
  67.         table.sort(tSortedBooleans, fCompare)
  68.  
  69.         for k, v in pairs(SetMan.tNumbers) do
  70.                 tNumbers[string.lower(k)] = v
  71.                 table.insert(tSortedNumbers, { string.lower(k), v })
  72.         end
  73.  
  74.         table.sort(tSortedNumbers, fCompare)
  75.  
  76.         for k, v in pairs(SetMan.tStrings) do
  77.                 tStrings[string.lower(k)] = v
  78.                 table.insert(tSortedStrings, { string.lower(k), v })
  79.         end
  80.  
  81.         table.sort(tSortedStrings, fCompare)
  82. end
  83.  
  84. function ChatArrival(tUser, sData)
  85.         -- check if user is allowed to use this script
  86.         if tAllowedProfiles[tUser.iProfile] == nil then
  87.                 return false
  88.         end
  89.  
  90.         -- check if received command is starting with chat command prefix
  91.    if string.find(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), string.sub(sData, tUser.sNick:len()+4, tUser.sNick:len()+4), 1, true) == nil then
  92.       return false
  93.    end
  94.  
  95.         -- get command withou '<nick> ' and ending pipe
  96.         local sCmd = string.sub(sData, tUser.sNick:len()+5, -2)
  97.         local sParam = nil
  98.  
  99.         -- try to find space -> command with param
  100.         local nFound = string.find(sCmd, " ", 1, true)
  101.         if nFound ~= nil then
  102.                 sParam = string.sub(sCmd, nFound+1)
  103.                 sCmd = string.sub(sCmd, 1, nFound-1):lower()
  104.         else
  105.                 sCmd = sCmd:lower()
  106.         end
  107.  
  108.         -- commands without param
  109.         if sParam == nil then
  110.                 if sCmd == "getbooleans" then -- list actual boolean settings
  111.                         local sMsg = string.format("<%s> Actual boolean settings:\n", Core.GetHubSecAlias())
  112.  
  113.                         for i, n in ipairs(tSortedBooleans) do
  114.                                 local bValue = SetMan.GetBool(n[2])
  115.                                 if bValue == nil then
  116.                                         sMsg = sMsg..string.format("%s\t= disabled\n", n[1])
  117.                                 else
  118.                                         sMsg = sMsg..string.format("%s\t= enabled\n", n[1])
  119.                                 end
  120.                         end
  121.  
  122.                         Core.SendToUser(tUser, sMsg.."|")
  123.                         return true
  124.                 elseif sCmd == "getbooleanids" then -- list available boolean identificators
  125.                         local sMsg = string.format("<%s> Available boolean settings identificators:\n", Core.GetHubSecAlias())
  126.  
  127.                         for i, n in ipairs(tSortedBooleans) do
  128.                                 sMsg = sMsg..string.format("%s, ", n[1])
  129.                         end
  130.  
  131.                         sMsg = string.sub(sMsg, 1, -3)
  132.                         Core.SendToUser(tUser, sMsg.."\n\nMore info about identificators is in PtokaX Wiki: http://wiki.ptokax.org/doku.php?id=luaapi:setting_bools_ids|")
  133.                         return true
  134.                 elseif sCmd == "getnumbers" then -- list actual number settings
  135.                         local sMsg = string.format("<%s> Actual number settings:\n", Core.GetHubSecAlias())
  136.  
  137.                         for i, n in ipairs(tSortedNumbers) do
  138.                                 sMsg = sMsg..string.format("%s\t= %d\n", n[1], SetMan.GetNumber(n[2]))
  139.                         end
  140.  
  141.                         Core.SendToUser(tUser, sMsg.."|")
  142.                         return true
  143.                 elseif sCmd == "getnumberids" then -- list available number identificators
  144.                         local sMsg = string.format("<%s> Available number settings identificators:\n", Core.GetHubSecAlias())
  145.  
  146.                         for i, n in ipairs(tSortedNumbers) do
  147.                                 sMsg = sMsg..string.format("%s, ", n[1])
  148.                         end
  149.  
  150.                         sMsg = string.sub(sMsg, 1, -3)
  151.                         Core.SendToUser(tUser, sMsg.."\n\nMore info about identificators is in PtokaX Wiki: http://wiki.ptokax.org/doku.php?id=luaapi:setting_numbers_ids|")
  152.                         return true
  153.                 elseif sCmd == "getstrings" then -- list actual string settings
  154.                         local sMsg = string.format("<%s> Actual string settings:\n", Core.GetHubSecAlias())
  155.  
  156.                         for i, n in ipairs(tSortedStrings) do
  157.                                 local sValue = SetMan.GetString(n[2])
  158.                                 if sValue == nil then
  159.                                         sMsg = sMsg..string.format("%s\t= [empty value]\n", n[1])
  160.                                 else
  161.                                         sMsg = sMsg..string.format("%s\t= %s\n", n[1], sValue)
  162.                                 end
  163.                         end
  164.  
  165.                         Core.SendToUser(tUser, sMsg.."|")
  166.                         return true
  167.                 elseif sCmd == "getstringids" then -- list available string identificators
  168.                         local sMsg = string.format("<%s> Available string settings identificators:\n", Core.GetHubSecAlias())
  169.  
  170.                         for i, n in ipairs(tSortedStrings) do
  171.                                 sMsg = sMsg..string.format("%s, ", n[1])
  172.                         end
  173.  
  174.                         sMsg = string.sub(sMsg, 1, -3)
  175.                         Core.SendToUser(tUser, sMsg.."\n\nMore info about identificators is in PtokaX Wiki: http://wiki.ptokax.org/doku.php?id=luaapi:setting_strings_ids|")
  176.                         return true
  177.                 elseif sCmd == "help" then -- list available commands for this script
  178.                         local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  179.                         Core.SendToUser(tUser, string.format("<%s> Available commands:\n\t%sgetbooleans - display list of all actual boolean settings.\n\t%sgetbooleanids - display list of available boolean identificators.\n\n\t%sgetnumbers -  display list of all actual number settings.\n\t%sgetnumberids - display list of available number identificators.\n\n\t%sgetstrings -  display list of all actual string settings.\n\t%sgetstringids - display list of available string identificators.\n\n\t%sgetboolean <boolean_identificator> - return actual state for given boolean identificator.\n\t%sgetnumber <number_identificator> - return actual value for given number identificator.\n\t%sgetstring <string_identificator> - return actual string for given number identificator.\n\n\t%ssetboolean <boolean_identificator> <enable/disable> - change state for given boolean identificator.\n\t%ssetnumber <number_identificator> <number> - change number for given number identificator.\n\t%ssetstring <string_identificator> <string> - change string for given string identificator.|",
  180.                                 Core.GetHubSecAlias(), sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix, sCommandPrefix))
  181.                         return false
  182.                 end
  183.         else -- commands with param
  184.                 if sCmd == "getboolean" then -- return value for given boolean identificator
  185.                         if sParam:len() == 0 then
  186.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  187.                                 Core.SendToUser(tUser, string.format("<%s> Missing parameter for command: %sgetboolean <boolean_identificator>!|", Core.GetHubSecAlias(), sCommandPrefix))
  188.                                 return true
  189.                         end
  190.  
  191.                         sParam = sParam:lower()
  192.  
  193.                         if tBooleans[sParam] == nil then
  194.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  195.                                 Core.SendToUser(tUser, string.format("<%s> Parameter '%s' is not valid for command: %sgetboolean <boolean_identificator>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  196.                                 return true
  197.                         end
  198.  
  199.                         local bValue = SetMan.GetBool(tBooleans[sParam])
  200.                         if bValue == nil then
  201.                                 Core.SendToUser(tUser, string.format("<%s> Boolean value of parameter '%s' is: disabled.|", Core.GetHubSecAlias(), sParam))
  202.                         else
  203.                                 Core.SendToUser(tUser, string.format("<%s> Boolean value of parameter '%s' is: enabled.|", Core.GetHubSecAlias(), sParam))
  204.                         end
  205.  
  206.                         return true
  207.                 elseif sCmd == "getnumber" then -- return value for given number identificator
  208.                         if sParam:len() == 0 then
  209.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  210.                                 Core.SendToUser(tUser, string.format("<%s> Missing parameter for command: %sgetnumber <number_identificator>!|", Core.GetHubSecAlias(), sCommandPrefix))
  211.                                 return true
  212.                         end
  213.  
  214.                         sParam = sParam:lower()
  215.  
  216.                         if tNumbers[sParam] == nil then
  217.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  218.                                 Core.SendToUser(tUser, string.format("<%s> Parameter '%s' is not valid for command: %sgetnumber <number_identificator>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  219.                                 return true
  220.                         end
  221.  
  222.                         Core.SendToUser(tUser, string.format("<%s> Number value of parameter '%s' is: %d.|", Core.GetHubSecAlias(), sParam, SetMan.GetNumber(tNumbers[sParam])))
  223.                         return true
  224.                 elseif sCmd == "getstring" then -- return value for given string
  225.                         if sParam:len() == 0 then
  226.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  227.                                 Core.SendToUser(tUser, string.format("<%s> Missing parameter for command: %sgetstring <string_identificator>!|", Core.GetHubSecAlias(), sCommandPrefix))
  228.                                 return true
  229.                         end
  230.  
  231.                         sParam = sParam:lower()
  232.  
  233.                         if tStrings[sParam] == nil then
  234.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  235.                                 Core.SendToUser(tUser, string.format("<%s> Parameter '%s' is not valid for command: %sgetstring <string_identificator>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  236.                                 return true
  237.                         end
  238.  
  239.                         local sValue = SetMan.GetString(tStrings[sParam])
  240.                         if sValue == nil then
  241.                                 Core.SendToUser(tUser, string.format("<%s> String value of parameter '%s' is: [empty value].|", Core.GetHubSecAlias(), sParam))
  242.                         else
  243.                                 Core.SendToUser(tUser, string.format("<%s> String value of parameter '%s' is: %s.|", Core.GetHubSecAlias(), sParam, sValue))
  244.                         end
  245.  
  246.                         return true
  247.                 elseif sCmd == "setboolean" then -- set new value for given boolean identificator
  248.                         if sParam:len() == 0 then
  249.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  250.                                 Core.SendToUser(tUser, string.format("<%s> Missing parameter for command: %ssetboolean <boolean_identificator> <enable/disable>!|", Core.GetHubSecAlias(), sCommandPrefix))
  251.                                 return true
  252.                         end
  253.  
  254.                         local bState = nil
  255.                         local sState = nil
  256.  
  257.                         -- try to find space -> command with param and value
  258.                         local nFound = string.find(sParam, " ", 2, true)
  259.                         if nFound ~= nil then
  260.                                 sState = string.sub(sParam, nFound+1):lower()
  261.                                 sParam = string.sub(sParam, 1, nFound-1):lower()
  262.  
  263.                                 if sState == "enable" then
  264.                                         bState = true
  265.                                 elseif sState == "disable" then
  266.                                         bState = false
  267.                                 end
  268.                         end
  269.  
  270.                         if bState == nil then
  271.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  272.                                 Core.SendToUser(tUser, string.format("<%s> enable/disable state for param '%s' is not valid for command: %ssetboolean <boolean_identificator> <enable/disable>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  273.                                 return true
  274.                         end
  275.  
  276.                         if tBooleans[sParam] == nil then
  277.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  278.                                 Core.SendToUser(tUser, string.format("<%s> Parameter '%s' is not valid for command: %ssetboolean <boolean_identificator> <enable/disable>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  279.                                 return true
  280.                         end
  281.  
  282.                         SetMan.SetBool(tBooleans[sParam], bState)
  283.  
  284.                         local bValue = SetMan.GetBool(tBooleans[sParam])
  285.  
  286.                         if (bValue == true and bState == true) or (bValue == nil and bState == false) then
  287.                                 Core.SendToUser(tUser, string.format("<%s> Boolean value of parameter '%s' changed to: %s.|", Core.GetHubSecAlias(), sParam, sState))
  288.                         else
  289.                                 Core.SendToUser(tUser, string.format("<%s> Change for boolean value of parameter '%s' failed!|", Core.GetHubSecAlias(), sParam))
  290.                         end
  291.  
  292.                         return true
  293.                 elseif sCmd == "setnumber" then -- set value for given number identificator
  294.                         if sParam:len() == 0 then
  295.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  296.                                 Core.SendToUser(tUser, string.format("<%s> Missing parameter for command: %ssetnumber <number_identificator> <number>!|", Core.GetHubSecAlias(), sCommandPrefix))
  297.                                 return true
  298.                         end
  299.  
  300.                         local nValue = nil
  301.  
  302.                         -- try to find space -> command with param and value
  303.                         local nFound = string.find(sParam, " ", 2, true)
  304.                         if nFound ~= nil then
  305.                                 nValue = tonumber(string.sub(sParam, nFound+1))
  306.                                 sParam = string.sub(sParam, 1, nFound-1):lower()
  307.                         end
  308.  
  309.                         if nValue == nil then
  310.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  311.                                 Core.SendToUser(tUser, string.format("<%s> New numeric value for param '%s' is not valid for command: %ssetnumber <number_identificator> <number>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  312.                                 return true
  313.                         end
  314.  
  315.                         if tNumbers[sParam] == nil then
  316.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  317.                                 Core.SendToUser(tUser, string.format("<%s> Parameter '%s' is not valid for command: %ssetnumber <number_identificator> <number>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  318.                                 return true
  319.                         end
  320.  
  321.                         SetMan.SetNumber(tNumbers[sParam], nValue)
  322.  
  323.                         local nNewValue = SetMan.GetNumber(tNumbers[sParam])
  324.  
  325.                         if nValue == nNewValue then
  326.                                 Core.SendToUser(tUser, string.format("<%s> Number value of parameter '%s' changed to: %s.|", Core.GetHubSecAlias(), sParam, nValue))
  327.                         else
  328.                                 Core.SendToUser(tUser, string.format("<%s> Change for number value of parameter '%s' failed!|", Core.GetHubSecAlias(), sParam))
  329.                         end
  330.  
  331.                         return true
  332.                 elseif sCmd == "setstring" then -- set value for given string identificator
  333.                         if sParam:len() == 0 then
  334.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  335.                                 Core.SendToUser(tUser, string.format("<%s> Missing parameter for command: %ssetstring <string_identificator> <string>!|", Core.GetHubSecAlias(), sCommandPrefix))
  336.                                 return true
  337.                         end
  338.  
  339.                         local sString = nil
  340.  
  341.                         -- try to find space -> command with param and value
  342.                         local nFound = string.find(sParam, " ", 2, true)
  343.                         if nFound ~= nil then
  344.                                 sString = string.sub(sParam, nFound+1)
  345.                                 sParam = string.sub(sParam, 1, nFound-1):lower()
  346.                         end
  347.  
  348.                         if sString == nil then
  349.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  350.                                 Core.SendToUser(tUser, string.format("<%s> String for param '%s' is not valid for command: %ssetstring <string_identificator> <string>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  351.                                 return true
  352.                         end
  353.  
  354.                         if tStrings[sParam] == nil then
  355.                                 local sCommandPrefix = string.sub(SetMan.GetString(SetMan.tStrings.ChatCommandsPrefixes), 1, 1)
  356.                                 Core.SendToUser(tUser, string.format("<%s> Parameter '%s' is not valid for command: %ssetstring <string_identificator> <string>!|", Core.GetHubSecAlias(), sParam, sCommandPrefix))
  357.                                 return true
  358.                         end
  359.  
  360.                         SetMan.SetString(tStrings[sParam], sString)
  361.  
  362.                         local sNewString = SetMan.GetString(tStrings[sParam])
  363.  
  364.                         if (sString == sNewString) or (sNewString == nil and sString:len() == 0) then
  365.                                 Core.SendToUser(tUser, string.format("<%s> String value of parameter '%s' changed to: %s.|", Core.GetHubSecAlias(), sParam, sString))
  366.                         else
  367.                                 Core.SendToUser(tUser, string.format("<%s> Change for string value of parameter '%s' failed!|", Core.GetHubSecAlias(), sParam))
  368.                         end
  369.  
  370.                         return true
  371.                 end
  372.         end
  373. end
  374.  
"Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris." - Larry Wall

PtokaX forum