Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pricing (wip) #176

Closed
wants to merge 125 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
d8353bf
Merge pull request #166 from dotabod/develop
Geczy Jan 5, 2025
bd38382
fix: prevent multiple reload timers in OverlayPage (#167)
Geczy Jan 5, 2025
a27cbc3
fix: overlay updates (extension) (#168)
poecco Jan 16, 2025
9aea227
fix: prevent multiple reload timers in OverlayPage & add aghs + shard…
Geczy Jan 19, 2025
d075d8b
fix: no space for 7tv emote name
mgatespot Feb 1, 2025
8a74c45
fix test
mgatespot Feb 2, 2025
587d81a
new: neautral items event
mgatespot Feb 6, 2025
2e9e786
fix: overlay updates (archive) (#171)
poecco Feb 7, 2025
421c1cc
Update ChatterCard.tsx (#170)
proximuspl Feb 7, 2025
901402e
fix: remove KofiButton from DashboardShell and HomepageShell
mgatespot Feb 8, 2025
10fb53a
Merge branch 'master' of https://github.com/dotabod/frontend
mgatespot Feb 8, 2025
0edd43c
fix: improve socket connection handling and add ping mechanism
Geczy Feb 9, 2025
1dd427a
fix: enhance socket connection management with notification on reconn…
Geczy Feb 9, 2025
72a64bd
fix: streamline socket connection lifecycle with improved error handl…
Geczy Feb 9, 2025
b9a9150
Revert "fix: streamline socket connection lifecycle with improved err…
Geczy Feb 9, 2025
77fda35
Revert "fix: enhance socket connection management with notification o…
Geczy Feb 9, 2025
1d75a95
Revert "fix: improve socket connection handling and add ping mechanism"
Geczy Feb 9, 2025
ff4999b
feat: add WidgetPage component for displaying user rank and win/lose …
Geczy Feb 17, 2025
4a8daf0
feat: enhance WidgetPage with socket event handling for settings and …
Geczy Feb 17, 2025
d862b98
fix: overlay updates (7.38) (#172)
poecco Feb 19, 2025
1f06589
wip
Geczy Feb 20, 2025
f8ced43
fix: overlay updates (7.38 minimap) (#174)
poecco Feb 20, 2025
ca1e29f
wip
Geczy Feb 20, 2025
8748085
feat: enhance socket connection handling with ping/pong mechanism and…
Geczy Feb 20, 2025
b23f182
feat: add pong event handling to update last received time for socket…
Geczy Feb 20, 2025
4987554
refactor: remove unnecessary delay handling in OverlayPage component
Geczy Feb 20, 2025
fe216c6
feat: improve socket connection monitoring with built-in ping event a…
Geczy Feb 20, 2025
49e5ab6
Merge branch 'master' into pricing
Geczy Feb 20, 2025
c062fba
wip
Geczy Feb 21, 2025
6f5bbb1
wip
Geczy Feb 21, 2025
9418971
wip
Geczy Feb 21, 2025
8119e8b
wip
Geczy Feb 21, 2025
7d82797
wip
Geczy Feb 21, 2025
27a7e76
Update Pricing.tsx
Geczy Feb 21, 2025
47b7abc
refactor: enhance type safety and improve state management in Aegis a…
Geczy Feb 21, 2025
a58054c
wip
Geczy Feb 21, 2025
dd5dc56
wip
Geczy Feb 21, 2025
2d5e481
Update MinimapBlocker.tsx (#175)
poecco Feb 21, 2025
5637cfb
Merge branch 'master' into pricing
Geczy Feb 21, 2025
aed9d64
wip
Geczy Feb 21, 2025
afc4ef0
wip
Geczy Feb 21, 2025
33684a6
wip
Geczy Feb 21, 2025
fb52304
wip
Geczy Feb 21, 2025
0074366
wip
Geczy Feb 21, 2025
a813991
wip
Geczy Feb 21, 2025
908f918
wip
Geczy Feb 21, 2025
6292a63
wip
Geczy Feb 21, 2025
6cea14a
wip
Geczy Feb 21, 2025
9643fac
wip
Geczy Feb 21, 2025
65d2533
wip
Geczy Feb 21, 2025
8cb9ee5
wip
Geczy Feb 21, 2025
f2efb44
wip
Geczy Feb 21, 2025
954bb28
wip
Geczy Feb 21, 2025
54a4d56
wip
Geczy Feb 21, 2025
f0a8af7
wip
Geczy Feb 21, 2025
4b856f0
wip
Geczy Feb 21, 2025
9252676
wip
Geczy Feb 21, 2025
bb4cfd9
wip
Geczy Feb 21, 2025
a76a56a
wip
Geczy Feb 21, 2025
ed02ace
wip
Geczy Feb 21, 2025
2846330
wip
Geczy Feb 21, 2025
c1fa016
wip
Geczy Feb 21, 2025
ed60da9
wip
Geczy Feb 21, 2025
a2b4713
wip
Geczy Feb 21, 2025
0189e9a
wip
Geczy Feb 21, 2025
6ff45a2
wip
Geczy Feb 21, 2025
ea522e8
wip
Geczy Feb 21, 2025
818df49
wip
Geczy Feb 21, 2025
6bbd3ef
wip
Geczy Feb 21, 2025
a39fc2a
wip
Geczy Feb 21, 2025
f05c3a2
wip
Geczy Feb 21, 2025
1a300e2
wip
Geczy Feb 21, 2025
1f9175d
wip
Geczy Feb 21, 2025
dc16c0d
wip
Geczy Feb 21, 2025
7d4f13c
wip
Geczy Feb 21, 2025
99d5800
wip
Geczy Feb 21, 2025
51c25a8
wip
Geczy Feb 21, 2025
1c688bb
wip
Geczy Feb 21, 2025
2b4bb20
wip
Geczy Feb 21, 2025
e370d74
wip
Geczy Feb 21, 2025
ded51d6
wip
Geczy Feb 21, 2025
3297fe9
wip
Geczy Feb 22, 2025
fc01370
wip
Geczy Feb 22, 2025
8208814
wip
Geczy Feb 22, 2025
6dd2cdc
wip
Geczy Feb 22, 2025
98d8be2
wip
Geczy Feb 22, 2025
98173d6
wip
Geczy Feb 22, 2025
1008850
wip
Geczy Feb 22, 2025
43a56f5
wip
Geczy Feb 22, 2025
0f7482f
wip
Geczy Feb 22, 2025
5a010e1
wip
Geczy Feb 22, 2025
f64b35e
wip
Geczy Feb 22, 2025
8ab7e23
wip
Geczy Feb 22, 2025
2aaf002
wip
Geczy Feb 22, 2025
4e97fef
wip
Geczy Feb 22, 2025
913af4b
wip
Geczy Feb 22, 2025
8d3c6e3
wip
Geczy Feb 22, 2025
69c41a0
wip
Geczy Feb 22, 2025
a440014
wip
Geczy Feb 22, 2025
ee282ee
wip
Geczy Feb 22, 2025
fddbe08
wip
Geczy Feb 22, 2025
91440d0
Optimize SWR data fetching with consistent revalidation settings
Geczy Feb 22, 2025
6a4b9b1
wip
Geczy Feb 22, 2025
668d856
wip
Geczy Feb 22, 2025
9b0fe61
Enhance auto-installer access error handling with required subscripti…
Geczy Feb 22, 2025
ddbf4ce
wip
Geczy Feb 22, 2025
82466fd
wip
Geczy Feb 22, 2025
b3008e1
wip
Geczy Feb 22, 2025
a403557
wip
Geczy Feb 22, 2025
12ba198
wip
Geczy Feb 22, 2025
77cad86
wip
Geczy Feb 22, 2025
45440b7
wip
Geczy Feb 22, 2025
63cc456
wip
Geczy Feb 22, 2025
b6d03fb
wip
Geczy Feb 22, 2025
f87380c
wip
Geczy Feb 22, 2025
0f07602
wip
Geczy Feb 22, 2025
e94f0f5
wip
Geczy Feb 22, 2025
dea7035
wip
Geczy Feb 22, 2025
5b6cd51
wip
Geczy Feb 22, 2025
c6e84f6
wip
Geczy Feb 22, 2025
a77b908
Update build script to use Doppler for environment configuration
Geczy Feb 22, 2025
9a53d5c
wip
Geczy Feb 22, 2025
869b160
wip
Geczy Feb 22, 2025
070a928
wip
Geczy Feb 22, 2025
8ccfdbe
Remove placeholder feature tier entry
Geczy Feb 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,6 @@ next-env.d.ts
.idea
# Sentry Config File
.env.sentry-build-plugin

public/install.ps1
!src/lib/private/install.ps1
29 changes: 22 additions & 7 deletions biome.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/1.8.1/schema.json",
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
Expand All @@ -19,22 +19,37 @@
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 80,
"attributePosition": "auto"
"lineWidth": 100,
"attributePosition": "auto",
"ignore": [
"**/locales/**/*.json",
"**/.env*",
"**/.idea",
"**/node_modules",
"**/assets",
"**/dist/**",
"**/build",
"**/config.js",
"**/volumes",
"**/newrelic_agent.log",
"**/*.key"
]
},
"organizeImports": {
"enabled": true
},
"organizeImports": { "enabled": true },
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"correctness": { "noUnusedImports": "error", "noUnusedVariables": "off" }
"correctness": { "noUnusedImports": "error" }
}
},
"javascript": {
"formatter": {
"jsxQuoteStyle": "double",
"jsxQuoteStyle": "single",
"quoteProperties": "asNeeded",
"trailingCommas": "es5",
"trailingCommas": "all",
"semicolons": "asNeeded",
"arrowParentheses": "always",
"bracketSpacing": true,
Expand Down
Binary file modified bun.lockb
Binary file not shown.
255 changes: 255 additions & 0 deletions features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
# Setup

All exist as manual steps too

- Automated 7tv setup
- Automated dota 2 game client setup
- Automated making Dotabod a twitch moderator
- Automated OBS overlay setup

# Main features

- Multi-language support for the twitch chat bot
- Stream delay (in seconds) Increase the delay that Dotabod responds to game events.
- MMR tracker. Give or take 25 MMR after every ranked match.
- Twitch predictions. Let your chatters bet on your matches. Chatters can use their native Twitch channel points to bet on whether you win or lose a match.
- Party queue only option for MMR tracking
- Enable auto gamba for predictions
- Customizable prediction titles and durations

# Overlay features

## Minimap

Semi-transparent blocker that auto places itself over your minimap to deter people from farming your wards.

- Enable minimap blocker
- Simple minimap background
- Extra large minimap
- Right side minimap
- Battlepass hud
- Complex minimap option

## Picks

Prevent stream snipers from seeing your picks.

- Enable pick blocker
- There are several pick blocker overlays phases available. Dotabod intelligently auto chooses which one to show.

- During hero picking phase, heroes are fully covered
- When you pick early, and it isn't locked in yet. While the enemy can still pick ban your pick. Heroes are fully covered
- When your hero is locked in and can no longer be banned. Your hero will be shown, but your teammate's heroes are still fully covered.
- When you enter strategy phase, the overlay is removed.
- When all heroes are locked and can no longer be banned, all heroes will be shown

## Rank and mmr

- Show MMR
- Show leaderboard ranking
- Show rank badge

## Twitch predictions

- Show live prediction overlay
- Show live poll overlay

## Roshan timers

Dotabod can detect when roshan is killed or aegis is picked up.

- Roshan timer
- Aegis timer
- Use extra large minimap

The rosh timer starts red for 8 minutes (min rosh spawn), then turns yellow for 3 minutes (max rosh spawn).

Note: The data does not tell us when someone dies with aegis, so the aegis icon will remain for the full 5 minutes.

## Queue blocker

Stream snipers won't know what your queue time is to be able to snipe you.

- Enable queue blocker overlay
- Show finding match
- Custom find match text
- Both the "PLAY DOTA" in the bottom right, and the "Finding match" at the top left while in main menu will be blocked.

## Notable players

Show notable players for 2 minutes under the hero top bar.

- Enable overlay under hero top bar
- Show country flags in overlay
- Show country flags in !np twitch chat command

## Win probability

For top 100 immortal games, Dotabod can display the current win percent chance.

- Show win probability overlay

# Chat features

The bot reacts with chat messages to your game events as you play your match.

## Global settings

- Turn off every chatter (disables all chat features)

## Dotabod messages

- Tell chat when bets open, close, or get remade due to hero swap or match not scored scenario
- Tell chat anytime mmr changes

## Item Usage

- Use your midas (e.g. "Midas was finally used, 64 seconds late 🐢")
- Who paused the game? 🤔
- Pudge died with passive faerie fire 🤦
- Track power treads efficiency (e.g. "We toggled treads 6 time to save a total 284 mana this match")
- Track teleport scroll usage (e.g. "@techleed where's your tp 🤔" and "nice job getting a tp finally after 322 seconds 🐢")

## Heroes

- Pudge is smoked! 🚬
- Track kill streaks (e.g. "Pudge has a 4 kill streak 🤡" and "Pudge lost the 4 kill streak 😱")
- First blood notifications (e.g. "Pudge giving up first blood 🐸")

## Events

- Aegis pickup/denial notifications
- Roshan kill timer notifications with next spawn window
- Item tipping notifications
- Bounty rune gold notifications with thanks to contributors
- Match results with "gg nt 😔 go next" or "We have won 😎 go next"
- Match data found notifications with player info
- Neutral item tier availability notifications

# Advanced features

Looking for even more? They'll be here.

## OBS scene switcher (Optional)

Auto switch scenes in OBS depending on game state. Your blockers will still work without this.

> Note: OBS and Streamlabs have the same instructions (clarification from screenshots)

This is optional but useful if you want to make your stream look unique for different game states!

### Setup requirements

1. Must put the dotabod browser source in the scenes you want to block hero picks or minimap in.
2. Must set browser properties to Advanced access to OBS
3. Must create the following scenes (case sensitive):

#### Minimap blocker

`[dotabod] blocking minimap`
Whenever the minimap is first shown, switch to this scene

#### Picks blocker

`[dotabod] blocking picks`
As soon as picks are shown and heroes are able to be selected, switch to this scene

#### Game disconnected

`[dotabod] game disconnected`
Switch to this scene when you disconnect and leave a Dota game

## Managers

Below is a list of moderators for your channel. You can approve them to manage your Dotabod settings.

### Approve Managers

By approving a user, you're allowing them to access and modify your Dotabod dashboard. Approved managers can manage features, toggle commands, and update settings on your behalf.

> Note: They will not have access to your setup page, downloading the GSI cfg, nor overlay URL.

### How it works

Once you approve a user, they will login to dotabod.com and be able to access your dashboard by using the channel selector.

## Troubleshooting Tools (New Section)

- Built-in connection testing with !ping command
- Steam account verification steps
- OBS setup assistance with visual guides
- Comprehensive help documentation
- Automatic error detection and suggestions
- Step-by-step setup verification

# Commands

An exhaustive list of all commands available using Twitch chat.

## Mod/Streamer Commands

- `!toggle` (`!enable`, `!disable`) - Toggle Dotabod on/off
- `!online` (`!offline`, `!forceonline`, `!forceoffline`) - Update stream status
- `!mute` (`!unmute`) - Toggle auto chat messages
- `!fixparty` (`!fixsolo`) - Fix party match MMR calculation
- `!refresh` - Refresh OBS overlay
- `!steam` (`!steamid`, `!account`) - Show Steam ID
- `!setmmr` (`!mmr=`, `!mmrset`) - Manually set MMR
- `!beta` (`!joinbeta`, `!leavebeta`) - Toggle beta features
- `!pleb` - Allow one non-sub to chat
- `!modsonly` - Toggle mods-only chat mode
- `!resetwl` - Reset win/loss counter

## Game Stats Commands

- `!mmr` (`!rank`, `!medal`) - Show current MMR and rank
- `!avgmmr` (`!avg`) - Show match average MMR
- `!xpm` - Show experience per minute
- `!gpm` - Show gold per minute
- `!apm` - Show actions per minute
- `!wl` (`!score`, `!winrate`, `!wr`) - Show win/loss record
- `!ranked` (`!isranked`) - Check if current game is ranked
- `!smurfs` (`!lifetimes`, `!totals`, `!games`) - Show total games for all players
- `!gm` (`!medals`, `!ranks`) - Show all players' ranks
- `!lg` (`!lastgame`) - Show players from last game
- `!lgs` (`!lastgamescore`, `!lgscore`) - Show last game result

## Hero & Item Information

- `!hero` - Show current hero stats
- `!items` (`!item`) - Show hero inventory
- `!builds` (`!d2pt`, `!build`, `!getbuild`) - Show pro builds
- `!profile` (`!stats`, `!check`) - Show player profile by color
- `!facet` - Show hero ability information
- `!innate` - Show hero innate ability
- `!shard` - Show Aghanim's Shard upgrade
- `!aghs` - Show Aghanim's Scepter upgrade

## Game State Commands

- `!rosh` (`!aegis`) - Show Roshan/Aegis status
- `!wp` - Show win probability
- `!spectators` - Show spectator count
- `!ping` - Check if bot is online
- `!np` (`!who`, `!players`) - Show notable players

## Profile Links

- `!opendota` - Show OpenDota profile
- `!dotabuff` - Show Dotabuff profile

## Utility Commands

- `!commands` - List available commands
- `!delay` (`!streamdelay`) - Show stream delay
- `!version` - Show bot version
- `!locale` (`!translation`) - Show language settings
- `!dotabod` - Show bot information

Command Access Levels:

- All: Available to everyone
- Mods: Moderators only
- Streamer: Stream owner only

Note: Commands can be enabled/disabled individually through the dashboard. Many commands have aliases for convenience.
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"push": "doppler run -- bun prisma db push",
"studio": "doppler run -- bun prisma studio",
"build": "next build",
"build-local": "doppler run -- bun run build",
"start": "next start",
"lint": "next lint",
"up": "bun upgrade-interactive --latest",
Expand Down Expand Up @@ -62,6 +63,7 @@
"redux-socket.io-middleware": "^1.0.4",
"retry": "^0.13.1",
"socket.io-client": "^4.8.1",
"stripe": "^17.6.0",
"swr": "^2.2.5",
"tailwindcss": "^3.4.14",
"tmi-emote-parse": "^2.0.0",
Expand Down Expand Up @@ -91,5 +93,6 @@
"@prisma/engines",
"@sentry/cli",
"prisma"
]
],
"packageManager": "[email protected]+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
Loading