Code Monkey home page Code Monkey logo

avrae's Introduction

Avrae Discord Bot

Avrae Website

Build Status

Avrae is a Discord bot designed to help you and your friends play D&D online.

You can join the Avrae Development Discord here, and invite Avrae to your own Discord server here!

Key Features

Advanced Dice Roller

With a custom dice parser, Avrae is one of the most advanced dice rollers on Discord, capable of supporting pretty much every type of roll needed to play D&D. Advantage, disadvantage, and crits are built in, you can keep, drop, or reroll dice as needed, dice can explode, and dice can be bounded.

Want to use the dice roller in your own code? Check out the code!

Character Sheet Integration

Avrae can read character sheets from D&D Beyond, Dicecloud, or a Google Sheet, automatically generating macros to roll attacks, ability checks, and saving throws. A player can then simply use a command to make a check, save, attack, or cast, and all necessary rolls will be resolved automatically.

Initiative Tracking

The initiative tracker is a fast way to track combat in a text channel. It supports automatic combatant sorting, HP, AC, resistance, and status effect tracking, and integration with the character sheet manager and 5e content to further streamline combat.

Moddability

Have a feature in mind that isn't already in Avrae? Avrae provides a fully-featured modding API to write your own commands, and a place to share them with the community!

Check out the docs and the Alias Workshop!

Contributing

There are a few options to run Avrae locally. Docker is easier to get started with with less managment of dependencies, but slower and more resource-intensive.

Using Docker (Recommended)

Check out README-docker.md.

Building Manually

Dependencies

Services/OS

Support Files

You'll need to create a Google Drive Service Account. You can find instructions on how to do this here.

Follow steps 1-7 in the For Bots: Using Service Account portion. Rename the JSON avrae-google.json and put it in the project root.

Python Packages

We recommend using a Virtual Environment for Avrae development to prevent package installs from polluting the global Python install. You can create and active a virtual environment by running:

$ python3 --version  # to ensure that you are creating a venv from the right python version
$ python3 -m venv venv
$ source venv/bin/activate
# if the venv was set up correctly, you should see (venv) before your username in the terminal
# run these commands to check the installed version and path
(venv) $ python --version
Python 3.X.X
(venv) $ pip --version
pip X.Y.Z from (project root)/venv/lib/python3.X/site-packages/pip (python 3.X)

To install the dependencies, run:

(venv) $ pip install -r requirements.txt

Optional - You can install the avrae-automation-common and draconic dependencies from your local filesystem rather than pip+git, to make working on depended libraries in parallel easier:

(venv) $ pip install /path/to/automation-common -e
(venv) $ pip install /path/to/draconic -e

Any changes to the library will immediately be picked up in avrae without requiring a reinstall of the library.

Environment Variables

Name Description Used For Set By (dev) Set By (prod) Required?
DISCORD_BOT_TOKEN The bot token used to authenticate to the Discord API. See "Discord Bot Token", below. Connecting to the Discord API you AWS Secrets Manager via Terraform yes
TESTING Whether the bot is running in a dev environment. See "Testing Env Var", below. Also set if test arg supplied in CLI. Enabling certain debug logs you N/A no
ENVIRONMENT The environment the bot is running in. Defaults to development if TESTING is set, or production otherwise. Logs (e.g. Sentry) set to development Terraform yes
GIT_COMMIT_SHA The commit SHA of the running deploy. Cluster coordination key N/A Docker via GH Actions prod only
NUM_CLUSTERS The number of clusters (ECS tasks) Avrae is running across. Defaults to 1. Cluster coordination N/A Terraform prod only
NUM_SHARDS An explicit override for the number of shards to run across all shards. Defaults to dynamic value from Discord. Cluster coordination N/A Terraform (nightly/stg) no
RELOAD_INTERVAL An interval to automatically reload gamedata at, in seconds. Defaults to 0. This should be set to 0. Loading gamedata N/A N/A no
ECS_CONTAINER_METADATA_URI https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-metadata-endpoint-v3-fargate.html Cluster coordination N/A AWS Fargate prod only
MONSTER_TOKEN_ENDPOINT The base URL that monster token paths defined in monster gamedata are relative to. !token N/A Terraform prod only
DDB_MEDIA_S3_BUCKET_DOMAIN The S3 bucket domain for DDB media assets, such as character avatars. !token N/A Terraform prod only
DRACONIC_SIGNATURE_SECRET The secret used to sign signatures in the Draconic API's signature() function. Defaults to secret. Aliasing optional AWS Secrets Manager via Terraform prod only
MONGO_URL The connection URL used to connect to MongoDB. Defaults to mongodb://localhost:27017. Connecting to database you AWS Secrets Manager via Terraform yes
MONGODB_DB_NAME The name of the database in Mongo to use. Defaults to avrae. Connecting to database optional Terraform no
REDIS_URL The connection URL used to connect to Redis. Defaults to redis://localhost:6379/0. Connecting to database you Terraform yes
REDIS_DB_NUM The database number to use in Redis. Defaults to 0. Connecting to database optional Terraform no
DEFAULT_PREFIX The default command prefix. Defaults to !. Running commands optional Terraform no
SENTRY_DSN The Sentry DSN used to send exceptions to Sentry. If not set, no errors are sent to Sentry. Monitoring optional AWS Secrets Manager via Terraform prod only
DD_SERVICE The name of the service, used for DataDog. If not set, disables DataDog tracing and profiling. Monitoring optional Terraform prod only
NO_DICECLOUD If set, disables Dicecloud v1 connections in the running bot. Defaults to true if DICECLOUD_USER is not set. CI optional N/A no
DICECLOUD_USER The Dicecloud v1 username of the bot account. Sheet Import you Terraform yes
DICECLOUD_PASS The Dicecloud v1 password of the bot account. Sheet Import you AWS Secrets Manager via Terraform yes
DICECLOUD_TOKEN The Dicecloud v1 API key of the bot account. Sheet Import you AWS Secrets Manager via Terraform yes
NO_DICECLOUDV2 If set, disables Dicecloud v2 connections in the running bot. CI optional N/A no
DCV2_NO_AUTH If set, connects to Dicecloud v2 without any form of authentication. As such, any imported sheets must be public. Defaults to true if DICECLOUDV2_USER is not set. CI optional N/A no
DICECLOUDV2_USER The Dicecloud v2 username of the bot account. Sheet Import you Terraform yes
DICECLOUDV2_PASS The Dicecloud v2 password of the bot account. Sheet Import you AWS Secrets Manager via Terraform yes
GOOGLE_SERVICE_ACCOUNT The contents of the Google Drive Service Account JSON key file. Defaults to a file named avrae-google.json if not set. Sheet Import you AWS Secrets Manager via Terraform yes
DDB_AUTH_SECRET The secret used to sign JWT claims to exchange Discord user info for a STT via the Auth Service. Entitlements 1Password AWS Secrets Manager via Terraform DDB team only
DDB_AUTH_WATERDEEP_SECRET The secret used to verify JWTs returned from the Auth Service. Entitlements 1Password AWS Secrets Manager via Terraform DDB team only
DDB_AUTH_AUDIENCE Override a verification for the aud claim of an Auth Service JWT. Defaults to avrae.io. Entitlements N/A N/A no
DDB_AUTH_ISSUER Override a verification for the iss claim of an Auth Service JWT. Defaults to dndbeyond.com. Entitlements N/A N/A no
DDB_AUTH_EXPIRY_SECONDS Override a JWT's lifetime for the Discord -> STT exchange. Defaults to 5 minutes (300). Entitlements N/A N/A no
DDB_AUTH_SERVICE_URL The base URL for requests to the DDB Auth Service. If not set, all entitlements code is disabled. Entitlements 1Password Terraform DDB team only
DYNAMO_REGION The AWS region to search for resources in. This controls more than Dynamo. Defaults to us-east-1. Entitlements 1Password Terraform DDB team only
DYNAMO_ENTITLEMENTS_TABLE The name of the DynamoDB table to query for entitlements data. Defaults to entitlements-live. Entitlements 1Password Terraform DDB team only
AWS_ACCESS_KEY_ID The AWS Access Key ID to connect to AWS resources. Entitlements 1Password AWS Fargate DDB team only
AWS_SECRET_ACCESS_KEY The AWS Secret Access Key to connect to AWS resources. Entitlements 1Password AWS Fargate DDB team only
NLP_KINESIS_DELIVERY_STREAM The name of the AWK Kinesis Firehose delivery stream used to ingest NLP events. UPenn NLP N/A Terraform no
CHARACTER_COMPUTATION_ENDPOINT The API endpoint used to call the Character Computation lambda. Sheet Import you Terraform DDB team only
DDB_WATERDEEP_URL The base URL for requests to the Waterdeep monoloth. Defaults to https://www.dndbeyond.com. Campaign Link 1Password Terraform no
DDB_GAMELOG_ENDPOINT The endpoint used to post Game Log events to the Game Log. Defaults to https://game-log-rest-live.dndbeyond.com/v1. Campaign Link 1Password Terraform no
DDB_CHARACTER_SERVICE_URL The base URL for requests to the Character Service. Defaults to https://character-service.dndbeyond.com/character/v5. Campaign Link 1Password Terraform no
DDB_SCDS_SERVICE_URL The base URL for requests to the Simple Character Data Store. Defaults to https://character-service-scds.dndbeyond.com/v2. Campaign Link 1Password Terraform no
LAUNCHDARKLY_SDK_KEY The LaunchDarkly SDK Key. Feature Flags 1Password AWS Secrets Manager via Terraform DDB team only
DBL_TOKEN The Discord Bot List API token. Updating server count N/A AWS Secrets Manager via Terraform no

Discord Bot Token

To create a Discord bot user, go to the Discord Developer Portal.

  • New Application, give it a cool name, Create.
  • Bot > Add Bot.
  • (Optional but recommended): Switch off Public Bot so only you can add this bot to servers.
  • Scroll down to Privileged Gateway Intents, and enable the switches to the right of Server Members Intent and Message Content Intent.
  • Click to Reveal Token, this is your DISCORD_BOT_TOKEN.

Testing Env Var

The TESTING env var, if present, enables/disables the following:

  • Dicecloud Client: Meteor debug logs enabled
  • cogs.publicity: Discord Bot List update disabled
  • config: ENVIRONMENT set to development by default if not manually set
  • Discord Application Commands: enables command sync debug logs and command testing guilds

Running

(venv) $ python dbot.py test
VSCode launch.json Template
  {
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Run Avrae",
        "type": "python",
        "request": "launch",
        "program": "dbot.py",
        "console": "integratedTerminal",
        "env": {
          "DISCORD_BOT_TOKEN":" ",
          "DISCORD_OWNER_USER_ID": " ",
          "DICECLOUD_USER": " ",
          "DICECLOUD_PASS": " ",
          "DICECLOUD_TOKEN": " ",
          "DICECLOUDV2_USER": " ",
          "DICECLOUDV2_PASS": " ",
          "MONGO_URL": " ",
          "REDIS_URL": " ",
          "ENVIRONMENT": " ",
          "DDB_AUTH_SECRET": " ",
          "DYNAMO_REGION": " ",
          "DYNAMO_ENTITLEMENTS_TABLE": " ",
          "DDB_AUTH_SERVICE_URL": " ",
          "AWS_ACCESS_KEY_ID": " ",
          "AWS_SECRET_ACCESS_KEY": " ",
          "DDB_AUTH_WATERDEEP_SECRET": " ",
          "CHARACTER_COMPUTATION_ENDPOINT": " ",
          "DDB_WATERDEEP_URL": " ",
          "DDB_GAMELOG_ENDPOINT": " ",
          "DDB_CHARACTER_SERVICE_URL": " ",
          "DDB_SCDS_SERVICE_URL": " ",
          "LAUNCHDARKLY_SDK_KEY": " "
        }
      }
    ]
  }

Testing

This repo contains a pytest test suite that mocks a number of interactions between Avrae and the Discord API, and runs end-to-end tests between user input, bot output, and database state.

These tests can be found in tests/.

Dependencies

(venv) $ pip install -r tests/requirements.txt

Running

Tests can either be run using Docker Compose, or manually.

Docker

docker-compose -f docker-compose.ci.yml -p avrae up -d --build
docker logs -f avrae_tests_1

Once tests complete, it is recommended to clean up the containers with docker-compose down.

Manually

(venv) $ TESTING=1 pytest tests/

In either case, you should set NO_DICECLOUD=1.

Docs

Avrae uses Sphinx to generate documentation for the Aliasing API and Automation Engine. The source for this documentation can be found in docs/.

By default, each push to master will trigger a new build of the docs at https://avrae.readthedocs.io/en/latest/.

You can also build the docs manually:

# install dependencies
(venv) $ cd docs
(venv) $ pip install -r requirements.txt
# build and open browser
(venv) $ make preview
# build
(venv) $ make html

Committing, Formatting, and Linting

Avrae uses Black to format and lint its Python code. Black is automatically run on every commit via pre-commit hook, and takes its configuration options from the pyproject.toml file.

The pre-commit hook is installed by by running pre-commit install from the repo root. The hook's configuration is governed by the .pre-commit-config.yaml file.

Dependencies

In order to run pre-commit or black, they must be installed. These dependencies are contained within the test/requirements.txt file, and can be installed like so:

(venv) $ pip install -r test/requirements.txt

avrae's People

Contributors

1drturtle avatar astralobservatory avatar berend-van-lochem avatar chrishamilton91 avatar croebh avatar dependabot[bot] avatar dragoomind avatar driesceuppens avatar dusk-argentum avatar etriebe avatar ianfhunter avatar infinidoge avatar justhalf avatar kbsletten avatar kedarothort avatar kevklash avatar lathaon avatar lazydope avatar madcowfred avatar nadizak avatar properattorney avatar purplecharmanderz avatar seanstoves avatar storytellermahkasad avatar thecoppersanctum avatar thereverendb avatar tlake avatar verygreatfrog avatar ydomat avatar zhudotexe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

avrae's Issues

AFR-141 !i selfcast

Feature Request
!i selfcast
Who? Anyone with reaction spells
How? !i selfcast spell -t target OR !i aoacast [combatant] spell -t target
Why? As is we need to !i goto, and most people don't really know how that works
What Part? Initiative

  • silverbass#2407

AFR-131 Adding rage into the init options. It would be nice to be able to toggle rage on a character, where it factors in damage and damage resistances, since there can be quite a few to change at once.

Feature Request
Adding rage into the init options. It would be nice to be able to toggle rage on a character, where it factors in damage and damage resistances, since there can be quite a few to change at once.

Who would use it?
Barbarians

What part of the bot?
I think adding it to the !init opt command would be best.

How would it work?
At a basic level, translating -rage into the resistances.

More complexly, -rage starts a series of checks. First step checks. Check for flags, if true start step 3. First is bludgening resist, if true do nothing, if false flag 'bludgeoning', same for piercing and slashing. End first step, begin second step. If a flag is triggered, apply resistance of the same name to the character. Repeat for all flags. End second step, end command. Third step is to check flags and enter the resistances again, which will remove them. End third step, begin fourth step. Fourth step is to delete all flags. End fourth step, end command.

Alternatively have -rage begin and !rage end, where begin does steps 1 and 2, while end is 3 and 4.

The purpose for making it this complex is because some things will already have resistances that we dont want removed, likewise for ending rage, where we dont want to remove things like racial resistances.

  • SquarePeon#6441

AFR-140 Tracking of death saving throws

Feature Request
Tracking of death saving throws
Who would use it?
People using initiative tracker who fall
How would it work?
Once a player reaches 0 hit points, but not the inverse of their maximum hit points, they have the option of making a death save, possibly using the existing save command. Once they do, the system tracks how many successes and failures they have, including failures from being attacked by enemies.
Why should this be added?
Streamlines battles, removing the requirement for death saves to be manually rolled and tracked.

  • RS_Mind#8195

AFR-137 A command to add exhaustion to Dicecloud.

Feature Request
A command to add exhaustion to Dicecloud.

Who would use it? Anyone who used Avrae with DiceCloud
What part of the bot? functionality through a DiceCloud command
How would it work? !exhaustion increase or !exhaustion +1
Why should this be added? Right now, for people using DiceCloud, we have to manually add the level of exhaustion and then do !update afterwards in order for it to implement

  • venn177#8702

AFR-134 Limit number of multiline commands to an un-abusable number.

Feature Request
Limit number of multiline commands to an un-abusable number.

Who would use it? The mods sanity
What part of the bot? The multiline command
How would it work? Limit it to like 50-100 maybe
Why should this be added? Because I ran a multiline command to print the entire script of the Bee Movie and it took 27 minutes (in a private server)

  • nadizak#5061

AFR-124 Was thinking it might be useful to have an Avrae character log. You could use it to figure out what spells you cast earlier in the day (super useful for PBP games I would think) or see if you actually remembered to apply that heal your ally gave you. It would just be a record of the last maybe like 200 actions take on the character (and it would be PM'ed by default. Maybe an option to print a chunk of 10 lines or so)

Feature Request
Was thinking it might be useful to have an Avrae character log. You could use it to figure out what spells you cast earlier in the day (super useful for PBP games I would think) or see if you actually remembered to apply that heal your ally gave you. It would just be a record of the last maybe like 200 actions take on the character (and it would be PM'ed by default. Maybe an option to print a chunk of 10 lines or so)

Things to track would be:
HP and THP changes.
Spell casts and spellslot changes.
Short and Long rests taken.
Consumables changes.
Could also log effects gained and lost in inititive.
Maybe a customization alias function to add things to the log as well.

Usage would be something like:
!log to PM your history to yourself.
!log cast to filter it to cast or spellslot changes
!log -p hp to print hp changes in channel

Who would use it? Players
What part of the bot? sheetManager.py probably
How would it work? !log, !log cast, !log ss, !log hp
Why should this be added? Players/DM could run !log to see the last changes to a character.

AFR-123 Make Taine record the name of who reports bugs, feature requests, notes in github

Feature Request: Make Taine record the name of who reports bugs, feature requests, notes in github
Who would use it?: Anyone who wants to read about what's up with an issue
What part of the bot? The Taine part.
How would it work?: Record the proper discord name, as in Brent#0453 so they could be DMed if necessary.
Why should this be added?: Cause you might end up with erroneous reports from a particular user or a conversation that makes no sense because two Taine note users are talking back and forth and you can't differentiate.

  • Brent#0451

Can Reproduce - 187421759484592128

Verification: 1

AVR-116 critterdb import failing (possibly due to SNI?)

What is the bug?: critterdb import failing (possibly due to SNI?)
Severity: High
Steps to reproduce: Context has command which was run, and it ends up with the following:
Error: Command raised an exception: CertificateError: hostname 'www.critterdb.com' doesn't match 'critterdb.com'
Uh oh, that wasn't supposed to happen! Please join https://support.avrae.io/ and tell the developer that Avrae has been stopped!
Context: !bestiary import https://critterdb.com/#/publishedbestiary/view/5b5f1c08448941624c3426cf

DDB-007 Having Flurry of Blows from Monk errors avrae

What is the bug?: Having Flurry of Blows from Monk errors avrae
Severity: high
Steps to reproduce: Have a monk of at least level 2
Context: !beyond

Traceback (most recent call last):
  File "AVRAE\avrae-master\cogs5e\sheetManager.py", line 1175, in beyond
    sheet = parser.get_sheet()
  File "AVRAE\avrae-master\cogs5e\sheets\beyond.py", line 96, in get_sheet
    attacks = self.get_attacks()
  File "AVRAE\avrae-master\cogs5e\sheets\beyond.py", line 432, in get_attacks
    extend(self.get_attack(action, "action"))
  File "AVRAE\avrae-master\cogs5e\sheets\beyond.py", line 324, in get_attack
    'damage': f"{atkIn['dice']['diceString']}[{parse_dmg_type(atkIn)}]",
TypeError: 'NoneType' object is not subscriptable
  • Croebh#5603

AFR-135 I request that server aliases be allowed to overpower user aliases, either on an individual scale or a server-wide scale

Feature Request
I request that server aliases be allowed to overpower user aliases, either on an individual scale or a server-wide scale

Who would use it? server admins who want to ensure their server aliases are not tampered with
What part of the bot? general functionality
How would it work? well, either give a server wide option for server aliases to overpower user aliases or have an option when declaring a server alias that allows them to be used instead of user aliases
Why should this be added? Basically, if a server has an alias like !someroll, the user could define their own alias !someroll that allows them to do something else, like gain an in-game advantage

  • Espequair#2538

AFR-132 I request that the discord.py `ctx` variable be available inside the python scope we work in in aliases

Feature Request
I request that the discord.py ctx variable be available inside the python scope we work in in aliases
Who would use it? it would allow for server admins to add a mention of the user calling a server alias
What part of the bot? Alias
How would it work? for example, we could use !serveralias example echo {{ctx.message.author.mention}} and calling !example would ping the user making the request
Why should this be added? It would allow for a greater flexibility with alias

  • Espequair#2538

AFR-146 guild_prefix function available for aliasing

Feature Request
guild_prefix function available for aliasing

Who would use it? Aliasers
What part of the bot? Aliasing
How would it work? function just returns the guild_prefix just like on backend
Why should this be added? Can be used to make multiline work better for servers with a different prefix. e.g. a server uses / so multilines that have ! hardcoded in won't work it seems. Alternatively we could have multiline treat ! as a prefix no matter what on the backend

  • nadizak#5061

AFR-127 More supported arguments within !init effect. Dis would be nice for blinded and poisoned. Adv would be nice for invisible. -d1 would be nice for Necrotic Shroud and similar affects. Would also be cool if effects could support snippets, but that's lower priority imo.

Feature Request More supported arguments within !init effect. Dis would be nice for blinded and poisoned. Adv would be nice for invisible. -d1 would be nice for Necrotic Shroud and similar affects. Would also be cool if effects could support snippets, but that's lower priority imo.

Who would use it? Everyone
What part of the bot? !init effect
How would it work? Additional arguments for !init effect
Why should this be added? Easier tracking of effects, not having to remember to use the same snippet every turn while an effect is active.

AFR-125 Was thinking it might be useful to have an Avrae character log.

Feature Request
Was thinking it might be useful to have an Avrae character log.

Who would use it? Players
What part of the bot? sheetManager.py probably
How would it work? !log, !log cast, !log ss, !log hp
Why should this be added? Players/DM could run !log to see the last changes to a character.

AFR-129 A way to roll Random dungeon. Using the DMG APPENDIX A: RANDOM DUNGEONS

Feature Request
A way to roll Random dungeon. Using the DMG APPENDIX A: RANDOM DUNGEONS

Who would use it? Everyone
What part of the bot? Unsure.
How would it work? (I am not sure about this) Using commands like !passage or !door or something. I do not think a Command for each part of the dungeon would be needed just the next part in it.
Why should this be added? It would be a fun addition to the bot. Using Avrae to roll up random dungeons or the next part of a dungeon.

  • Smiley#3953

AVR-122 HELP IS BROKE

What is the bug?: HELP IS BROKE
Severity: CRITICAL
Steps to reproduce: !help
Context: !help

  • Dusk-Argentum#6530

AFR-136 A means to use the stats of any creature that a player has turned into by means of a polymorph spell.

Feature Request
A means to use the stats of any creature that a player has turned into by means of a polymorph spell.

Who would use it? Literally anyone using the polymorph spell.
What part of the bot? Generally, I'd say during initiative/combat, but since polymorph can be used outside of combat, there should also be a way for the effect to work outside of it, too, without having to roll everything manually.
How would it work? The character's stats would temporarily be converted to match the creature in the monster manual until they're reverted into their normal form.
Why should this be added? Because it could add a whole new ease of access to using the polymorph spell making it so players would not have to roll their attacks or actions manually by means of custom rolls.

  • CptRagebeard#1049

AFR-138 ((

**Feature Request((
A "set_gvar" command.

Who would use it? Servers that want to have a common editable reference without having to leave discord. EX: a set of named links to npc pictures.
What part of the bot? Same as "get_gvar"
How would it work? set_gvar("gvarID","content")
Why should this be added? Quality of life change, allowing users to edit gvar data without leaving discord.

  • UberAffe#5679

DDB-008 Character sheet becomes invalid when you toggle a melee weapon's Hex toggle on for Hexblades.

What is the bug?: Character sheet becomes invalid when you toggle a melee weapon's Hex toggle on for Hexblades.
Severity: High (a broken feature, major functional impact)
Steps to reproduce:

  1. Create a Hexblade, any level.
  2. Add a weapon to the inventory on D&D Beyond.
  3. Open the weapon options and toggle the option "Hex" on.
  4. Attempt to use !Beyond or !Update. It will throw an error saying character sheet not valid.
'int' object is not subscriptable```
**Context**: !beyond and !update

- Ran#8368

AFR-143 The ability to have Avrae edit old embeds with new results.

Feature Request
The ability to have Avrae edit old embeds with new results.
Who would use it? People with aliases that have constantly-changing information.
What part of the bot? Aliases? Embeds?
How would it work? !embedupdate [messageid]
Why should this be added? So old embeds don't have to constantly be reposted every time a value within them is changed. (More context in note.)

  • Dusk-Argentum#6530

DDB-006 Avrae uses the snippet field for the effect text, when it should probably use the description field (snippet field is for the light explanation text that appears in the action section of the dbb web sheet)

What is the bug?: Avrae uses the snippet field for the effect text, when it should probably use the description field (snippet field is for the light explanation text that appears in the action section of the dbb web sheet)
Severity: very low
Steps to reproduce: Supply text for both the description and snippet fields
Context: !beyond

  • matthileo#0735

AVR-113 `!bestiary import` gives the following error message when trying to import a bestiary: Error: Command raised an exception: KeyError: 'value'

**What is the bug? !bestiary import gives the following error message when trying to import a bestiary: Error: Command raised an exception: KeyError: 'value'
Uh oh, that wasn't supposed to happen! Please join https://support.avrae.io/ and tell the developer that Avrae must be fought!
Severity: Moderate
Steps to Reproduce: `!bestiary import https://critterdb.com/#/publishedbestiary/view/5b5b848e448941624c3421d2
Context: CritterDB

AFR-139 Support for the variant Spell Points system in the DMG, page 288. It replaces spell slots with points.

Feature Request
Support for the variant Spell Points system in the DMG, page 288. It replaces spell slots with points.
Who would use it?
Those who like extra flexibility in casters
How would it work?
An option to enable it after loading a character with slots (points can be calculated directly from number of slots), then it automatically subtracts the points upon casting like it does for slots, and ignores spell slot limits.
Why should this be added? quality of life and significant streamlining for those using it.

  • Marcus#3244

test

this is a programmatic test issue, ignore this

AFR-145 Import tool proficiencies from dndbeyond and enable tool checks.

Feature Request
Import tool proficiencies from dndbeyond and enable tool checks.

Who would use it? Everyone with tool proficiencies
What part of the bot? SheetManager
How would it work? ![tool|t] <tool> [args], same args as in !check, maybe just implement it as checks?
Why should this be added? Currently everyone has to create multiple aliases for their characters to implement that tools are not ability bound, also global aliases can not check for proficiencies.

  • Thyzerle#1933

AFR-128 More supported arguments within !init effect.

Feature Request
More supported arguments within !init effect.

Who would use it? Everyone
What part of the bot? !init effect
How would it work? Additional arguments for !init effect
Why should this be added? Easier tracking of effects, not having to remember to use the same snippet every turn while an effect is active.

AFR-130 I request Avrae to auto-organize your features in dicecloud using the paint box.

Feature Request
I request Avrae to auto-organize your features in dicecloud using the paint box.

Who would use it? the OCD people that use Dicecloud
What part of the bot? !autochar
How would it work? it would use the paintbox and color the features by level.
Why should this be added? It would make things more organized for new dicecloud users and help veterans make characters with autochar and organize the features easily.

  • Steel#7867

AFR-122 I would like to request the ability to delete a message Avrae has sent for us

Feature Request
I would like to request the ability to delete a message Avrae has sent for us

Who would use it? Anyone who requests information by mistake, or in the wrong channel
What part of the bot? General functionalities
How would it work? !removelast or !clean ? The exact wording does not matter. It would delete the last message posted in the channel that the user asked for.
Why should this be added? Sometimes, players without mod powers in a channel make requests they shouldn't. !clean would allow to clean it themselves without having a mod be involved.

AFR-126 More supported arguments within `!init effect`. Dis would be nice for blinded and poisoned. Adv would be nice for invisible. -d1 would be nice for Necrotic Shroud and similar affects. Would also be cool if effects could support snippets, but that's lower priority imo.

Feature Request
More supported arguments within !init effect. Dis would be nice for blinded and poisoned. Adv would be nice for invisible. -d1 would be nice for Necrotic Shroud and similar affects. Would also be cool if effects could support snippets, but that's lower priority imo.

Who would use it? Everyone
What part of the bot? !init effect
How would it work? Additional arguments for !init effect
Why should this be added? Easier tracking of effects, not having to remember to use the same snippet every turn while an effect is active.

AFR-144 Update of The Cheatsheet for the site

Feature Request
Update of The Cheatsheet for the site

Who would use it? anyone who uses the cheatsheet for aliasing
What part of the bot? the website
How would it work? update the websites code
Why should this be added? Help anyone who uses the cheatsheet would like to have the updated code there so they dont miss anything

  • Noire#2171

AFR-142 -y parameter for !i end

Feature Request
-y parameter for !i end

Who would use it? Basically everyone who's annoyed by "Are you sure.." prompts
What part of the bot? Initiative
How would it work? !i end -y would end the battle without confirmation
Why should this be added? Some people (like myself) are annoyed by constant confirmations and want to get rid of them

  • D͓̠͓̖̬̥ͤ͛̈́̓M͈͔͎̆̄ͅ#8593

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.