You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
425 lines
13 KiB
425 lines
13 KiB
|
3 years ago
|
---------------------------------------------------------------------------------
|
||
|
|
--
|
||
|
|
-- Prat - A framework for World of Warcraft chat mods
|
||
|
|
--
|
||
|
|
-- Copyright (C) 2006-2018 Prat Development Team
|
||
|
|
--
|
||
|
|
-- This program is free software; you can redistribute it and/or
|
||
|
|
-- modify it under the terms of the GNU General Public License
|
||
|
|
-- as published by the Free Software Foundation; either version 2
|
||
|
|
-- of the License, or (at your option) any later version.
|
||
|
|
--
|
||
|
|
-- This program is distributed in the hope that it will be useful,
|
||
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
|
-- GNU General Public License for more details.
|
||
|
|
--
|
||
|
|
-- You should have received a copy of the GNU General Public License
|
||
|
|
-- along with this program; if not, write to:
|
||
|
|
--
|
||
|
|
-- Free Software Foundation, Inc.,
|
||
|
|
-- 51 Franklin Street, Fifth Floor,
|
||
|
|
-- Boston, MA 02110-1301, USA.
|
||
|
|
--
|
||
|
|
--
|
||
|
|
-------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
Prat:AddModuleToLoad(function()
|
||
|
|
|
||
|
|
local PRAT_MODULE = Prat:RequestModuleName("Invites")
|
||
|
|
|
||
|
|
if PRAT_MODULE == nil then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local module = Prat:NewModule(PRAT_MODULE, "AceHook-3.0")
|
||
|
|
|
||
|
|
-- define localized strings
|
||
|
|
local PL = module.PL
|
||
|
|
|
||
|
|
--[==[@debug@
|
||
|
|
PL:AddLocale(PRAT_MODULE, "enUS", {
|
||
|
|
module_name = "Invites",
|
||
|
|
module_desc = "Options for easy inviting of players to groups",
|
||
|
|
["Enable Alt-Invite"] = true,
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = true,
|
||
|
|
["Enable Invite Links"] = true,
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = true,
|
||
|
|
})
|
||
|
|
--@end-debug@]==]
|
||
|
|
|
||
|
|
-- These Localizations are auto-generated. To help with localization
|
||
|
|
-- please go to http://www.wowace.com/projects/prat-3-0/localization/
|
||
|
|
--@non-debug@
|
||
|
|
do
|
||
|
|
local L
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
["Enable Alt-Invite"] = true,
|
||
|
|
["Enable Invite Links"] = true,
|
||
|
|
["module_desc"] = "Options for easy inviting of players to groups",
|
||
|
|
["module_name"] = "Invites",
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = true,
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = true,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "enUS",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Alt-Invite"] = "Enable Alt-Invite",
|
||
|
|
["Enable Invite Links"] = "Activer les liens d'invitation",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_desc"] = "Options for easy inviting of players to groups",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_name"] = "Invites",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "Toggle group invites by alt-clicking hyperlinked keywords like 'invite'.",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "Toggle group invites by alt-clicking on player name.",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "frFR",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
["Enable Alt-Invite"] = "Alternative Einladung aktivieren",
|
||
|
|
["Enable Invite Links"] = "Aktiviere Einladungs-Links",
|
||
|
|
["module_desc"] = "Optionen zum einfachen Einladen von Spielern für Gruppen",
|
||
|
|
["module_name"] = "Einladungen",
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "Zum Umschalten der Gruppeneinladungen, klicke bei gedrückter Alt-Taste auf Hyperlink-Schlüsselwörter wie \"einladen\".",
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "Zum Umschalten der Gruppeneinladungen, klicke bei gedrückter Alt-Taste auf den Spielernamen.",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "deDE",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
["Enable Alt-Invite"] = "Alt-초대 켜기",
|
||
|
|
["Enable Invite Links"] = "초대 링크 켜기",
|
||
|
|
["module_desc"] = "사용자 그룹 쉽게 추가하기 옵션",
|
||
|
|
["module_name"] = "초대 [Invites]",
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "'초대'와 같은 하이퍼링크된 키워드를 클릭하여 그룹 초대를 전환합니다.",
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "플레이어 이름을 Alt-클릭하여 그룹 초대를 전환합니다.",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "koKR",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Alt-Invite"] = "Enable Alt-Invite",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Invite Links"] = "Enable Invite Links",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_desc"] = "Options for easy inviting of players to groups",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_name"] = "Invites",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "Toggle group invites by alt-clicking hyperlinked keywords like 'invite'.",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "Toggle group invites by alt-clicking on player name.",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "esMX",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
["Enable Alt-Invite"] = "включить Alt-приглашение ",
|
||
|
|
["Enable Invite Links"] = "Показать ссылку \"приглашения\" ",
|
||
|
|
["module_desc"] = "Опции простого приглашения игроков в группу ",
|
||
|
|
["module_name"] = "Приглашения ",
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = [=[Переключить группу приглашений, нажимая альт-клик по гиперссылкам, таким как «пригласить».
|
||
|
|
]=],
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = [=[Переключить группу приглашений, нажав Alt на имя игрока.
|
||
|
|
]=],
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "ruRU",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
["Enable Alt-Invite"] = "启用Alt-调出",
|
||
|
|
["Enable Invite Links"] = "启用调出链接",
|
||
|
|
["module_desc"] = "便捷邀请玩家加入队伍的选项",
|
||
|
|
["module_name"] = "邀请",
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "通过按住Alt键单击超链接的关键字(如“邀请”)来切换组队邀请。",
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "通过按住Alt键点击玩家名字来切换组队邀请。",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "zhCN",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Alt-Invite"] = "Enable Alt-Invite",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Invite Links"] = "Enable Invite Links",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_desc"] = "Options for easy inviting of players to groups",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_name"] = "Invites",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "Toggle group invites by alt-clicking hyperlinked keywords like 'invite'.",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "Toggle group invites by alt-clicking on player name.",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "esES",L)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
L = {
|
||
|
|
["Invites"] = {
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Alt-Invite"] = "Enable Alt-Invite",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Enable Invite Links"] = "Enable Invite Links",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_desc"] = "Options for easy inviting of players to groups",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["module_name"] = "Invites",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."] = "Toggle group invites by alt-clicking hyperlinked keywords like 'invite'.",
|
||
|
|
--[[Translation missing --]]
|
||
|
|
["Toggle group invites by alt-clicking on player name."] = "Toggle group invites by alt-clicking on player name.",
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PL:AddLocale(PRAT_MODULE, "zhTW",L)
|
||
|
|
|
||
|
|
|
||
|
|
end
|
||
|
|
--@end-non-debug@
|
||
|
|
|
||
|
|
Prat:SetModuleOptions(module, {
|
||
|
|
name = PL.module_name,
|
||
|
|
desc = PL.module_desc,
|
||
|
|
type = "group",
|
||
|
|
args = {
|
||
|
|
altinvite = {
|
||
|
|
name = PL["Enable Alt-Invite"],
|
||
|
|
desc = PL["Toggle group invites by alt-clicking on player name."],
|
||
|
|
type = "toggle",
|
||
|
|
order = 151,
|
||
|
|
},
|
||
|
|
linkinvite = {
|
||
|
|
name = PL["Enable Invite Links"],
|
||
|
|
desc = PL["Toggle group invites by alt-clicking hyperlinked keywords like 'invite'."],
|
||
|
|
type = "toggle",
|
||
|
|
order = 152,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
|
||
|
|
Prat:SetModuleDefaults(module.name, {
|
||
|
|
profile = {
|
||
|
|
on = true,
|
||
|
|
altinvite = true,
|
||
|
|
linkinvite = true,
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
function module:OnModuleEnable()
|
||
|
|
self:SetAltInvite()
|
||
|
|
|
||
|
|
Prat.RegisterLinkType({ linkid = "invplr", linkfunc = self.Invite_Link, handler = self }, self.name)
|
||
|
|
Prat.RegisterLinkType({ linkid = "player", linkfunc = self.Player_Link, handler = self }, self.name)
|
||
|
|
end
|
||
|
|
|
||
|
|
function module:OnValueChanged(info, b)
|
||
|
|
local field = info[#info]
|
||
|
|
if field == "altinvite" or field == "linkinvite" then
|
||
|
|
self:SetAltInvite()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- This function is a wrapper for the Blizzard invite function, to account for the differences between Retail and Classic
|
||
|
|
function module:InviteUnit(...)
|
||
|
|
if Prat.IsRetail then
|
||
|
|
return C_PartyInfo.InviteUnit(...)
|
||
|
|
else
|
||
|
|
return InviteUnit(...)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- This function is a wrapper for the Blizzard invite function, to account for the differences between Retail and Classic
|
||
|
|
function module:CanInvite(...)
|
||
|
|
if Prat.IsRetail then
|
||
|
|
return C_PartyInfo.CanInvite(...)
|
||
|
|
else
|
||
|
|
return CanGroupInvite(...)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function module:SetAltInvite()
|
||
|
|
if (self.db.profile.altinvite) then
|
||
|
|
self:SecureHook("SetItemRef")
|
||
|
|
else
|
||
|
|
self:Unhook("SetItemRef")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local EVENTS_FOR_INVITE = {
|
||
|
|
["CHAT_MSG_GUILD"] = true,
|
||
|
|
["CHAT_MSG_OFFICER"] = true,
|
||
|
|
["CHAT_MSG_PARTY"] = true,
|
||
|
|
["CHAT_MSG_RAID"] = true,
|
||
|
|
["CHAT_MSG_RAID_LEADER"] = true,
|
||
|
|
["CHAT_MSG_RAID_WARNING"] = true,
|
||
|
|
["CHAT_MSG_SAY"] = true,
|
||
|
|
["CHAT_MSG_YELL"] = true,
|
||
|
|
["CHAT_MSG_WHISPER"] = true,
|
||
|
|
["CHAT_MSG_CHANNEL"] = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local function Invite(text, ...)
|
||
|
|
if module.db.profile.linkinvite then
|
||
|
|
return module:ScanForLinks(text, Prat.SplitMessage.PLAYERLINK)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local INVALID_NAMES = {
|
||
|
|
["meh"] = true,
|
||
|
|
["now"] = true,
|
||
|
|
["plz"] = true,
|
||
|
|
["pls"] = true,
|
||
|
|
["please"] = true,
|
||
|
|
["when"] = true,
|
||
|
|
["group"] = true,
|
||
|
|
["raid"] = true,
|
||
|
|
["grp"] = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local INVALID_NAME_REFERENCE = {
|
||
|
|
["him"] = true,
|
||
|
|
["her"] = true,
|
||
|
|
["them"] = true,
|
||
|
|
["someone"] = true,
|
||
|
|
}
|
||
|
|
|
||
|
|
local function InviteSomone(text, name)
|
||
|
|
if module.db.profile.linkinvite and name then
|
||
|
|
name = name:lower() -- TODO Use UTF8Lib
|
||
|
|
if name:len() > 2 and not INVALID_NAMES[name] then
|
||
|
|
if INVALID_NAME_REFERENCE[name] then
|
||
|
|
return Prat:RegisterMatch(text)
|
||
|
|
else
|
||
|
|
return module:ScanForLinks(text, name)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
Prat:SetModulePatterns(module, {
|
||
|
|
{ pattern = "(send%s+invite%s+to%s+" .. Prat.AnyNamePattern .. ")", matchfunc = InviteSomone },
|
||
|
|
{ pattern = "(invi?t?e?%s+" .. Prat.AnyNamePattern .. ")", matchfunc = InviteSomone },
|
||
|
|
{ pattern = "(" .. Prat.GetNamePattern("invites?%??") .. ")", matchfunc = Invite },
|
||
|
|
{ pattern = "(" .. Prat.GetNamePattern("inv%??") .. ")", matchfunc = Invite },
|
||
|
|
{ pattern = "(초대)", matchfunc = Invite },
|
||
|
|
{ pattern = "(組%??)$", matchfunc = Invite },
|
||
|
|
{ pattern = "(組我%??)$", matchfunc = Invite },
|
||
|
|
})
|
||
|
|
|
||
|
|
function module:Invite_Link(link, text, button, ...)
|
||
|
|
if self.db.profile.linkinvite then
|
||
|
|
local name = strsub(link, 8);
|
||
|
|
if (name and (strlen(name) > 0)) then
|
||
|
|
local begin = string.find(name, "%s[^%s]+$");
|
||
|
|
if (begin) then
|
||
|
|
name = strsub(name, begin + 1);
|
||
|
|
end
|
||
|
|
|
||
|
|
self:InviteUnit(name);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
function module:SetItemRef(link, ...)
|
||
|
|
if (strsub(link, 1, 6) == "player") then
|
||
|
|
self:Player_Link(link)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function module:Player_Link(link)
|
||
|
|
if self.db.profile.altinvite then
|
||
|
|
local name = strsub(link, 8);
|
||
|
|
if (name and (strlen(name) > 0)) then
|
||
|
|
local begin, nend = string.find(name, "%s*[^%s:]+");
|
||
|
|
if (begin) then
|
||
|
|
name = strsub(name, begin, nend);
|
||
|
|
end
|
||
|
|
if (IsAltKeyDown()) then
|
||
|
|
self:InviteUnit(name);
|
||
|
|
if ChatEdit_GetActiveWindow() then
|
||
|
|
ChatEdit_OnEscapePressed(ChatEdit_GetActiveWindow())
|
||
|
|
end
|
||
|
|
return false;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
|
||
|
|
function module:ScanForLinks(text, name)
|
||
|
|
if text == nil then
|
||
|
|
return ""
|
||
|
|
end
|
||
|
|
|
||
|
|
local enabled = self.db.profile.linkinvite
|
||
|
|
|
||
|
|
if enabled and self.CanInvite() then
|
||
|
|
if Prat.CurrentMessage then
|
||
|
|
if EVENTS_FOR_INVITE[Prat.CurrentMessage.EVENT] then
|
||
|
|
return self:InviteLink(text, name)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return text
|
||
|
|
end
|
||
|
|
|
||
|
|
function module:InviteLink(link, name)
|
||
|
|
return Prat:RegisterMatch(("|cff%s|Hinvplr:%s|h[%s]|h|r"):format("ffff00", name, link))
|
||
|
|
end
|
||
|
|
end)
|