Skip to content

Events

The Events system lets mods listen to 60+ game events and emit custom cross-mod events.

Global Events

Use the Events namespace for mod-level event listening:

typescript
import { Events } from "@hotbunny/hackhub-content-sdk";

Events.on("Terminal.NmapScan", (data) => {
    console.log(`Player scanned ${data.ip}`);
});

Events.on() returns an unsubscribe function:

typescript
const unsub = Events.on("Terminal.Ping", (data) => {
    console.log(`Pinged ${data.ip}`);
});

// later...
unsub();

Quest-Scoped Events

Inside quests, always use this.Events instead of the global Events. Listeners registered through this.Events are automatically cleaned up when the quest completes or is abandoned.

Register them in OnObjectivesStart() (runs on every game start), not OnStart() (runs once at claim) — listeners are lost on reload and only OnObjectivesStart() re-attaches them.

typescript
@RegisterQuest
class MyQuest extends Quest {

    // ...

    // Runs on claim and on every game start, so listeners survive reloads.
    OnObjectivesStart() {
        this.Events.on("Terminal.NmapScan", (data) => {
            // re-attached on every game start;
            // automatically removed on complete/abandon
        });
    }

}

See the Quests guide for more details.

Custom Events

Emit and listen to custom events for cross-mod communication:

typescript
Events.emit("MyMod.ScoreUpdated", { score: 100 });

Events.on("MyMod.ScoreUpdated", (data) => {
    console.log(`Score: ${data.score}`);
});

You can optionally register event names for discoverability:

typescript
Events.register("MyMod.ScoreUpdated");

Game Events Reference

Terminal

EventPayload
Terminal.NmapScan{ ip, ports }
Terminal.Nslookup{ domain, ip }
Terminal.Ping{ ip }
Terminal.Command{ command, args }
Terminal.InstallPackage{ name }
Terminal.SSH.Connectedstring (connected server IP)
Terminal.SSH.Disconnectedstring (disconnected server IP)
Terminal.SSH.FileDownload{ ip, filename }
Terminal.Cd{ path }
Terminal.Ls{ path }
Terminal.Openssl{ file }
Terminal.SSH.Shutdown{ ip }
Terminal.Lynx.Search{ query }
Terminal.Lynx.Lookup{ query, results }
Terminal.Mxlookup{ domain }
Terminal.Ifconfig{ }

Network & Scanning

EventPayload
Terminal.Hydra{ ip, username, password }
Terminal.Whois{ domain }
Terminal.FTP.Connect{ ip }
Terminal.Dig{ domain }
Terminal.Dirhunter{ ip, directories }
Terminal.Geoip{ ip }
Terminal.Cat{ filename }
Subfinder.Results{ domain, subdomains }
Nuclei.Results{ target, vulnerabilities }

Exploitation

EventPayload
Metasploit.Msfconsole{ }
Metasploit.Search{ query }
Metasploit.Use{ module }
Metasploit.ShowOptions{ module }
Metasploit.SetOption{ key, value }
Metasploit.Event{ type }
Metasploit.Rootgrab{ ip }
Meterpreter.Connected{ ip }
Meterpreter.Download{ ip, file }
Hashcat.Event{ hash }
John.Decrypt.Hash{ hash }
Fern.FindPassword{ ssid, password }

Bettercap

EventPayload
Bettercap.Open{ }
Bettercap.Close{ }
Bettercap.NetProbe{ }
Bettercap.NetShow{ devices }
Bettercap.WifiRecon{ networks }
Bettercap.WifiDeAuth{ ssid }

Files & Browser

EventPayload
Files.Open{ filename }
Files.Transfer{ filename, direction }
Files.Deleted{ filename }
Explorer.Event{ path }
Browser.WebsiteOpened{ siteName, url }
Browser.Metaparsed URL: { href, protocol, slashes, auth, username, password, host, hostname, port, pathname, query, hash, origin }

Communication

EventPayload
Mail.Received{ from, subject }
Mail.Read{ id }
Mail.Mailbox.Opened{ }
Mail.Account.Created{ email }
Mail.Account.LoggedIn{ email }

Social

EventPayload
Twotter.Account.Created{ username }
Twotter.Account.Login{ username }
Twotter.Account.Logout{ username }
Twotter.Post.Seen{ postId }
Twotter.Post{ content }
Twotter.Profile.Seen{ username }
Kisscord.FriendAdded{ userId }
Kisscord.Messaging{ contactId }
WeeChat.Connected{ host }
WeeChat.Disconnected{ host }
WeeChat.Message{ host, content }

Other

EventPayload
Bank.Transfer{ amount, from, to }
Bank.Account.Created{ iban }
Bank.Logout{ }
Quest.Claimed{ questName }
Database.Connected{ ip }
Database.DataUpdate{ table }
Sqlmap.ListTables{ ip, tables }
Sqlmap.DumpTable{ ip, table }
Network.PortChanges{ ip, ports }
Network.UserActivity{ ip, username }
Network.WifiConnected{ ssid }
PFSense.Login{ ip }
PFSense.Changes{ ip }
Process.Killed{ name, pid }
Wireshark.Started{ }
Wireshark.Stopped{ }
Python3.ExecFile{ filename }
BCC.News.Opened{ }
Remote.Connection.Established{ ip }
Remote.Connection.Disconnected{ ip }

INFO

Requires the events permission in your manifest.json.

HotBunny Interactive Entertainment Inc.