Package: eqalert
EQAlertA Configurable and Context Driven Project 1999 Log Parser with NCurses Interface for LinuxBest used with alaunch scriptwhich maintains reasonable log file sizeInstallPyPI$pip3installeqalert
$# or if your distribution is using externally managed environemnts$pipxinstalleqalertLocally$gitclonehttps://github.com/mgeitz/eqalert.git
$cdeqalert
$python3-mpipinstall-e.
$# or if your distribution is using externally managed environments$# (remember the venv must be sourced to run eqalert when installed this way)$python3-mvenv.venv;source.venv/bin/activate;python3-mpipinstall-e.Docker$gitclonehttps://github.com/mgeitz/eqalert.git
$cdeqalert
$dockercomposebuild
$dockercomposeruneqalertNote: If running through docker after installing and running on your host, update or regenerate~/.eqa/config/settings.jsonto reflect local container paths in/home/eqalertGetting StartedStart things up$eqalertYou should now see~/.eqa/with the following structure$HOME/.eqa
        ⎿ config/
          ⎿ line-alerts/
        ⎿ data/
          ⎿ timers/
        ⎿ encounters/
        ⎿ log/
          ⎿ debug/
        ⎿ sound/Spot check these default paths generated inconfig/settings.json"settings": {
    "paths": {
      "eqalert_log": "[$HOME/.eqa/]log/",
      "data": "[$HOME/.eqa/]data/",
      "encounter": "[$HOME/.eqa/]encounters/",
      "everquest_logs": "[$HOME]/.wine/drive_c/Program Files/Sony/EverQuest/Logs/",
      "everquest_files": "[$HOME]/.wine/drive_c/Program Files/Sony/EverQuest/",
      "sound": "[$HOME/.eqa/]sound/",
      "tmp_sound": "/tmp/eqa/sound/"
    },
  }Press0to reload your configs or restart the program if any changes were made.  Though generally, it's a good idea to stop eqalert before manually editing your config files.DataSpell TimersEQ Alert will generate a file for spell timers indata/spell-timers.jsonby default by parsingspells_us.txtin your EverQuest directory.This file will only regenerate if it is missing, malformed, or a newerspells_us.txtfile is present.Spell CastersEQ Alert will generate/overwritedata/spell-casters.jsoneach version.  This file contains which classes can cast a given buff which timers should be made for.Spell LinesMany spells cast in EverQuest share the same log output lines.  EQ Alert will generate/overwritedata/spell-lines.jsoneach version as a mapping of which possible spells a given output line could be associated to.Spell ItemsEQ Alert will generate/overwritedata/spell-items.jsoneach version as a mapping of which items a given spell could be cast by.PlayersEQ Alert uses in-game/whooutput to keep an up-to-date list of each seen players class, level, and guild organized by server indata/players.jsonfor alerting spell duration.Saved TimersIf the active character is changed or EQ Alert is stopped, all active timers are saved to a file indata/timers/by the previously active character and server name.  This file is consumed when the parser sets that character as active again, adding all non-expired timers back to the timer list.EncountersWhen encounter parse saving is enabled, complete encounter reports are saved underencounters/[zone_name]/[date]/as the time stamp of the encounter and the encounter target.ControlsKeyboard ControlsGlobal0       : Reload config1       : Events2       : State3       : Parse4       : Settingsq / esc : Quith       : Help pop-upt       : Timers pop-upEventsc       : Clear event boxd       : Toggle debug modee       : Toggle encounter parsingm       : Toggle global audio mutep       : Toggle encounter parse saver       : Toggle raid modey       : Toggle automatic mob respawn timersSettingsup      : Up in selectiondown    : Down in selectionright   : Selection optionsleft    : Selection optionsspace   : Selectenter   : Selecttab     : Cycle categoryNote: WASD or arrow keys will workSettings & OptionsSettings and options can be modified inconfig/settings.jsonauto mob timer: Create timer events after gaining experience for a duration based on the zone you are inauto mob timer delay: Set a delay for the auto mob timer notification n seconds before the actual eventcharacter mention alert: if enabled, speak any chat received line containing the active players nameconsider eval: Speak "safe" or "danger" based on consider outputdebug mode: Slows down parser performance and produces lots of file outputdetect character: Automatically set parser to listen to the most recently active eqlogencounter parsing: Parse encounter damageencounter parsing auto save: Save verbose encounter parse results to a filemute: Disable all text-to-speech outputpersist player data: Save /who player output for spell timersraid mode auto set: Auto-set raid context by zonespeech expand lingo: When speaking a line, replace common EQ abbreviations with complete wordsspeech lang: The language (IETF language tag) to read the text in -gTTS documentation referencespeech tld: Top-level domain for the Google Translate host -gTTS documentation referencespell timer consolidate: When a spell timer expires consolidate timers for the same spell in the next 3 seconds to one alertspell timer delay: Set a delay for all spell timer notifications n seconds before the actual eventspell timer filter by list: If enabled only create spell timers for spells in filter listspell timer filter guild only: Filter all spell timer events so they are only for yourself or guild membersspell timer filter list: List of spells, when true, to filter timers tospell timer filter yours only: Filter all spell timer events to be only spells you castspell timer guess: If there is moderate uncertainty in guessing a spell, go for itspell timer other: Set spell timers for spells that land on other playersspell timer self: Set spell timers for spells that land on yourselfspell timer zone drift: If enabled add time between zoning to spell timers targetting yourselfSay ControlsYou can control some parser settings using/sayin-game.  This is better suited for one monitor setups.Settings/say parser debug- Toggle debug mode/say parser raid- Toggle raid modeMute/say parser mute/unmute- Toggle global mute/unmute/say parser mute/unmute alert- Toggle mute/unmute on allalertalerts./say parser mute clear- Clear all muted line types and playersDoes not effect global mute/say parser mute/unmute line- Mute all sound alerts from a type of line/say parser mute/unmute line player- Mute all sound alerts of a given line type from a specific sourceexample: /say parser mute tell indef/say parser mute/unmute speak- Toggle mute/unmute on allspeakalerts.example: /say parser mute engageEncounters/say parser encounter- Toggle encounter parsing/say parser encounter clear- Clear the encounter stack/say parser encounter end- Sometimes, your logs don't catch an encounter end.  Use this command to fix that!Timers/say parser metronome [seconds]- Set a tick/tock metronome with interval of [seconds]/say parser metronome stop- Stop the metronome/say parser timer [seconds]- Set a timer for [seconds], says "times up" when done/say parser timer clear- Clear all timers/say parser timer respawn- Create timers for the default current zone time after seeing an experience message. Timer response is "pop [zone name]"/say parser timer respawn stop- Stop creating mob respawn timers automaticallyMisc/say parser consider- Toggle consider evaluation/say parser hello- Hello/say parser what context- Speak context state/say parser what state- Speakeverythingin the state object/say parser where- Where am I?/say parser who [player_name]- Speaks player level, class, and guild if knownCustom AlertingModify~/.eqa/config/line-alerts/*.jsonto customize alerts.Due to how many line matches there are, the configuration for their reactions have been split into several json files under[$HOME/.eqa]/config/line-alerts/*.jsonAnything matched by the parser not found in configuration is automatically added to[$HOME/.eqa]/config/line-alerts/other.jsonModifyline_typevalues to customize alerts accordingly.Line TypesExample configuration for a line type:"line_type_name": {
      "alert": {},
      "reaction": false,
      "sound": false
    },Reaction ValuesGeneral"alert": Alert for matching strings inalertfor the line type using the set sound"all": Alert for all lines of a given line type using the set soundfalse: Disable alerting for this line typeContext Driven"afk": Alert only when afk"group": Alert when in a group and raiding"group_only": Alert only when grouped"raid": Alert when in a raid"solo": Alert when solo, grouped, and raiding"solo_group_only": Alert only when not raiding"solo_only": Alert only when soloAlert Keys"alert"can be populated with key value pairs.  The key here is any string you would like an alert for within that line type.ExamplesExample 1Alert for the wordheywhen someone else/saysit:"say": {
      "alert": {
        "hey": true
      },
      "reaction": "alert",
      "sound": "hey"
    },Example 2Alert for the wordrunwhen someone else/saysit and you are grouped or in a raid:"say": {
      "alert": {
        "run": "group"
      },
      "reaction": "alert",
      "sound": "oh god run"
    },Example 4Alert for a spell not taking hold only when grouped:"spell_not_hold": {
      "alert": {},
      "reaction": "group_only",
      "sound": true
    },Example 4Alert for the itemHand Made Backpackwhen someone else/auctionsit and is selling:"auction_wts": {
      "alert": {
        "Hand Made Backpack": true
      },
      "reaction": "alert",
      "sound": "wow buy that"
    },More examples can be referenced in the default configAlert ValuesGeneralfalse: Disable alerting for the string (does not negate line type reactions)true: Alert for the stringContext Driven"afk": Alert only when afk"group": Alert when in a group and raiding"group_only": Alert only when grouped"raid": Alert when in a raid"solo": Alert when solo, grouped, and raiding"solo_group_only": Alert only when not raiding"solo_only": Alert only when soloSound Valuesfalse: Play no sound when an alert is raisedtrue: When an alert is raised speak the entire lineAny other sound value (as a string) will be spoken as the audio trigger for that line typeThe all Line TypeThis line type behaves the same as any specific line type configuration, but configuration here will be used against all log lines.For example, the below configuration will alert if the wordhelpis found in any line while in a raid context, even if that line isn't matched to a type by the parser."all": {
      "alert": {
        "help": raid
      },
      "reaction": "alert",
      "sound": "help is needed"
    },This can be helpful if you would like to alert for something not yet matched by the parser, though yourcontributionto a new line type match in the parser would also be welcome!ZonesZone data is stored inconfig/zones.jsonindoorsWhether or not this zone is considered indoors.  Currently does nothing.raid_modefalse: If enabled, auto-disable raid mode in this zonetrue: If enabled, auto-enable raid mode in this zonetimer#: The value in seconds to associate to a default timer in a given zoneNote: No support for zones with multiple default timers, stick with the manual timer command for those for now.  For zones with tiered default timers, the shortest timer was set as the default.  You can change this value to be any number in seconds you prefer.