Skip to content

Commit

Permalink
refactor(addon): use ace framework to split up addon into multiple mo…
Browse files Browse the repository at this point in the history
…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
Show file tree
Hide file tree
Showing 10 changed files with 266 additions and 101 deletions.
13 changes: 10 additions & 3 deletions .pkgmeta
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 added CHANGELOG.md
Empty file.
161 changes: 161 additions & 0 deletions Modules/Addon.lua
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
58 changes: 48 additions & 10 deletions list.lua → Modules/Blocklist.lua
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
---@type string, AddonTable
local _, t = ...;
local n, ns = ...;

--================================================================================================--
-- Venoxis Discord Blocklist based on the official google sheets blacklist: --
-- https://docs.google.com/spreadsheets/d/1IKAr8A4P0-LhkXqMxizvgYy1E2gph_00M_O0r3rDGkY/edit#gid=0 --
--================================================================================================--

---@type CaseTable
t.case_table = {
ns.blocklist = {
[1] = {
name = "Alcyona",
guid = "Player-4477-03C5CE1A",
Expand Down Expand Up @@ -153,7 +151,7 @@ t.case_table = {
guid = "Player-4477-04983B8E",
class = "DRUID",
faction = "Horde",
description = "Needet alle Items in 5mann HC+",
description = " Needet alle Items in 5mann HC+ / mehrfach reportet",
url = "https://discord.com/channels/613060619738021890/1029711210918191154/1065655958795194378",
category = "dungeon",
level = 3,
Expand Down Expand Up @@ -513,10 +511,11 @@ t.case_table = {
guid = "Player-4477-046669DD",
class = "MAGE",
faction = "Horde",
description = "Eröffnet Gdkp run und haut dann mit dem gesamten Pot ab. 81.402 Gold / Zweiter Gdkp Scam: 56.500 / Siehe auch Charakter: Pumperlumper, Dannymage",
description = "Eröffnet Gdkp run und haut dann mit dem gesamten Pot ab. 81.402 Gold / Zweiter Gdkp Scam: 56.500",
url = "https://discord.com/channels/613060619738021890/915181409155563521/1080868571279790210",
category = "gdkp",
level = 3,
aliases = {"Pumperlumper", "Dannymage"}
},
[52] = {
name = "Convexyz",
Expand Down Expand Up @@ -553,16 +552,56 @@ t.case_table = {
guid = "Player-4477-0464DE81",
class = "MAGE",
faction = "Horde",
description = "Scammt in einer 5er Gruppe alle Items und geht und dann offlne ohne die Splitter zu verteilen / zudem gibt er es auch per whisper zu (siehe BL in Venoxis DC)",
description = "Scammt in einer 5er Gruppe alle Items und geht und dann offlne ohne die Splitter zu verteilen / zudem gibt er es auch per whisper zu",
url = "https://discord.com/channels/613060619738021890/1029711210918191154/1087391435378143393",
category = "dungeon",
level = 3,
},
[56] = {
name = "Jondeepfreez",
guid = "Player-4477-0464DE81",
class = "MAGE",
faction = "Horde",
description = "Gildenbankplünderer",
url = "https://discord.com/channels/613060619738021890/915181409155563521/1094685096780513331",
category = "trade",
level = 3,
},
[57] = {
name = "Autoritä",
guid = "Player-4477-049EDE13",
class = "ROGUE",
faction = "Horde",
description = "Gildenbankplünderer",
url = "https://discord.com/channels/613060619738021890/915181409155563521/1094685096780513331",
category = "trade",
level = 3,
},
[58] = {
name = "Patapeng",
guid = "Player-4477-022E45F0",
class = "MAGE",
faction = "Horde",
description = "Ninjat ein Item vom Endboss in Naxx25, gibt es zu und sagt er schickt 1k Gold compensation / schickt dann ein Wurmfleisch mit 1k Gold Nachnahme",
url = "https://discord.com/channels/613060619738021890/915181409155563521/1092478052723867798",
category = "raid",
level = 3,
aliases = {"Bakery"}
},
[59] = {
name = "Gladix",
guid = "Player-4477-04E405A6",
class = "ROGUE",
faction = "Horde",
description = "Ninjat in Archavons Kammer 25 zwei Items",
url = "https://discord.com/channels/613060619738021890/915181409155563521/1093498181402251294",
category = "raid",
level = 3,
},
};

-- Characters on which the data request failed. Most likely due to deletion / transfer / renaming:
-- [Cradran]: Rollt gern ohne zu Zahlen
-- [Dannymage]: Eröffnet Gdkp run und haut dann mit dem gesamten Pot ab. 81.402 Gold / Siehe auch Charakter: Pumperlumper
-- [Diggernick]: Rollt gern ohne zu Zahlen
-- [Dirtyrouge]: Lootdrama / spricht kein Deutsch / versucht zu scammen
-- [Dreamyx]: ZA GDKP Orga: Will loot behalten statt diss aber nicht zahlen. Geht off vorm Endboss mitm Pot
Expand All @@ -576,10 +615,9 @@ t.case_table = {
-- [Lister]: Booster kickt Leute / geht Offline nach Bezahlung ohne Leistung
-- [Niemandmc]: Ninjat weil PM vergessen wurde und verkauft die Tokens
-- [PPQOR]: Booster kickt Leute / geht Offline nach Bezahlung ohne Leistung
-- [Pumperlumper]: Eröffnet Gdkp run und haut dann mit dem gesamten Pot ab. 81.402 Gold / Namechange zu: Dannymage
-- [Rôôz]: Geht als Buyer mit und hat kein Gold - beleidigt dann nach Aufforderung zu kaufen.
-- [Stysthy]: Würfelt 2x für ein Item bei Malygos. Der RL übersieht das und weist ihm ungerechtfertigt ein Item zu. Danach verlässt er direkt den Raid. Wurde wegen diesem Vorfall aus der Gilde gekickt.
-- [Thilon]: Lockt Betrayer aber gibt diese Info nicht an nachträglich in den Raid geladene Spieler weiter. Nachzügler setzt Betrayer auf Prio1 - erhält trotzdem keine Info / Betrayer ist droppt und wurde an Stahlklang-Gildenmember vergeben
-- [Ungeiimpfter]: Plündert gern mal die Gildenbank Alts: Dejox(Rogue) / Dkgoesbrbr(DK obv) / Buyvet (Paladin).
-- [Vibecheckk]: Lockt rnd Items ohne Vorabinfo
-- [Würfelbotqt]: Geht mit 116k Gold offline und verteilt keinen Cut / GDKP Betrüger / hat Namen in Handwerkerr geändert
-- [Würfelbotqt]: Geht mit 116k Gold offline und verteilt keinen Cut / GDKP Betrüger / hat Namen in Handwerkerr geändert
29 changes: 29 additions & 0 deletions Modules/Provider.lua
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
21 changes: 12 additions & 9 deletions Scambuster-Venoxis.toc
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
Loading

0 comments on commit 528ecd2

Please sign in to comment.