Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dante

A terminal app for Diablo III. It pulls your character straight from Blizzard's API, shows your gear and stats in one place, tells you what is holding your Greater Rift push back, and lets you diff your build against any other player like a git diff.

 DANTE  Grimward · Barbarian · paragon 2450 · season · GR 130          Max#1234 · US
  1 Heroes    2 Overview    3 Gear    4 Audit    5 Ladder    6 Diff
─────────────────────────────────────────────────────────────────────────────────────
╭─────────────────────────────────╮╭──────────────────────────────────────────────────╮
│ OFFENCE                         ││ SKILLS                                           │
│ Damage           4,500,000  ███ ││   Whirlwind  Dust Devils                         │
│ Crit Chance      48.00%     ███ ││   Sprint     Marathon                            │
│ Crit Damage      490.00%    ███ ││                                                  │
╰─────────────────────────────────╯╰──────────────────────────────────────────────────╯

Install

One command. It installs Go for you if you do not have it.

./install.sh

Then run:

dante

That is it. The first launch walks you through setup inside the app.

If you would rather not use the script:

make build && ./dante

First run

Dante reads your character from Blizzard's official API, so it needs an API client. It is free, instant, and takes about a minute.

  1. Go to https://develop.battle.net and sign in with your Battle.net account.
  2. Click Create Client.
  3. Name it anything. Set Redirect URI to https://localhost. Leave Service URL blank.
  4. Copy the Client ID and Client Secret.

Dante will ask for both on first launch, along with your BattleTag and region. It saves them to ~/.config/dante/config.json with owner only permissions.

If you prefer environment variables, dante reads these and they win over the saved file:

export BLIZZARD_CLIENT_ID=...
export BLIZZARD_CLIENT_SECRET=...
export DANTE_BATTLETAG='Name#1234'
export DANTE_REGION=us

The tabs

Heroes lists every character on the account. Seasonal and living characters sort to the top, dead ones to the bottom. Press enter to load one.

Overview is the character sheet. Offence, defence, core stats, resists, your six active skills with runes, your four passives, your three Kanai's Cube powers, and which sets you are wearing. The bars compare each stat to a rough reference value for a strong pushing build, so a short bar means that stat is behind, not that it is small.

Gear is a slot list on the left and full item detail on the right. Every affix, every gem with its rank, augments, set membership, and flavour text. Item names are coloured by quality the same way the game colours them. A red ! next to a slot means an empty socket. A green + means the item is augmented. Follower gear is in the same list, below your own.

Audit is the part that answers "why am I stuck". It runs a set of checks over your build and sorts the results by how much they are costing you. See below for what it looks at.

Ladder pulls the current season leaderboards. Boards for your class are highlighted. Pick one, and you get the top 100 with their GR level, clear time, and paragon. Press d on any player to pull their build and diff it against yours.

Diff compares two builds line by line.

The diff

This is the interesting bit. Press b on the Diff tab and type any BattleTag, or press d on a leaderboard player, and dante fetches their character and compares it to yours:

── Gear ──────────────────────────────────────────────
  Head        Leoric's Crown
~   +1,000 Strength              → +1,300 Strength  (+300)
-   Cooldown Reduction 8.0%
+   Area Damage Increased by 20.0%
~   gem: Bane of the Stricken rank 70   → rank 125  (+55)

  Ring 1      Convention of Elements
+   Critical Hit Damage Increased by 50.0%

Read it the same way you read a git diff:

  • - in red is something you have and they do not.
  • + in green is something they have and you do not.
  • ~ in yellow is the same affix rolled to a different number, with the gap shown.
  • Grey lines are identical.

It diffs identity, every stat, active skills with runes, passives, Kanai's Cube, and every gear slot including gems and their ranks. By default it hides lines that are the same so you only see what actually differs. Press a to show everything.

The trick that makes this readable is that dante strips the numbers out of an affix before comparing. So +950 Strength and +1,024 Strength are recognised as the same affix with a different roll, instead of showing up as one line removed and one line added.

What the audit checks

  • Empty sockets, which are free stats you are not taking.
  • Slots with no Caldesann's augment.
  • Items that do not read as Ancient.
  • Missing class main stat on a slot.
  • Legendary gems below rank 100, and a louder warning below rank 50.
  • Crit chance and crit damage missing from gloves, amulet, and both rings.
  • Kanai's Cube slots that are empty.
  • Passive skill slots that are empty.
  • Set piece counts, so you can see if you are one piece short of a 6 piece bonus.
  • Follower slots that are empty, especially the relic slot that keeps them alive.
  • Crit chance well below what a pushing build usually wants.

Each finding has a severity and a short explanation of why it matters. The score at the top is a rough single number, not gospel. Use the critical list.

Keys

Key What it does
1 to 6 Jump to a tab
tab / shift+tab Next or previous tab
j / k or arrows Move up and down
enter Select
d On Ladder, diff against the selected player
b On Diff, type a BattleTag to compare against
a On Diff, show or hide identical lines
x On Diff, clear the comparison
r Refetch everything
S Reopen settings
? Toggle the full key list
q Quit

Things worth knowing

The API lags the game. Blizzard caches profile data and only refreshes it periodically. If you just changed gear and dante shows the old setup, exit to character select or log out, wait a few minutes, then press r.

Some things are not in the API at all. Dante cannot see your paragon point distribution, your Altar of Rites progress, or the season theme. Those are the two gaps you have to check in game yourself.

Ancient detection is a guess. The API does not expose a clean "is ancient" flag, so dante looks for the word in the item text. Augmented items always report correctly because the augment line says so. A non augmented ancient may be missed.

Profiles have to be public. They are public by default. If a diff target fails to load, that is usually why, or the region is wrong.

Rate limits exist. If you hammer r you will get told to wait. Just wait.

Working on it

make check    # format, vet, and test
make test     # tests only
make dump     # print every view to the terminal, useful for layout work
make run      # build and run

Layout is:

main.go                    entry point
internal/config            reading and writing the saved config
internal/blizzard          API client, types, leaderboards
internal/audit             the build checks
internal/diff              the build comparison engine
internal/ui                every screen, built on Bubble Tea

The tests cover JSON decoding against realistic API payloads, the diff engine, and rendering every view at both a normal and a tiny terminal size so layout changes cannot silently panic.

If you publish this, change the module line at the top of go.mod to your own repo path.

Built with

Bubble Tea for the app loop, Lip Gloss for the styling, and Bubbles for the text inputs and scrolling panes.

License

MIT. See LICENSE.

Diablo III is a trademark of Blizzard Entertainment. This project is not affiliated with or endorsed by them.

About

A TUI to view a full description of your character build on Diablo 3

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages