summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/blist/blist.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/blist/blist.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/blist/blist.lua317
1 files changed, 317 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/blist/blist.lua b/Data/BuiltIn/Libraries/lua-addons/addons/blist/blist.lua
new file mode 100644
index 0000000..509d6c1
--- /dev/null
+++ b/Data/BuiltIn/Libraries/lua-addons/addons/blist/blist.lua
@@ -0,0 +1,317 @@
+--[[
+Copyright (c) 2013, Ikonic
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Blist nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL IKONIC BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+]]
+
+
+_addon.name = 'Blist'
+_addon.author = 'Ragnarok.Ikonic'
+_addon.version = '1.2.0.1'
+
+require 'tables'
+require 'strings'
+require 'chat/colors'
+local config = require 'config'
+require 'logger'
+
+local defaults = T{}
+defaults.useblist = true
+defaults.linkshell = true
+defaults.party = true
+defaults.tell = true
+defaults.emote = true
+defaults.say = true
+defaults.shout = true
+defaults.bazaar = true
+defaults.examine = true
+defaults.mutedcolor = 57
+
+settings = T{}
+members = T{}
+
+windower.register_event('load',function()
+ settings = config.load(defaults)
+ members = config.load("data/members.xml",members)
+ windower.send_command('alias blist lua command blist')
+ windower.send_command('alias bl lua command blist')
+ windower.add_to_chat(55, "Loading ".._addon.name.." v".._addon.version.." (written by ".._addon.author..")")
+ windower.add_to_chat(160,' Type '..string.color('//blist help',204,160)..' for a list of possible commands.')
+end)
+
+windower.register_event('unload',function()
+ windower.send_command('unalias blist')
+ windower.send_command('unalias bl')
+ windower.add_to_chat(55, "Unloading ".._addon.name.." v".._addon.version..".")
+end)
+
+windower.register_event('login',function (name)
+ settings = config.load(defaults)
+ windower.add_to_chat(160,"Loading "..string.color(_addon.name,55,160).." settings for "..windower.ffxi.get_player().name..".")
+end)
+
+function addon_command(...)
+ local args = {...}
+ local dummysettings = table.copy(settings)
+ if args[1] ~= nil then
+ comm = args[1]:lower()
+ if comm == 'help' then
+ windower.add_to_chat(55,_addon.name.." v".._addon.version..' possible commands:')
+ windower.add_to_chat(160,' '..string.color('//Blist',204,160)..' and '..string.color('//bl',204,160)..' are both valid commands.')
+ windower.add_to_chat(160,' '..string.color('//bl help',204,160)..' : Lists this menu.')
+ windower.add_to_chat(160,' '..string.color('//bl status',204,160)..' : Shows current configuration.')
+ windower.add_to_chat(160,' '..string.color('//bl list',204,160)..' : Displays blacklist.')
+ windower.add_to_chat(160,' '..string.color('//bl useblist|linkshell|party|tell|emote|say|shout|bazaar|examine',204,160)..' : Toggles using '.._addon.name..' for said chat mode.')
+ windower.add_to_chat(160,' '..string.color('//bl mutedcolor #',204,160)..' : Sets color for muted communication. Valid values 1-255.')
+ windower.add_to_chat(160,' '..string.color('//bl add|update name # hidetype reason',204,160)..' : Adds to or updates a user on your blist.')
+ windower.add_to_chat(160,' '..string.color(' name',204,160)..' = name of person you want to blist')
+ windower.add_to_chat(160,' '..string.color(' #',204,160)..' = number of days to blist said person; 0 = forever')
+ windower.add_to_chat(160,' '..string.color(' hidetype',204,160)..' = how blacklisted you want said person to be; valid options: hard, soft, muted')
+ windower.add_to_chat(160,' '..string.color(' hard',204,160)..' = full blist, nothing gets through')
+ windower.add_to_chat(160,' '..string.color(' soft',204,160)..' = message saying conversation from name was blocked')
+ windower.add_to_chat(160,' '..string.color(' muted',204,160)..' = message comes through, but in a different color')
+ windower.add_to_chat(160,' '..string.color(' reason',204,160)..' = reason why you are adding said person to blist')
+ windower.add_to_chat(160,' '..string.color('//bl delete|remove name',204,160)..' : Removes a user from your blist.')
+ windower.add_to_chat(160,' '..string.color('//bl qa name [reason]',204,160)..' : Adds a user to your blist w/o requiring extra details (reason is optional).')
+ elseif comm == 'status' then
+ showStatus()
+ elseif comm == 'list' then
+ windower.add_to_chat(160,string.color("Name",56).." | "..
+ string.color("TempTime",3).." | "..
+ string.color("HideType",settings.mutedcolor).." | "..
+ string.color("Reason",59).." | "..
+ string.color("Date Added",29))
+ for i,v in pairs(members) do
+ if members[i].hidetype ~= "delete" then
+ windower.add_to_chat(160,string.color(tostring(i),56) .. " | " ..
+ string.color(tostring(members[i].temptime),3) .. " | " ..
+ string.color(tostring(members[i].hidetype),settings.mutedcolor) .. " | " ..
+ string.color(tostring(members[i].reason),59) .. " | " ..
+ string.color(tostring(members[i].date),29)
+ )
+ end
+ end
+ elseif comm == "add" or comm == "update" then
+ if type(args[2]:match("(%a+)")) ~= "string"
+ or type(tonumber(args[3]:match("(%d+)"))) ~= "number"
+ or S({'hard','soft','muted'}):contains(args[4]:lower()) ~= true
+ then
+ windower.add_to_chat(160,"Invalid format; use the following: "..string.color("//bl "..comm.." name temptime hidetype reason",204,160))
+ else
+ com2 = args[2] -- name
+ com3 = tonumber(args[3]) -- temptime
+ com4 = args[4]:lower() -- hidetype
+ if args[5] ~= nil then
+ com5 = table.slice(args,5)
+ com5mess = tostring(table.sconcat(com5))
+ else
+ com5mess = nil
+ end
+
+ local addTemp = T{}
+ addTemp[com2] = {}
+ addTemp[com2].reason = com5mess
+ addTemp[com2].date = os.date("%x", date)
+ addTemp[com2].temptime = com3
+ addTemp[com2].hidetype = com4
+
+ members = members:update(addTemp)
+ members:save('all')
+ windower.send_ipc_message("blist reload members")
+ windower.add_to_chat(160,"Updating "..string.color(args[2],56,160).." entry on "..string.color(_addon.name,55,160)..".")
+ end
+ elseif comm == "qa" then
+ if type(args[2]:match("(%a+)")) ~= "string" then
+ windower.add_to_chat(160,"Invalid format; use the following: "..string.color("//bl qa <name> %[reason%]",204,160))
+ else
+ com2 = args[2] -- name
+ if args[3] ~= nil then
+ com3 = table.slice(args,3)
+ com3mess = tostring(table.sconcat(com3))
+ else
+ com3mess = nil
+ end
+
+ local addTemp = T{}
+ addTemp[com2] = {}
+ addTemp[com2].reason = com3mess
+ addTemp[com2].date = os.date("%x", date)
+ addTemp[com2].temptime = 0
+ addTemp[com2].hidetype = "hard"
+
+ members = members:update(addTemp)
+ members:save('all')
+ windower.send_ipc_message("blist reload members")
+ windower.add_to_chat(160,"Updating "..string.color(string.ucfirst(args[2]),56,160).." entry on "..string.color(_addon.name,55,160)..".")
+ end
+ elseif comm == "remove" or comm == "delete" then
+ if members[args[2]] ~= nil then
+ windower.add_to_chat(160,"Removing "..string.color(args[2],56,160).." from "..string.color(_addon.name,55,160)..".")
+ members[args[2]].hidetype = "delete"
+ members:save('all')
+ windower.send_ipc_message("blist reload members")
+ else
+ windower.add_to_chat(160,"User "..string.color(args[2],56,160).." not in "..string.color(_addon.name,55,160).." database; cannot remove.")
+ end
+ elseif comm == "mutedcolor" or comm == "color" then
+ com2num = tonumber(args[2])
+ if (com2num ~= nil) and (com2num >= 1 and com2num <= 255) then
+ settings[comm] = com2num
+ else
+ settings[comm] = defaults[comm]
+ windower.add_to_chat(160," Invalid "..string.color(comm,settings.mutedcolor,160).." value; acceptable values: 1-255. Setting default.")
+ end
+ showStatus(comm)
+ if tostring(com2num) ~= tostring(dummysettings[comm]) then
+ settings:save() -- current character only
+ windower.add_to_chat(55,"Saving "..string.color(_addon.name,204,55).." settings.")
+ end
+ elseif S({'useblist','linkshell','party','tell','emote','say','shout','bazaar','examine'}):contains(comm) then
+ settings[comm] = not settings[comm]
+ showStatus(comm)
+ if tostring(com2) ~= tostring(dummysettings[comm]) then
+ settings:save() -- current character only
+ windower.add_to_chat(55,"Saving "..string.color(_addon.name,204,55).." settings.")
+ end
+
+ elseif comm == "settings" then
+ settings:vprint()
+
+ else
+ windower.add_to_chat(160, " Not a valid ".._addon.name.." v".._addon.version.." command. "..string.color('//bl help',204,160).." for a list of valid commands.")
+ return
+ end
+ else
+ addon_command('help')
+ end
+end
+
+windower.register_event('addon command',addon_command)
+
+function showStatus(var)
+ if var == "mutedcolor" then
+ windower.add_to_chat(160," Muted"..string.color("Color",settings.mutedcolor,160)..": " .. string.color(tostring(settings.mutedcolor),204,160))
+ elseif var == "useblist" then
+ windower.add_to_chat(160," UseBlist: " .. string.color(onOffPrint(settings[var]),204,160))
+ elseif var ~= nul then
+ windower.add_to_chat(160," UseBlistOn"..var:ucfirst()..": " .. string.color(onOffPrint(settings[var]),204,160))
+ else
+ windower.add_to_chat(160," UseBlist: " .. string.color(onOffPrint(settings.useblist),204,160))
+ windower.add_to_chat(160," UseBlistOnLinkshell: " .. string.color(onOffPrint(settings.linkshell),204,160))
+ windower.add_to_chat(160," UseBlistOnParty: " .. string.color(onOffPrint(settings.party),204,160))
+ windower.add_to_chat(160," UseBlistOnTell: " .. string.color(onOffPrint(settings.tell),204,160))
+ windower.add_to_chat(160," UseBlistOnEmote: " .. string.color(onOffPrint(settings.emote),204,160))
+ windower.add_to_chat(160," UseBlistOnSay: " .. string.color(onOffPrint(settings.say),204,160))
+ windower.add_to_chat(160," UseBlistOnShout: " .. string.color(onOffPrint(settings.shout),204,160))
+ windower.add_to_chat(160," UseBlistOnBazaar: " .. string.color(onOffPrint(settings.bazaar),204,160))
+ windower.add_to_chat(160," UseBlistOnExamine: " .. string.color(onOffPrint(settings.examine),204,160))
+ windower.add_to_chat(160," Muted"..string.color("Color",settings.mutedcolor,160)..": " .. string.color(tostring(settings.mutedcolor),204,160))
+ end
+end
+
+function onOffPrint(bleh)
+ if (bleh ~= nul) then
+ if (bleh == 1) or (bleh == true) then
+ bleh = "ON";
+ else
+ bleh = "OFF";
+ end
+ else
+ bleh = "OFF";
+ end
+ return bleh;
+end
+
+windower.register_event('ipc message',function (msg)
+ if msg == "blist reload members" then
+ members = config.load("data/members.xml",members)
+-- windower.add_to_chat(160, "Reloading members database.")
+ end
+end)
+
+windower.register_event('incoming text',function (original, modified, mode)
+ if settings.useblist == true then
+ name = "blist"
+ if mode == 14 and settings.linkshell == true then -- linkshell (others)
+ a,z,name = string.find(original,'<(%a+)> ')
+ elseif mode == 13 and settings.party == true then -- party (others)
+ a,z,name = string.find(original,'%((%a+)%) ')
+ elseif mode == 12 and settings.tell == true then -- tell (in)
+ a,z,name = string.find(original,'(%a+)>> ')
+ elseif (mode == 15 or mode == 7) and settings.emote == true then -- emote
+ a,z,name = string.find(original,'(%a+) ')
+ elseif mode == 1 and settings.say == true then -- say
+ a,z,name = string.find(original,'(%a+) ')
+ elseif mode == 2 and settings.shout == true then -- shout
+ a,z,name = string.find(original,'(%a+) ')
+ elseif mode == 121 and settings.bazaar == true then -- bazaar
+ a,z,name,filler = string.find(original,'(%a+) (.*) bazaar%.')
+ elseif mode == 208 and settings.examine == true then -- examine
+ a,z,name = string.find(original,'(%a+) examines you%.')
+ else
+ name = "blist"
+ end
+ if name ~= nil then
+ name = name:lower()
+ else
+ name = "blist"
+ end
+
+ if name ~= "blist" and
+ name ~= nil and
+ members[name] ~= nil and
+ members[name].hidetype ~= "delete" then
+ local pattern = "(%d+)%/(%d+)%/(%d+)"
+ local xmonth, xday, xyear = members[name].date:match(pattern)
+ local blah = tonumber(members[name].temptime)
+ if #xyear < 4 then
+ xyear = tonumber("20"..tostring(xyear))
+ end
+ local convertedT = os.time({year = xyear, month = xmonth, day = xday+blah})
+ local nowTime = os.time()
+ if nowTime > convertedT and members[name].temptime ~= 0 then
+ members[name].hidetype = "delete"
+ members:save('all')
+ windower.send_ipc_message("blist reload members")
+ end
+
+ if members[name].hidetype == "delete" then
+ modified = original
+ elseif members[name].hidetype == "hard" or #members[name].hidetype == 0 then
+ modified = ''
+ elseif members[name].hidetype == "soft" then
+ modified = _addon.name.." blocked message from "..string.ucfirst(name).."."
+ elseif members[name].hidetype == "muted" then
+ modified = string.color(original:trim(),settings.mutedcolor)
+ else
+ members[name].hidetype = "hard"
+ members:save('all')
+ windower.send_ipc_message("blist reload members")
+ modified = ''
+ end
+ end
+ return modified
+ end
+end)