-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor(addon): use ace framework to split up addon into multiple mo…
…dules and add custom slash commands making it easier to fetch and format player info
- Loading branch information
Dima
authored and
Exoridus
committed
Apr 15, 2023
1 parent
257fc97
commit 528ecd2
Showing
10 changed files
with
266 additions
and
101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,25 @@ | ||
package-as: Scambuster-Venoxis | ||
|
||
enable-nolib-creation: yes | ||
enable-nolib-creation: no | ||
|
||
ignore: | ||
- README.md | ||
- Types | ||
- CHANGELOG.md | ||
- LICENSE | ||
|
||
externals: | ||
Libs/LibStub: https://repos.wowace.com/wow/libstub/trunk | ||
Libs/AceAddon-3.0: https://repos.wowace.com/wow/ace3/trunk/AceAddon-3.0 | ||
Libs/AceConsole-3.0: https://repos.wowace.com/wow/ace3/trunk/AceConsole-3.0 | ||
Libs/AceGUI-3.0: https://repos.wowace.com/wow/ace3/trunk/AceGUI-3.0 | ||
|
||
required-dependencies: | ||
- scambuster | ||
|
||
embedded-libraries: | ||
- libstub | ||
- ace3 | ||
- ace3 | ||
|
||
manual-changelog: | ||
filename: CHANGELOG.md | ||
markup-type: markdown |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
local n, ns = ...; | ||
local AceAddon = LibStub("AceAddon-3.0"); | ||
local AceGUI = LibStub("AceGUI-3.0"); | ||
local Addon = AceAddon:NewAddon(n, "AceConsole-3.0"); | ||
local raceToFaction = { | ||
["Human"] = "Alliance", | ||
["Dwarf"] = "Alliance", | ||
["NightElf"] = "Alliance", | ||
["Draenei"] = "Alliance", | ||
["Gnome"] = "Alliance", | ||
["Orc"] = "Horde", | ||
["Scourge"] = "Horde", | ||
["Tauren"] = "Horde", | ||
["Troll"] = "Horde", | ||
["BloodElf"] = "Horde", | ||
}; | ||
local template = [=[ | ||
[%d] = { | ||
name = "%s", | ||
guid = "%s", | ||
class = "%s", | ||
faction = "%s", | ||
description = "", | ||
url = "", | ||
category = "", | ||
level = 3, | ||
},]=]; | ||
local offset = 0; | ||
|
||
function Addon:OnInitialize() | ||
self:RegisterChatCommand("venoxis", "SlashVenoxis"); | ||
self:RegisterChatCommand("blocklist", "SlashBlocklist"); | ||
end | ||
|
||
function Addon:PrintInfo(text, ...) | ||
if select('#', ...) > 0 then | ||
self:Printf(SELECTED_CHAT_FRAME, text, ...); | ||
else | ||
self:Print(SELECTED_CHAT_FRAME, text); | ||
end | ||
end | ||
|
||
function Addon:fetchGUID(name, callback) | ||
local info = C_FriendList.GetFriendInfo(name); | ||
|
||
if info then | ||
callback(info.guid); | ||
return; | ||
end | ||
|
||
local numFriends = C_FriendList.GetNumFriends(); | ||
|
||
C_FriendList.AddFriend(name, "From Scambuster-Venoxis"); | ||
|
||
C_Timer.After(1.5, function () | ||
local info = C_FriendList.GetFriendInfo(name); | ||
|
||
callback(info and info.guid); | ||
|
||
if C_FriendList.GetNumFriends() == (numFriends + 1) then | ||
C_FriendList.RemoveFriend(name); | ||
end | ||
end); | ||
end | ||
|
||
function Addon:showCopyTextFrame(text) | ||
local frame = AceGUI:Create("Frame") | ||
|
||
frame:SetTitle("Scambuster Copy Entry") | ||
frame:SetStatusText("Use CTRL+C to copy data") | ||
frame:SetLayout("Flow") | ||
frame:SetWidth(320) | ||
frame:SetHeight(250) | ||
frame:SetCallback("OnClose", function(widget) AceGUI:Release(widget) end) | ||
|
||
local editbox = AceGUI:Create("MultiLineEditBox") | ||
|
||
editbox:SetText(text) | ||
editbox:SetFullWidth(true) | ||
editbox:SetFullHeight(true) | ||
editbox:DisableButton(true) | ||
editbox:HighlightText() | ||
|
||
frame:AddChild(editbox) | ||
end | ||
|
||
function Addon:printPlayerInfo(name) | ||
if not name then | ||
self:PrintInfo("Please provide a name to check against."); | ||
return; | ||
end | ||
|
||
self:fetchGUID(name, function(guid) | ||
if guid then | ||
offset = offset + 1; | ||
local _, class, _, race = GetPlayerInfoByGUID(guid); | ||
self:showCopyTextFrame(template:format(#ns.blocklist + offset, name, guid, class, raceToFaction[race])); | ||
else | ||
self:PrintInfo("Failed requesting GUID for %s which is may be caused by:", name); | ||
self:PrintInfo("1. The character name is misspelled and contains typos."); | ||
self:PrintInfo("2. The character is on the opposite faction as you."); | ||
self:PrintInfo("3. The character was renamed, deleted or transferred."); | ||
self:PrintInfo("4. Your friendlist has no free slots left which is required."); | ||
end | ||
end); | ||
end | ||
|
||
function Addon:includesName(case, name) | ||
return (type(case.name) == "string" and case.name == name) or (type(case.aliases) == "table" and tContains(case.aliases, name)); | ||
end | ||
|
||
function Addon:printPlayerCases(name) | ||
if not name then | ||
self:PrintInfo("Please provide a name to check against."); | ||
return; | ||
end | ||
|
||
local indices = {}; | ||
|
||
for i,v in ipairs(ns.blocklist) do | ||
if type(v.players) == "table" then | ||
for _,p in pairs(v.players) do | ||
if self:includesName(p, name) then | ||
tinsert(indices, i); | ||
break; | ||
end | ||
end | ||
elseif self:includesName(v, name) then | ||
tinsert(indices, i); | ||
end | ||
end | ||
|
||
if #indices > 0 then | ||
self:PrintInfo("Found %d entries on player %s: %s", #indices, name, indices:concat(", ")); | ||
else | ||
self:PrintInfo("No entries found on player %s", name); | ||
end | ||
end | ||
|
||
function Addon:SlashCommand(command, input) | ||
local action, param = self:GetArgs(input, 2); | ||
|
||
if not action or action == "help" then | ||
self:PrintInfo("%s or %s help (triggers this help text)", command); | ||
self:PrintInfo("%s add NAME (shows player info as entry inside a copy & paste window)", command); | ||
self:PrintInfo("%s info NAME (shows player info inside the chat)", command); | ||
self:PrintInfo("%s check NAME (shows player cases found in blocklist if they exist)", command); | ||
elseif action == "info" then | ||
self:printPlayerInfo(param); | ||
elseif action == "check" then | ||
self:printPlayerCases(param); | ||
end | ||
end | ||
|
||
function Addon:SlashVenoxis(input) | ||
self:SlashCommand("/venoxis", input); | ||
end | ||
|
||
function Addon:SlashBlocklist(input) | ||
self:SlashCommand("/blocklist", input); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
local n, ns = ...; | ||
local AceAddon = LibStub("AceAddon-3.0"); | ||
local Addon = AceAddon:GetAddon(n); | ||
local Module = Addon:NewModule("Provider", "AceConsole-3.0"); | ||
---@type Scambuster | ||
local SB = AceAddon:GetAddon("Scambuster"); | ||
|
||
function Module:OnInitialize() | ||
self.name = "Venoxis Discord Blocklist"; | ||
self.provider = "Venoxis Discord"; | ||
self.description = "A list of scammers curated by the venoxis discord community."; | ||
self.realm = "Venoxis"; | ||
self.url = "https://discord.gg/NGtvvQYnmP"; | ||
self.blocklist = ns.blocklist; | ||
|
||
SB.RegisterCallback(self, "SCAMBUSTER_LIST_CONSTRUCTION", "RegisterProviderData"); | ||
end | ||
|
||
function Module:RegisterProviderData() | ||
SB:register_case_data({ | ||
name = self.name, | ||
provider = self.provider, | ||
description = self.description, | ||
url = self.url, | ||
realm_data = { | ||
[self.realm] = self.blocklist, | ||
} | ||
}); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,21 @@ | ||
## Interface: 30401 | ||
## Version: @project-version@ | ||
## Title: Scambuster-Venoxis | ||
## Notes: Extension for Scambuster providing a list of scammers on realm Venoxis (EU) | ||
## Author: Venoxis Discord Community | ||
## Version: @project-version@ | ||
## DefaultState: enabled | ||
## Dependencies: Scambuster | ||
## DefaultState: enabled | ||
## X-eMail: contact@codexo.de | ||
## X-Website: https://github.com/Exoridus/Scambuster-Venoxis | ||
## X-License: GPL v3 | ||
## X-Embeds: Ace3, LibStub | ||
## X-Category: Chat/Communication | ||
## X-Date: @project-date-iso@ | ||
## X-Curse-Project-ID: 831364 | ||
## X-Wago-ID: 4N2mEdGL | ||
## X-Repository: https://github.com/Exoridus/Scambuster-Venoxis | ||
## X-Date: @build-date@ | ||
|
||
Libs/LibStub/LibStub.lua | ||
Libs/AceAddon-3.0/AceAddon-3.0.xml | ||
embeds.xml | ||
|
||
settings.lua | ||
list.lua | ||
core.lua | ||
Modules\Addon.lua | ||
Modules\Blocklist.lua | ||
Modules\Provider.lua |
Oops, something went wrong.