├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE.md
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── config.yml
│ └── feature_request.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ ├── lint_python.yaml
│ ├── publish_crowdin.yaml
│ ├── publish_pypi.yml
│ └── tests.yml
├── .gitignore
├── .readthedocs.yml
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── babel.cfg
├── crowdin.yaml
├── docs
├── .resources
│ ├── copy_secret.png
│ ├── launched_interface.png
│ ├── select_add_redirect.png
│ ├── select_app.png
│ ├── select_oauth2.png
│ └── submit_redirect.png
├── Makefile
├── conf.py
├── configuration_guides
│ ├── index.rst
│ ├── installing_companion_cog.rst
│ ├── multibot.rst
│ └── singlebot.rst
├── help_and_support.rst
├── index.rst
├── installation_guides
│ ├── mac_linux_installation.rst
│ ├── systemctl_startup.rst
│ └── windows_installation.rst
├── launching_guides
│ ├── running_webserver_multi_bot.rst
│ └── running_webserver_one_bot.rst
├── make.bat
├── reverse_proxy_apache.rst
└── reverse_proxy_nginx.rst
├── documents
├── Cookie Policy.md
├── Privacy Policy.md
└── Third Party Disclaimer.md
├── make.bat
├── pyproject.toml
├── reddash
├── LICENSE.md
├── __init__.py
├── __main__.py
└── app
│ ├── __init__.py
│ ├── api
│ ├── __init__.py
│ └── routes.py
│ ├── base
│ ├── __init__.py
│ ├── routes.py
│ ├── static
│ │ └── assets
│ │ │ ├── css
│ │ │ ├── black-dashboard.css
│ │ │ ├── black-dashboard.css.map
│ │ │ ├── black-dashboard.min.css
│ │ │ ├── bootstrap-select.min.css
│ │ │ └── nucleo-icons.css
│ │ │ ├── fonts
│ │ │ ├── nucleo.eot
│ │ │ ├── nucleo.ttf
│ │ │ ├── nucleo.woff
│ │ │ └── nucleo.woff2
│ │ │ ├── img
│ │ │ ├── dnd.png
│ │ │ ├── idle.png
│ │ │ ├── offline.png
│ │ │ └── online.png
│ │ │ ├── js
│ │ │ ├── black-dashboard.js
│ │ │ ├── black-dashboard.js.map
│ │ │ ├── black-dashboard.min.js
│ │ │ ├── bootstrap-select.min.js
│ │ │ ├── core
│ │ │ │ ├── bootstrap.min.js
│ │ │ │ ├── jquery.min.js
│ │ │ │ └── popper.min.js
│ │ │ └── plugins
│ │ │ │ ├── bootstrap-notify.js
│ │ │ │ ├── chartjs.min.js
│ │ │ │ └── perfect-scrollbar.jquery.min.js
│ │ │ └── scss
│ │ │ ├── black-dashboard.scss
│ │ │ └── black-dashboard
│ │ │ ├── _buttons.scss
│ │ │ ├── _typography.scss
│ │ │ ├── bootstrap
│ │ │ ├── _alert.scss
│ │ │ ├── _badge.scss
│ │ │ ├── _breadcrumb.scss
│ │ │ ├── _button-group.scss
│ │ │ ├── _buttons.scss
│ │ │ ├── _card.scss
│ │ │ ├── _carousel.scss
│ │ │ ├── _close.scss
│ │ │ ├── _code.scss
│ │ │ ├── _custom-forms.scss
│ │ │ ├── _dropdown.scss
│ │ │ ├── _forms.scss
│ │ │ ├── _functions.scss
│ │ │ ├── _grid.scss
│ │ │ ├── _images.scss
│ │ │ ├── _input-group.scss
│ │ │ ├── _jumbotron.scss
│ │ │ ├── _list-group.scss
│ │ │ ├── _media.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _modal.scss
│ │ │ ├── _nav.scss
│ │ │ ├── _navbar.scss
│ │ │ ├── _pagination.scss
│ │ │ ├── _popover.scss
│ │ │ ├── _print.scss
│ │ │ ├── _progress.scss
│ │ │ ├── _reboot.scss
│ │ │ ├── _root.scss
│ │ │ ├── _spinners.scss
│ │ │ ├── _tables.scss
│ │ │ ├── _toasts.scss
│ │ │ ├── _tooltip.scss
│ │ │ ├── _transitions.scss
│ │ │ ├── _type.scss
│ │ │ ├── _utilities.scss
│ │ │ ├── _variables.scss
│ │ │ ├── bootstrap-grid.scss
│ │ │ ├── bootstrap-reboot.scss
│ │ │ ├── bootstrap.scss
│ │ │ ├── mixins
│ │ │ │ ├── _alert.scss
│ │ │ │ ├── _background-variant.scss
│ │ │ │ ├── _badge.scss
│ │ │ │ ├── _border-radius.scss
│ │ │ │ ├── _box-shadow.scss
│ │ │ │ ├── _breakpoints.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _caret.scss
│ │ │ │ ├── _clearfix.scss
│ │ │ │ ├── _deprecate.scss
│ │ │ │ ├── _float.scss
│ │ │ │ ├── _forms.scss
│ │ │ │ ├── _gradients.scss
│ │ │ │ ├── _grid-framework.scss
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _hover.scss
│ │ │ │ ├── _image.scss
│ │ │ │ ├── _list-group.scss
│ │ │ │ ├── _lists.scss
│ │ │ │ ├── _nav-divider.scss
│ │ │ │ ├── _pagination.scss
│ │ │ │ ├── _reset-text.scss
│ │ │ │ ├── _resize.scss
│ │ │ │ ├── _screen-reader.scss
│ │ │ │ ├── _size.scss
│ │ │ │ ├── _table-row.scss
│ │ │ │ ├── _text-emphasis.scss
│ │ │ │ ├── _text-hide.scss
│ │ │ │ ├── _text-truncate.scss
│ │ │ │ ├── _transition.scss
│ │ │ │ └── _visibility.scss
│ │ │ ├── utilities
│ │ │ │ ├── _align.scss
│ │ │ │ ├── _background.scss
│ │ │ │ ├── _borders.scss
│ │ │ │ ├── _clearfix.scss
│ │ │ │ ├── _display.scss
│ │ │ │ ├── _embed.scss
│ │ │ │ ├── _flex.scss
│ │ │ │ ├── _float.scss
│ │ │ │ ├── _overflow.scss
│ │ │ │ ├── _position.scss
│ │ │ │ ├── _screenreaders.scss
│ │ │ │ ├── _shadows.scss
│ │ │ │ ├── _sizing.scss
│ │ │ │ ├── _spacing.scss
│ │ │ │ ├── _stretched-link.scss
│ │ │ │ ├── _text.scss
│ │ │ │ └── _visibility.scss
│ │ │ └── vendor
│ │ │ │ └── _rfs.scss
│ │ │ ├── custom
│ │ │ ├── _alerts.scss
│ │ │ ├── _buttons.scss
│ │ │ ├── _card.scss
│ │ │ ├── _checkboxes-radio.scss
│ │ │ ├── _dropdown.scss
│ │ │ ├── _example-pages.scss
│ │ │ ├── _fixed-plugin.scss
│ │ │ ├── _footer.scss
│ │ │ ├── _forms.scss
│ │ │ ├── _functions.scss
│ │ │ ├── _images.scss
│ │ │ ├── _input-group.scss
│ │ │ ├── _misc.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _modal.scss
│ │ │ ├── _navbar.scss
│ │ │ ├── _rtl.scss
│ │ │ ├── _sidebar-and-main-panel.scss
│ │ │ ├── _tables.scss
│ │ │ ├── _type.scss
│ │ │ ├── _utilities.scss
│ │ │ ├── _variables.scss
│ │ │ ├── _white-content.scss
│ │ │ ├── cards
│ │ │ │ ├── _card-chart.scss
│ │ │ │ ├── _card-map.scss
│ │ │ │ ├── _card-plain.scss
│ │ │ │ ├── _card-task.scss
│ │ │ │ └── _card-user.scss
│ │ │ ├── mixins
│ │ │ │ ├── _alert.scss
│ │ │ │ ├── _background-variant.scss
│ │ │ │ ├── _badges.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _dropdown.scss
│ │ │ │ ├── _forms.scss
│ │ │ │ ├── _icon.scss
│ │ │ │ ├── _inputs.scss
│ │ │ │ ├── _modals.scss
│ │ │ │ ├── _page-header.scss
│ │ │ │ ├── _popovers.scss
│ │ │ │ ├── _vendor-prefixes.scss
│ │ │ │ ├── _wizard.scss
│ │ │ │ └── opacity.scss
│ │ │ ├── utilities
│ │ │ │ ├── _backgrounds.scss
│ │ │ │ ├── _floating.scss
│ │ │ │ ├── _helper.scss
│ │ │ │ ├── _position.scss
│ │ │ │ ├── _shadows.scss
│ │ │ │ ├── _sizing.scss
│ │ │ │ ├── _spacing.scss
│ │ │ │ ├── _text.scss
│ │ │ │ └── _transform.scss
│ │ │ └── vendor
│ │ │ │ ├── _plugin-animate-bootstrap-notify.scss
│ │ │ │ └── _plugin-perfect-scrollbar.scss
│ │ │ └── plugins
│ │ │ └── _plugin-perfect-scrollbar.scss
│ └── templates
│ │ ├── base-site.html
│ │ ├── errors
│ │ ├── 403.html
│ │ ├── 404.html
│ │ ├── 500.html
│ │ └── blacklisted.html
│ │ ├── login
│ │ └── login.html
│ │ ├── pages
│ │ ├── commands.html
│ │ └── credits.html
│ │ └── site_template
│ │ ├── fixed-plugin.html
│ │ ├── footer.html
│ │ ├── navigation.html
│ │ ├── scripts-sidebar.html
│ │ ├── scripts.html
│ │ └── sidebar.html
│ ├── constants.py
│ ├── dashboard
│ ├── __init__.py
│ ├── routes.py
│ └── templates
│ │ ├── dashboard.html
│ │ ├── guild.html
│ │ ├── index.html
│ │ ├── page-403.html
│ │ ├── page-404.html
│ │ ├── page-500.html
│ │ └── third_party
│ │ └── spotify.html
│ ├── tasks.py
│ ├── translations
│ ├── af_ZA
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── ar_SA
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── bg_BG
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── ca_ES
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── cs_CZ
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── da_DK
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── de_DE
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── el_GR
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── es_ES
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── fi_FI
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── fr_FR
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── he_IL
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── hu_HU
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── id_ID
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── it_IT
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── ja_JP
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── ko_KR
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── nl_NL
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── no_NO
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── pl_PL
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── pt_BR
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── pt_PT
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── ro_RO
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── ru_RU
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── sk_SK
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── sr_SP
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── sv_SE
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── tr_TR
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── uk_UA
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── vi_VN
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── zh_CN
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ ├── zh_HK
│ │ └── LC_MESSAGES
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ └── zh_TW
│ │ └── LC_MESSAGES
│ │ ├── messages.mo
│ │ └── messages.po
│ └── utils.py
├── requirements.txt
├── setup.cfg
├── setup.py
└── tox.ini
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | patreon: NeuroAssassin
4 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Report an issue you have with the Dashboard
4 | title: ''
5 | labels: '2-type-bug/fix'
6 | assignees: ''
7 |
8 | ---
9 |
10 | ### What part of dashboard are you having an issue with?
11 |
12 | - [ ] Documentation
13 | - [ ] Dashboard webserver
14 | - [ ] Dashboard cog
15 |
16 | ### What happened?
17 |
18 |
19 | ### What did you expect to happen?
20 |
21 |
22 | ### What can we do to reproduce this?
23 |
24 |
25 | ### What is your bot/webserver running on?
26 | - **Operating system**:
27 | - **Python version**:
28 | - **Dashboard webserver version**:
29 | - **Dashboard cog version**:
30 |
31 | ### What are you having issues on?
32 | - **Operating system**:
33 | - **Browser**:
34 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: true
2 | contact_links:
3 | - name: Support question
4 | url: https://discord.gg/vQZTdB9
5 | about: For any questions regarding on how to operate and run Red-Dashboard.
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: '2-type-feature'
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ### Type
2 |
3 | - [ ] Bugfix
4 | - [ ] Enhancement
5 | - [ ] New feature
6 |
7 | ### Description of the changes
8 |
--------------------------------------------------------------------------------
/.github/workflows/lint_python.yaml:
--------------------------------------------------------------------------------
1 | name: Lint Python
2 | on:
3 | pull_request:
4 | push:
5 | repository_dispatch:
6 | types:
7 | - dispatched_test
8 |
9 | env:
10 | ref: ${{ github.event.client_payload.ref || '' }}
11 |
12 | jobs:
13 | lint_python:
14 | name: Lint Python
15 | runs-on: ubuntu-latest
16 | steps:
17 | - uses: actions/checkout@v2
18 | with:
19 | ref: ${{ env.ref }}
20 | - uses: actions/setup-python@v2
21 | with:
22 | python_version: "3.8"
23 | - run: "python -m pip install git+https://github.com/pycqa/pyflakes@1911c20#egg=pyflakes git+https://github.com/pycqa/pycodestyle@d219c68#egg=pycodestyle git+https://gitlab.com/pycqa/flake8@3.7.9#egg=flake8"
24 | name: Install Flake8
25 | - run: "python -m flake8 . --count --select=E9,F7,F82 --show-source"
26 | name: Flake8 Linting
27 |
--------------------------------------------------------------------------------
/.github/workflows/publish_crowdin.yaml:
--------------------------------------------------------------------------------
1 | name: Publish to Crowdin
2 | on:
3 | workflow_dispatch:
4 | schedule:
5 | - cron: '0 12 * * WED'
6 | repository_dispatch:
7 | types: crowdin
8 |
9 | permissions:
10 | contents: write
11 | pull-requests: write
12 |
13 | env:
14 | CROWDIN_API_KEY: ${{ secrets.crowdin_token}}
15 | CROWDIN_PROJECT_ID: ${{ secrets.crowdin_identifier }}
16 |
17 | jobs:
18 | deploy:
19 | if: github.repository == 'Cog-Creators/Red-Dashboard'
20 | runs-on: ubuntu-latest
21 | steps:
22 | - uses: actions/checkout@v2
23 | - name: Set up Python
24 | uses: actions/setup-python@v2
25 | with:
26 | python-version: '3.8'
27 | - name: Install dependencies
28 | run: |
29 | curl https://artifacts.crowdin.com/repo/GPG-KEY-crowdin | sudo apt-key add -
30 | echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
31 | sudo apt-get update -qq
32 | sudo apt-get install -y crowdin
33 | pip install flask-babel
34 | - name: Generate source files
35 | run: |
36 | make gettext
37 | - name: Upload source files
38 | run: |
39 | make upload_translations
40 | - name: Download translations
41 | run: |
42 | make download_translations
43 | - name: Compile translations
44 | run: |
45 | make compile_translations
46 | - name: Commit compiled translations
47 | run: |
48 | git config user.name 'Github'
49 | git config user.email 'noreply@github.com'
50 | git add -f reddash/app/translations
51 | git commit -m "Automated Crowdin downstream"
52 | - name: Create Pull Request
53 | uses: peter-evans/create-pull-request@v3
54 | with:
55 | token: ${{ secrets.GITHUB_TOKEN }}
56 | commit-message: Automated Crowdin downstream
57 | title: "[i18n] Automated Crowdin downstream"
58 | body: |
59 | This is an automated PR.
60 | Please ensure that there are no errors or invalid files are in the PR.
61 | labels: "1-area-i18n, 2-type-other, 3-changelog-skipped, 4-automated-pr"
62 | branch: "automated/i18n"
63 | author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
64 |
--------------------------------------------------------------------------------
/.github/workflows/publish_pypi.yml:
--------------------------------------------------------------------------------
1 | name: Publish to PyPI
2 | on:
3 | push:
4 | tags:
5 | - "*"
6 |
7 | jobs:
8 | deploy:
9 | if: github.repository == 'Cog-Creators/Red-Dashboard'
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - name: Set up Python
14 | uses: actions/setup-python@v2
15 | with:
16 | python-version: '3.8'
17 | - name: Install dependencies
18 | run: |
19 | python -m pip install --upgrade pip
20 | pip install setuptools wheel twine
21 | - name: Build and publish
22 | env:
23 | TWINE_USERNAME: __token__
24 | TWINE_PASSWORD: ${{ secrets.pypi_token }}
25 | run: |
26 | python setup.py sdist bdist_wheel
27 | twine upload dist/*
--------------------------------------------------------------------------------
/.github/workflows/tests.yml:
--------------------------------------------------------------------------------
1 | name: Tests
2 | on:
3 | pull_request:
4 | push:
5 | repository_dispatch:
6 | types:
7 | - dispatched_test
8 |
9 | env:
10 | ref: ${{ github.event.client_payload.ref || '' }}
11 |
12 | jobs:
13 | tox:
14 | runs-on: ubuntu-latest
15 | strategy:
16 | matrix:
17 | python_version:
18 | - "3.8"
19 | tox_env:
20 | - py
21 | - style
22 | - docs
23 | include:
24 | - tox_env: py
25 | friendly_name: Tests
26 | - tox_env: style
27 | friendly_name: Style
28 | - tox_env: docs
29 | friendly_name: Docs
30 | fail-fast: false
31 | name: Tox - ${{ matrix.friendly_name }}
32 | steps:
33 | - uses: actions/checkout@v2
34 | with:
35 | ref: ${{ env.ref }}
36 | - name: Set up Python
37 | uses: actions/setup-python@v2
38 | with:
39 | python-version: ${{ matrix.python_version }}
40 | - name: Install tox
41 | run: |
42 | python -m pip install --upgrade pip
43 | pip install tox
44 | - name: Tox test
45 | env:
46 | TOXENV: ${{ matrix.tox_env }}
47 | run: tox
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/.readthedocs.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 |
3 | build:
4 | os: "ubuntu-22.04"
5 | tools:
6 | python: "3.8"
7 | jobs:
8 | install:
9 | - pip install .[docs]
10 |
11 | sphinx:
12 | configuration: docs/conf.py
13 |
14 | python:
15 | install:
16 | - method: pip
17 | path: .
18 | extra_requirements:
19 | - docs
20 |
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | graft reddash
2 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | PYTHON ?= python3.8
2 |
3 | # Python Code Style
4 | reformat:
5 | $(PYTHON) -m black -l 99 reddash
6 | stylecheck:
7 | $(PYTHON) -m black --check -l 99 reddash
8 | stylediff:
9 | $(PYTHON) -m black --check --diff -l 99 reddash
10 |
11 | # Development environment
12 | newenv:
13 | $(PYTHON) -m venv --clear .venv
14 | .venv/bin/pip install -U pip setuptools
15 |
16 | # Translations
17 | gettext:
18 | pybabel extract -F babel.cfg -o reddash/app/messages.pot .
19 | pybabel update -i reddash/app/messages.pot -d reddash/app/translations
20 | upload_translations:
21 | crowdin upload sources
22 | download_translations:
23 | crowdin download
24 | compile_translations:
25 | pybabel compile -d reddash/app/translations
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Red-Dashboard
2 |
3 | > [!CAUTION]
4 | > This project is **discontinued**, is no longer supported, and is known to be **completely non-functional**.
5 | > If you are searching for a dashboard, please search the [Index](https://index.discord.red/) for one in active development.
6 |
7 |
8 | Outdated README
9 |
10 |
11 | 
12 |
13 | *An easy-to-use interactive web dashboard to control your Redbot.*
14 |
15 | ## Overview
16 | The Red Discord Bot - Dashboard is an easy-to-use interactive web dashboard to control your Redbot, allowing for easier customization of settings and more interactive plugins to develop and get your bot ready for production. Using Discord Open Authentication, users will log into the dashboard using their Discord account, ensuring that all users are only allowed to customize and view settings that they are explicitly given permission to control, providing a safe and secure experience for all users.
17 |
18 | ## Installation
19 | To get started on setting up your Red Discord Bot - Dashboard for your Redbot, please follow the installation instructions that can be found [here](https://red-dashboard.readthedocs.io/en/latest/).
20 |
21 | The Red Discord Bot - Dashboard is supported on Windows, Mac OS X and Linux distributions, however is recommended on Linux distributions for security reasons. Support is not given for setting up your domain for your dashboard other than any guides given for such, and contributors to the source code are not responsible for any security issues that arise as a result of not securely setting up the software.
22 |
23 | ## Support
24 | If you wish to use this program and receive support for it, you must also give feedback and report any bugs you encounter. You can join my support server [here](https://discord.gg/vQZTdB9).
25 |
26 | ## Legal
27 | Red - Discord Bot Dashboard is released under [Affero General Public License v3](https://github.com/Cog-Creators/Red-Dashboard/blob/master/LICENSE).
28 |
29 | For details about how the Red - Discord Bot - Dashboard manages your privacy, please review the following documents. By using this program, you acknowledge that you have read these documents and consent to having your data used in the ways described in such documents.
30 | - [Cookie Policy](https://github.com/Cog-Creators/Red-Dashboard/blob/master/documents/Cookie%20Policy.md)
31 | - [Privacy Policy](https://github.com/Cog-Creators/Red-Dashboard/blob/master/documents/Privacy%20Policy.md)
32 | - [Third Party Disclaimer](https://github.com/Cog-Creators/Red-Dashboard/blob/master/documents/Third%20Party%20Disclaimer.md)
33 |
34 | ## Credits
35 | I would like to thank the following, for all the contributions they have made that helped this become what it is today.
36 | * Predeactor, laying the base of the documentation.
37 | * Cog Creators, for making such an amazing bot.
38 | * All the people who tested the dashboard, and gave feedback.
39 | * AppSeed, for creating a template that I use as the base for the Dashboard.
40 |
41 |
--------------------------------------------------------------------------------
/babel.cfg:
--------------------------------------------------------------------------------
1 | [python: **.py]
2 | [jinja2: **/templates/**.html]
3 | extensions=jinja2.ext.autoescape, jinja2.ext.with_
--------------------------------------------------------------------------------
/crowdin.yaml:
--------------------------------------------------------------------------------
1 | api_key_env: CROWDIN_API_KEY
2 | project_identifier_env: CROWDIN_PROJECT_ID
3 | base_path: ./reddash/app/
4 | preserve_hierarchy: true
5 | files:
6 | - source: messages.pot
7 | translation: translations/%locale%/LC_MESSAGES/messages.po
8 | translation_replace:
9 | "-": _
--------------------------------------------------------------------------------
/docs/.resources/copy_secret.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/docs/.resources/copy_secret.png
--------------------------------------------------------------------------------
/docs/.resources/launched_interface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/docs/.resources/launched_interface.png
--------------------------------------------------------------------------------
/docs/.resources/select_add_redirect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/docs/.resources/select_add_redirect.png
--------------------------------------------------------------------------------
/docs/.resources/select_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/docs/.resources/select_app.png
--------------------------------------------------------------------------------
/docs/.resources/select_oauth2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/docs/.resources/select_oauth2.png
--------------------------------------------------------------------------------
/docs/.resources/submit_redirect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/docs/.resources/submit_redirect.png
--------------------------------------------------------------------------------
/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line, and also
5 | # from the environment for the first two.
6 | SPHINXOPTS ?=
7 | SPHINXBUILD ?= sphinx-build
8 | SOURCEDIR = .
9 | BUILDDIR = _build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
21 |
--------------------------------------------------------------------------------
/docs/conf.py:
--------------------------------------------------------------------------------
1 | # Configuration file for the Sphinx documentation builder.
2 | #
3 | # This file only contains a selection of the most common options. For a full
4 | # list see the documentation:
5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html
6 |
7 | # -- Path setup --------------------------------------------------------------
8 |
9 | # If extensions (or modules to document with autodoc) are in another directory,
10 | # add these directories to sys.path here. If the directory is relative to the
11 | # documentation root, use os.path.abspath to make it absolute, like shown here.
12 | #
13 | # import os
14 | # import sys
15 | # sys.path.insert(0, os.path.abspath('.'))
16 |
17 |
18 | # -- Project information -----------------------------------------------------
19 |
20 | project = "Red Dashboard"
21 | copyright = "2020, Neuro Assassin"
22 | author = "Neuro Assassin"
23 |
24 | # The full version, including alpha/beta/rc tags
25 | release = "0.1.4a"
26 |
27 |
28 | # -- General configuration ---------------------------------------------------
29 |
30 | # Add any Sphinx extension module names here, as strings. They can be
31 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
32 | # ones.
33 | extensions = ["sphinx-prompt"]
34 |
35 | # Add any paths that contain templates here, relative to this directory.
36 | templates_path = ["_templates"]
37 |
38 | # List of patterns, relative to source directory, that match files and
39 | # directories to ignore when looking for source files.
40 | # This pattern also affects html_static_path and html_extra_path.
41 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
42 |
43 | # Role which is assigned when you make a simple reference within backticks
44 | default_role = "any"
45 |
46 | # The master toctree document
47 | master_doc = "index"
48 |
49 |
50 | # -- Options for HTML output -------------------------------------------------
51 |
52 | # The theme to use for HTML and HTML Help pages. See the documentation for
53 | # a list of builtin themes.
54 | #
55 | html_theme = "sphinx_rtd_theme"
56 |
57 | # Theme options are theme-specific and customize the look and feel of a theme
58 | # further. For a list of options available for each theme, see the
59 | # documentation.
60 | #
61 | # html_theme_options = {}
62 |
63 | html_context = {
64 | # Enable the "Edit in GitHub link within the header of each page.
65 | "display_github": True,
66 | "github_user": "Cog-Creators",
67 | "github_repo": "Red-Dashboard",
68 | "github_version": "master/docs/",
69 | }
70 |
71 | # Add any paths that contain custom static files (such as style sheets) here,
72 | # relative to this directory. They are copied after the builtin static files,
73 | # so a file named "default.css" will overwrite the builtin "default.css".
74 | html_static_path = []
75 |
--------------------------------------------------------------------------------
/docs/configuration_guides/index.rst:
--------------------------------------------------------------------------------
1 | .. _configuration-guides:
2 |
3 | Configuring Companion Cog
4 | =========================
5 |
6 | Due to advanced setups, the steps to set up Red Dashboard for two bots opposed to one are more complex. Consider your needs then pick the guide to follow:
7 |
8 | .. toctree::
9 | :maxdepth: 1
10 |
11 | singlebot
12 | multibot
--------------------------------------------------------------------------------
/docs/configuration_guides/installing_companion_cog.rst:
--------------------------------------------------------------------------------
1 | Installing Companion Cog
2 | ========================
3 |
4 | .. danger::
5 | This project is **discontinued**, is no longer supported, and is known to
6 | be **completely non-functional**. If you are searching for a dashboard,
7 | please search the `Index `_ for one in active
8 | development.
9 |
10 | ----
11 |
12 | .. attention::
13 |
14 | This webserver and it's accompanying cog is built for Red Discord Bot. It will not work with other bots. If you haven’t already, install Red `here `__.
15 |
16 | Welcome to the Dashboard Cog Installation Guide. While running the below directions, the following is assumed:
17 |
18 | 1. You have an active instance of Red Discord Bot, 3.3.9+ (you can check your version with ``[p]info``).
19 | 2. You are considered a "bot owner" on your Red instance, meaning you can run owner-only commands.
20 |
21 | Installing the cog from the repository
22 | --------------------------------------
23 |
24 | Installing the cog is extremely easy, and can be accomplished through Red's plugin, or cog system.
25 |
26 | 1. First, if you have not already, load the ``downloader`` cog on your bot:
27 |
28 | .. tip::
29 |
30 | ``[p]`` represents your bot's prefix. Make sure to replace it when pasting these commands inside of Discord.
31 |
32 | .. code-block:: none
33 |
34 | [p]load downloader
35 |
36 | 2. Next, add Neuro Assassin's cog repository to your bot:
37 |
38 | .. code-block:: none
39 |
40 | [p]repo add NeuroAssassin https://github.com/NeuroAssassin/Toxic-Cogs
41 |
42 | .. danger::
43 |
44 | The ``dashboard`` cog located `here `__ is the only official companion cog to the Red Dashboard software. Take precaution before installing cogs that you may not trust.
45 |
46 | 3. Next, install the ``dashboard`` cog from the repository:
47 |
48 | .. code-block:: none
49 |
50 | [p]cog install NeuroAssassin dashboard
51 |
52 | 4. Finally, load the ``dashboard`` cog:
53 |
54 | .. code-block:: none
55 |
56 | [p]load dashboard
57 |
58 | *You can now proceed to configuration the companion dashboard cog. Start* `here ` *to decide which guide to follow.*
59 |
--------------------------------------------------------------------------------
/docs/help_and_support.rst:
--------------------------------------------------------------------------------
1 | Help & Support
2 | ==============
3 |
4 | .. danger::
5 | This project is **discontinued**, is no longer supported, and is known to
6 | be **completely non-functional**. If you are searching for a dashboard,
7 | please search the `Index `_ for one in active
8 | development.
9 |
10 | Common Questions
11 | ----------------
12 |
13 | **Dashboard cog is loaded, and webserver is up, but it isn't showing my
14 | bot's info**
15 |
16 | - Did you start the bot with the RPC flag?
17 | - If you started the bot with the ``--rpc-port`` flag, did you provide
18 | the same port to ``reddash``\ command when starting the webserver? Vice versa?
19 | - Have you set the redirect and secret in the cog's settings?
20 | - Have you tried reloading the dashboard cog/restarting the webserver?
21 | - Have you tried updating the dashboard cog and dashboard itself?
22 |
23 | **My browser said the website take too much time to answer or a similar
24 | error**
25 |
26 | Your firewall is maybe not configured to accept the port Dashboard is
27 | listening for, if you are on Linux, run ``sudo ufw allow ``
28 | (Default is 42356). If you are on Windows, type ``Firewall`` in your
29 | search bar and add a new rule.
30 |
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. Red Dashboard documentation master file, created by
2 | sphinx-quickstart on Mon Jul 13 13:01:47 2020.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to Red Dashboard's documentation!
7 | =========================================
8 |
9 | .. danger::
10 | This project is **discontinued**, is no longer supported, and is known to
11 | be **completely non-functional**. If you are searching for a dashboard,
12 | please search the `Index `_ for one in active
13 | development.
14 |
15 | .. toctree::
16 | :maxdepth: 1
17 | :caption: Webserver installation
18 |
19 | installation_guides/mac_linux_installation
20 | installation_guides/windows_installation
21 | installation_guides/systemctl_startup
22 |
23 | .. toctree::
24 | :maxdepth: 1
25 | :caption: Cog installation
26 |
27 | configuration_guides/installing_companion_cog
28 | configuration_guides/index
29 |
30 | .. toctree::
31 | :maxdepth: 1
32 | :caption: Launching dashboard
33 |
34 | launching_guides/running_webserver_one_bot
35 | launching_guides/running_webserver_multi_bot
36 |
37 | .. toctree::
38 | :maxdepth: 1
39 | :caption: Reverse proxy
40 |
41 | reverse_proxy_apache
42 | reverse_proxy_nginx
43 |
44 | .. toctree::
45 | :maxdepth: 1
46 | :caption: Support
47 |
48 | help_and_support
--------------------------------------------------------------------------------
/docs/installation_guides/systemctl_startup.rst:
--------------------------------------------------------------------------------
1 | Automatic Startup (systemctl)
2 | =============================
3 |
4 | .. warning::
5 |
6 | This guide is for **Linux only.** There's is no auto-restart system for Windows or Mac at the moment.
7 |
8 | .. warning::
9 |
10 | If you plan to run this with multiple bots, you will need to add the flags you normally add to the ExecStart line. Additionally, if you have multiple systemctl files for the dashboard, you will need to rename them.
11 |
12 |
13 | Creating the service file
14 | -------------------------
15 |
16 | In order to create the service file, you will first need to know two
17 | things, your Linux ``username`` and your Python ``path``.
18 |
19 | First, your Linux ``username`` can be fetched with the following
20 | command:
21 |
22 | .. code-block:: none
23 |
24 | whoami
25 |
26 | Next, your python ``path`` can be fetched with the following commands:
27 |
28 | .. code-block:: none
29 |
30 | # If reddash is installed in a venv
31 | source ~/redashenv/bin/activate
32 | which python
33 |
34 | # If reddash is installed in a pyenv virtualenv
35 | pyenv shell
36 | pyenv which python
37 |
38 | Then create the new service file:
39 |
40 | ``sudo -e /etc/systemd/system/redash.service``
41 |
42 | Replace ``path`` with your python path and ``username`` with your Linux username.
43 |
44 | .. code-block:: none
45 |
46 | [Unit]
47 | Description=Red Dashboard
48 | After=multi-user.target
49 | After=network-online.target
50 | Wants=network-online.target
51 |
52 | [Service]
53 | ExecStart=path -O -m reddash
54 | User=username
55 | Group=username
56 | Type=idle
57 | Restart=always
58 | RestartSec=15
59 | RestartPreventExitStatus=0
60 | TimeoutStopSec=10
61 |
62 | [Install]
63 | WantedBy=multi-user.target
64 |
65 | Save your file and exit: ``ctrl + O; enter; ctrl + x``
66 |
67 | Now you can start dashboard by using:
68 |
69 | .. code-block:: none
70 |
71 | # Start Dashboard
72 | sudo systemctl start redash
73 |
74 | # Stop Dashboard
75 | sudo systemctl stop redash
76 |
77 | Automatic startup on system bootup
78 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79 |
80 | To automatically start dashboard at system's bootup, use the following
81 | command:
82 |
83 | .. code-block:: none
84 |
85 | # Enable automatic startup
86 | sudo systemctl enable redash
87 |
88 | # Disable automatic startup
89 | sudo systemctl disable redash
90 |
91 | Check logs
92 | ~~~~~~~~~~
93 |
94 | To check Dashboard's logs, use:
95 |
96 | .. code-block:: none
97 |
98 | sudo journalctl -eu redash
99 |
100 | .. tip::
101 |
102 | You can use the ``--following`` flag to see live logs, to check if there's any trouble while using the dashboard.
--------------------------------------------------------------------------------
/docs/installation_guides/windows_installation.rst:
--------------------------------------------------------------------------------
1 | Windows Installation
2 | ====================
3 |
4 | .. danger::
5 | This project is **discontinued**, is no longer supported, and is known to
6 | be **completely non-functional**. If you are searching for a dashboard,
7 | please search the `Index `_ for one in active
8 | development.
9 |
10 | ----
11 |
12 | .. attention::
13 |
14 | This webserver and it's accompanying cog is built for Red Discord Bot. It will not work with other bots. If you haven’t already, install Red `here `__.
15 |
16 | .. warning::
17 |
18 | For safety reasons, no commands in this guide should be run in a Command Prompt or Powershell session with Administrator privileges. No installation commands require access to protected folders.
19 |
20 | Welcome to the Windows Installation Guide for the Red Discord Bot
21 | Dashboard Webserver. While running the below directions, the following
22 | is assumed:
23 |
24 | - You are on a Windows distribution
25 | - You have all pre-requisites of Red Discord Bot installed
26 | - You have an instance of Red Discord Bot, set up and initialized
27 |
28 | Installing the pre-requirements
29 | -------------------------------
30 |
31 | This guide recommends using the same requisites that Red - Discord Bot uses. To ensure that you have the proper software already installed, consult the installation guide for your operating system `here `__.
32 |
33 | Creating a virtual environment
34 | ------------------------------
35 |
36 | Just like for Red - Discord Bot, Red Dashboard requires it’s own, separate virtual environment to isolate dependencies. Red Dashboard also requires a Python version minimum of 3.8.1, and it is recommended to use the same Python version as you use for Red - Discord Bot.
37 |
38 | First, create a virtual environment using whatever Python version you use for red. For example, if Python 3.8 was installed and being used for Red:
39 |
40 | .. prompt:: batch
41 |
42 | py -3.8 -m venv "%userprofile%\reddashenv"
43 |
44 | Next, enter your virtual environment with this command:
45 |
46 | .. prompt:: batch
47 |
48 | "%userprofile%\reddashenv\Scripts\activate.bat"
49 |
50 | .. important::
51 |
52 | You must activate the virtual environment with the above command every time you open a new shell to run, install or update Red Dashboard.
53 |
54 | Installing Red Dashboard
55 | ------------------------
56 |
57 | First, make sure you are in your virtual environment that you set up earlier by running the activation command mentioned above.
58 |
59 | Once you are inside your virtual environment, update setup packages then install:
60 |
61 | .. prompt:: batch
62 | :prompts: (reddashenv) C:\\>
63 |
64 | python -m pip install -U pip setuptools wheel
65 | python -m pip install -U Red-Dashboard
66 |
67 | *You can continue to* `Installing Companion Cog <../configuration_guides/installing_companion_cog>`.
68 |
--------------------------------------------------------------------------------
/docs/launching_guides/running_webserver_multi_bot.rst:
--------------------------------------------------------------------------------
1 | Running the Webserver with multiple bots
2 | ========================================
3 |
4 | .. important::
5 |
6 | In order for the bot to communicate with the webserver, you must add the argument ``--rpc`` to the start line of each of your Red bots. Additionally,
7 | you must add ``--rpc-port `` to the start line for each of your bots, dependent on the webserver you are connecting to.
8 |
9 | At this point, the dashboard cog should be loaded and initialized on your Red bot, and restarted to have RPC enabled (as mentioned above).
10 | The webserver package should be installed into it's own, separate virtual environment, and your OAuth2 settings should be updated within Discord.
11 |
12 | Once you are squared away, activate your virtual environment using the command during installation, then for each of your webservers, run the following command,
13 | replacing ```` and ```` with the ports you came up with `here <../configuration_guides/multibot>`:
14 |
15 | .. prompt:: bash
16 |
17 | reddash --port --rpc-port
18 |
19 | A text interface should pop up, similar to that below (note that your ports will be different):
20 |
21 | .. image:: ../.resources/launched_interface.png
22 |
23 | If your screen looks like the above, congrats! Your dashboard should be successfully connected to your Red bot, and viewable at the domain/IP address
24 | specified in `Configuration Companion Cog - Multi Bot <../configuration_guides/multibot>`. If you wish for the webserver to run with Automatic Startup, check out
25 | the `Automatic Startup (systemctl) <../installation_guides/systemctl_startup>` guide if you are on Linux.
26 |
27 | Does your bot say RPC Disconnected or some other error? Check to make sure that your bot started with the ``--rpc`` flag and are using the same RPC ports. If
28 | you have any other issues, feel free to drop by the support server listed `here <../help_and_support>`.
--------------------------------------------------------------------------------
/docs/launching_guides/running_webserver_one_bot.rst:
--------------------------------------------------------------------------------
1 | Running the Webserver
2 | =====================
3 |
4 | .. important::
5 |
6 | In order for the bot to communicate with the webserver, you must add the argument ``--rpc`` to the start line of your Red bot.
7 |
8 | At this point, the dashboard cog should be loaded and initialized on your Red bot, and restarted to have RPC enabled (as mentioned above).
9 | The webserver package should be installed into it's own, separate virtual environment, and your OAuth2 settings should be updated within Discord.
10 |
11 | Once you are squared away, activate your virtual environment using the command during installation, then run:
12 |
13 | .. prompt:: bash
14 |
15 | reddash
16 |
17 | A text interface should pop up, similar to that below:
18 |
19 | .. image:: ../.resources/launched_interface.png
20 |
21 | If your screen looks like the above, congrats! Your dashboard should be successfully connected to your Red bot, and viewable at the domain/IP address
22 | specified in `Configuration Companion Cog - Single Bot <../configuration_guides/singlebot>`. If you wish for the webserver to run with Automatic Startup, check out
23 | the `Automatic Startup (systemctl) <../installation_guides/systemctl_startup>` guide if you are on Linux.
24 |
25 | Does your bot say RPC Disconnected or some other error? Check to make sure that your bot started with the ``--rpc`` flag and are using the same RPC port (6133). If
26 | you have any other issues, feel free to drop by the support server listed `here <../help_and_support>`.
--------------------------------------------------------------------------------
/docs/make.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | pushd %~dp0
4 |
5 | REM Command file for Sphinx documentation
6 |
7 | if "%SPHINXBUILD%" == "" (
8 | set SPHINXBUILD=python -msphinx
9 | )
10 | set SOURCEDIR=.
11 | set BUILDDIR=_build
12 | set SPHINXPROJ=Red-Dashboard
13 |
14 | if "%1" == "" goto help
15 |
16 | %SPHINXBUILD% >NUL 2>NUL
17 | if errorlevel 9009 (
18 | echo.
19 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
20 | echo.installed, then set the SPHINXBUILD environment variable to point
21 | echo.to the full path of the 'sphinx-build' executable. Alternatively you
22 | echo.may add the Sphinx directory to PATH.
23 | echo.
24 | echo.If you don't have Sphinx installed, grab it from
25 | echo.http://sphinx-doc.org/
26 | exit /b 1
27 | )
28 |
29 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
30 | goto end
31 |
32 | :help
33 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
34 |
35 | :end
36 | popd
37 |
--------------------------------------------------------------------------------
/docs/reverse_proxy_apache.rst:
--------------------------------------------------------------------------------
1 | Reverse proxying with Apache on Linux
2 | =====================================
3 |
4 | Welcome to the Apache reverse proxy guide. Note that this guide is meant
5 | only for Linux users, and that currently there are no options for Windows
6 | or Mac. These commands will not work on those OSs, so do not follow this
7 | if you are not on a Linux distribution.
8 |
9 | Installing Apache
10 | -----------------
11 |
12 | 1. Start off by updating your package index
13 |
14 | .. code-block:: none
15 |
16 | sudo apt update
17 |
18 | 2. Next, install the apache2 package
19 |
20 | .. code-block:: none
21 |
22 | sudo apt install apache2
23 |
24 | At this point, if you navigate to your device's IP address, you should see an Apache welcome page.
25 |
26 | Set up reverse proxy
27 | --------------------
28 |
29 | You probably don't want people visiting your domain to see that static Apache welcome page.
30 | Now we need to configure apache to reverse proxy port 42356, or whichever port
31 | your webserver is running on.
32 |
33 | 1. Create a host configuration file for your domain:
34 |
35 | .. code-block:: none
36 |
37 | sudo nano /etc/apache2/sites-available/redash.conf
38 |
39 | 2. Paste the following into the file, replacing ``your.domain.com`` with the domain you will
40 | be running the dashboard on. Note that if you are running the webserver on a port other than
41 | port 42356, you will need to replace ``42356`` below with the the specified port.
42 |
43 | .. code-block:: none
44 |
45 |
46 | ServerName your.domain.com
47 | ProxyPreserveHost On
48 | ProxyPass / http://0.0.0.0:42356/
49 | ProxyPassReverse / http://0.0.0.0:42356/
50 |
51 |
52 | 3. Enable the Apache modifications needed to reverse proxy
53 |
54 | .. code-block:: none
55 |
56 | sudo a2enmod proxy
57 | sudo a2enmod proxy_http
58 |
59 | 4. Enable the new host configuration file and disable the default
60 |
61 | .. code-block:: none
62 |
63 | sudo a2ensite redash.conf
64 | sudo a2dissite 000-default.conf
65 |
66 | 5. Finally, restart apache for the changes to take effect
67 |
68 | .. code-block:: none
69 |
70 | sudo systemctl restart apache2
71 |
72 | Now, if you navigate to your device's IP, you should be able to see the dashboard (if the
73 | webserver is running).
--------------------------------------------------------------------------------
/docs/reverse_proxy_nginx.rst:
--------------------------------------------------------------------------------
1 | Reverse proxying with Nginx on Linux
2 | ====================================
3 |
4 | Welcome to the Nginx reverse proxy guide. Note that this guide is meant
5 | only for Linux users, and that currently there are no options for Windows
6 | or Mac. These commands will not work on those OSs, so do not follow this
7 | if you are not on a Linux distribution.
8 |
9 | Installing Nginx
10 | ----------------
11 |
12 | 1. Start off by updating your package index
13 |
14 | .. code-block:: none
15 |
16 | sudo apt update
17 |
18 | 2. Next, install the nginx package
19 |
20 | .. code-block:: none
21 |
22 | sudo apt install nginx
23 |
24 | At this point, if you navigate to your device's IP address, you should see an Nginx welcome page.
25 |
26 | Set up reverse proxy
27 | --------------------
28 |
29 | You probably don't want people visiting your domain to see that static Nginx welcome page.
30 | Now we need to configure Nginx to reverse proxy port 42356, or whichever port
31 | your webserver is running on.
32 |
33 | 1. Delete the default Nginx site
34 |
35 | .. code-block:: none
36 |
37 | sudo rm /etc/nginx/sites-enabled/default
38 |
39 |
40 | 2. Create a host configuration file for your domain:
41 |
42 | .. code-block:: none
43 |
44 | sudo nano /etc/nginx/sites-available/redash
45 |
46 | 3. Paste the following into the file, replacing ``your.domain.com`` with the domain you will
47 | be running the dashboard on. Note that if you are running the webserver on a port other than
48 | port 42356, you will need to replace ``42356`` below with the the specified port.
49 |
50 | .. code-block:: none
51 |
52 | server {
53 | listen 80;
54 | server_name your.domain.com;
55 |
56 | location / {
57 | proxy_pass http://0.0.0.0:42356;
58 | }
59 | }
60 |
61 | 4. Enable the file by creating a link from it to the sites-enabled directory
62 |
63 | .. code-block:: none
64 |
65 | sudo ln -s /etc/nginx/sites-available/redash /etc/nginx/sites-enabled/
66 |
67 | 5. Finally, restart Nginx for the changes to take effect
68 |
69 | .. code-block:: none
70 |
71 | sudo systemctl restart nginx
72 |
73 | Now, if you navigate to your device's IP, you should be able to see the dashboard (if the
74 | webserver is running).
--------------------------------------------------------------------------------
/documents/Cookie Policy.md:
--------------------------------------------------------------------------------
1 | # Cookie Policy
2 |
3 | ## Introduction
4 | The Red Discord Bot - Dashboard website uses cookies for many reasons, as outlined below. This document will expand on Sections 1 and 2 outlined in the [Privacy Policy](https://github.com/Cog-Creators/Red-Dashboard/blob/legal-documents/legal/Privacy%20Policy.md). "Creators," "we" or "us" refers to Repository Owners of the source code or any user that has contributed to the Red Discord Bot - Dashboard code. "You" refers to the person reading this Cookie Policy or accessing this website. "Owner" or "bot owner" refers to any person(s) who has access to the website/service files or to the Red Discord Bot program/service files.
5 |
6 | This Cookie Policy applies to you whenever you access this Red - Discord Bot Dashboard website/service or any other Red - Discord Bot Dashboard website/services. This Cookie Policy will detail to you:
7 |
8 | - What kinds of data we store in cookies.
9 | - Why we store this data in cookies.
10 | - How you can remove these cookies.
11 |
12 | If you wish for this website to not store your data in cookies, then you may not use this website/service.
13 |
14 | This Cookie Policy applies to any unmodified distribution of the source code found here (https://github.com/Cog-Creators/Red-Dashboard). If this instance of Red Discord Bot - Dashboard is modified in any way from the code found in the above link, then this Cookie Policy does not apply, and instead "creators," "we" or "us" refers to the same person(s) as "owner" or "bot owner" does.
15 |
16 | ## 1. What kinds of data do we store in cookies
17 |
18 | We store data in cookies for different categories, as outlined below:
19 |
20 | ### Authorization
21 | If you're signed into the Red Discord Bot - Dashboard website, then we hold authorization data (as detailed in Section 1 of the Privacy Policy) so that we can show you the correct information.
22 |
23 | ### Security
24 | If you're signed into the Red Discord Bot - Dashboard website, then we use the authorization data (as detailed in Section 1 of the Privacy Policy) to make sure you cannot access features that you do not have permission to access. This is to improve the experience of you and other users.
25 |
26 | ### User experience
27 | If you are using the Red Discord Bot - Dashboard website, then we use data such as your preferred language locale and theme to better your user experience.
28 |
29 | ## 2. Why we store this data in cookies
30 |
31 | We don't believe in storing data backend that doesn't have to be, where we could instead store it in a place that the user can control. As a result, we do not store any data on the host machine, and instead store it client side so you can directly control it.
32 |
33 | ## 3. How you can remove these cookies
34 |
35 | You may not like your data being stored in cookies. We fully understand this. In order to remove this data from your browser so we can no longer store the current data, you may go to your browser settings and Clear All Cookies/LocalStorage data. This will reset your data and will forget everything we know about you. Additionally, due to security reasons, your authorization data will be invalidated everytime the website/service restarts.
36 |
37 | ## 4. Changes to Cookie Policy
38 | It is possible that this Cookie Policy may be updated as situations change and to satisfy legal requirements. If this happens at any time, we will attempt to notify owners through a third-party app, Discord, 30 days before such changes to privacy policies are put into effect, so that the owner may communicate to users the changes that the Cookie Policy will be experiencing.
--------------------------------------------------------------------------------
/make.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 |
3 | if [%1] == [] goto help
4 |
5 | REM This allows us to expand variables at execution
6 | setlocal ENABLEDELAYEDEXPANSION
7 |
8 | goto %1
9 |
10 | :reformat
11 | black -l 99 reddash
12 | exit /B %ERRORLEVEL%
13 |
14 | :stylecheck
15 | black --check -l 99 reddash
16 | exit /B %ERRORLEVEL%
17 |
18 | :stylediff
19 | black --check --diff -l 99 reddash
20 | exit /B %ERRORLEVEL%
21 |
22 | :newenv
23 | py -3.8 -m venv --clear .venv
24 | .\.venv\Scripts\python -m pip install -U pip setuptools
25 | exit /B %ERRORLEVEL%
26 |
27 | :help
28 | echo Usage:
29 | echo make ^
30 | echo.
31 | echo Commands:
32 | echo reformat Reformat all .py files being tracked by git.
33 | echo stylecheck Check which tracked .py files need reformatting.
34 | echo newenv Create or replace this project's virtual environment.
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.black]
2 | exclude = '''
3 | /(
4 | \.eggs
5 | | \.git
6 | | \.hg
7 | | \.mypy_cache
8 | | \.tox
9 | | \.venv
10 | | _build
11 | | buck-out
12 | | build
13 | | dist
14 | )/
15 | '''
16 | include = '\.py$'
17 | line-length = 99
18 | target-version = ['py38']
19 |
20 | [tool.isort]
21 | combine_as_imports = true
22 | line-length = 99
23 | profile = "black"
24 |
--------------------------------------------------------------------------------
/reddash/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 [AppSeed App Generator](https://appseed.us)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/reddash/__init__.py:
--------------------------------------------------------------------------------
1 | __version__ = "0.1.8a.dev"
2 | __author__ = "Neuro Assassin#4779"
3 |
--------------------------------------------------------------------------------
/reddash/__main__.py:
--------------------------------------------------------------------------------
1 | # -*- encoding: utf-8 -*-
2 | """
3 | License: Commercial
4 | Copyright (c) 2019 - present AppSeed.us
5 | """
6 |
7 | from reddash.app import create_app
8 | import argparse
9 | import logging
10 | from rich.console import Console
11 | from rich.logging import RichHandler
12 | import os
13 | import sys
14 |
15 | if sys.stdin.isatty():
16 | os.system("cls" if os.name == "nt" else "clear")
17 |
18 | os.environ["WERKZEUG_RUN_MAIN"] = "true"
19 |
20 | console = Console()
21 |
22 | logging.basicConfig(format="%(message)s", handlers=[RichHandler()])
23 |
24 | log = logging.getLogger("werkzeug")
25 | log.setLevel(logging.ERROR)
26 |
27 | dashlog = logging.getLogger("reddash")
28 | dashlog.setLevel(logging.WARNING)
29 |
30 | parser = argparse.ArgumentParser(
31 | description="Argument parser for Red Discord Bot Dashboard - Client"
32 | )
33 | parser.add_argument("--host", dest="host", type=str, default="0.0.0.0")
34 | parser.add_argument("--port", dest="port", type=int, default=42356)
35 | parser.add_argument("--rpc-port", dest="rpcport", type=int, default=6133)
36 | parser.add_argument("--interval", dest="interval", type=int, default=5, help=argparse.SUPPRESS)
37 | parser.add_argument("--debug", dest="debug", action="store_true")
38 | parser.add_argument("--development", dest="dev", action="store_true", help=argparse.SUPPRESS)
39 |
40 |
41 | def main():
42 | args = vars(parser.parse_args())
43 |
44 | if args["interval"] != 5:
45 | console.print(
46 | "Detected interval argument. Please note that this argument should only be used if you are explicitly told to use it.",
47 | style="bold red",
48 | )
49 |
50 | if args["dev"]:
51 | console.print(
52 | "Detected development status. Please note that this argument is only for testing. Do NOT use if you are opening this up to other people, as it can cause security issues. Confirm that you wish to run the webserver in developmental status by typing 'I agree', case sensitive, below:\n",
53 | style="bold red",
54 | )
55 | confirm = input("> ")
56 | print("")
57 | if confirm == "I agree":
58 | console.print(
59 | "User has read the warnings and has typed I agree. Launching developmental server...",
60 | style="bold red",
61 | )
62 | else:
63 | console.print(
64 | 'User did not type "I agree". Launching production server...', style="bold red",
65 | )
66 | args["dev"] = False
67 |
68 | create_app(
69 | args["host"], args["port"], args["rpcport"], args["interval"], args["debug"], args["dev"],
70 | )
71 |
72 |
73 | if __name__ == "__main__":
74 | main()
75 |
--------------------------------------------------------------------------------
/reddash/app/api/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- encoding: utf-8 -*-
2 | """
3 | License: MIT
4 | Copyright (c) 2019 - present AppSeed.us
5 | """
6 |
7 | from flask import Blueprint
8 |
9 | blueprint = Blueprint("api_blueprint", __name__,)
10 |
--------------------------------------------------------------------------------
/reddash/app/base/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- encoding: utf-8 -*-
2 | """
3 | License: MIT
4 | Copyright (c) 2019 - present AppSeed.us
5 | """
6 |
7 | from flask import Blueprint
8 |
9 | blueprint = Blueprint(
10 | "base_blueprint", __name__, template_folder="templates", static_folder="static",
11 | )
12 |
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/fonts/nucleo.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/fonts/nucleo.eot
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/fonts/nucleo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/fonts/nucleo.ttf
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/fonts/nucleo.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/fonts/nucleo.woff
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/fonts/nucleo.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/fonts/nucleo.woff2
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/img/dnd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/img/dnd.png
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/img/idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/img/idle.png
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/img/offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/img/offline.png
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/img/online.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cog-Creators/Red-Dashboard/69771c5270230cafe2547a8ddaf0bf15cc725176/reddash/app/base/static/assets/img/online.png
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/scss/black-dashboard/_buttons.scss:
--------------------------------------------------------------------------------
1 | // mixins comune kit dash etc
2 |
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/scss/black-dashboard/_typography.scss:
--------------------------------------------------------------------------------
1 | // ce e comun intre kit-uri si dash-uri
2 |
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/scss/black-dashboard/bootstrap/_alert.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Base styles
3 | //
4 |
5 | .alert {
6 | position: relative;
7 | padding: $alert-padding-y $alert-padding-x;
8 | margin-bottom: $alert-margin-bottom;
9 | border: $alert-border-width solid transparent;
10 | @include border-radius($alert-border-radius);
11 | }
12 |
13 | // Headings for larger alerts
14 | .alert-heading {
15 | // Specified to prevent conflicts of changing $headings-color
16 | color: inherit;
17 | }
18 |
19 | // Provide class for links that match alerts
20 | .alert-link {
21 | font-weight: $alert-link-font-weight;
22 | }
23 |
24 |
25 | // Dismissible alerts
26 | //
27 | // Expand the right padding and account for the close button's positioning.
28 |
29 | .alert-dismissible {
30 | padding-right: $close-font-size + $alert-padding-x * 2;
31 |
32 | // Adjust close link position
33 | .close {
34 | position: absolute;
35 | top: 0;
36 | right: 0;
37 | padding: $alert-padding-y $alert-padding-x;
38 | color: inherit;
39 | }
40 | }
41 |
42 |
43 | // Alternate styles
44 | //
45 | // Generate contextual modifier classes for colorizing the alert.
46 |
47 | @each $color, $value in $theme-colors {
48 | .alert-#{$color} {
49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/scss/black-dashboard/bootstrap/_badge.scss:
--------------------------------------------------------------------------------
1 | // Base class
2 | //
3 | // Requires one of the contextual, color modifier classes for `color` and
4 | // `background-color`.
5 |
6 | .badge {
7 | display: inline-block;
8 | padding: $badge-padding-y $badge-padding-x;
9 | @include font-size($badge-font-size);
10 | font-weight: $badge-font-weight;
11 | line-height: 1;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | @include border-radius($badge-border-radius);
16 | @include transition($badge-transition);
17 |
18 | @at-root a#{&} {
19 | @include hover-focus {
20 | text-decoration: none;
21 | }
22 | }
23 |
24 | // Empty badges collapse automatically
25 | &:empty {
26 | display: none;
27 | }
28 | }
29 |
30 | // Quick fix for badges in buttons
31 | .btn .badge {
32 | position: relative;
33 | top: -1px;
34 | }
35 |
36 | // Pill badges
37 | //
38 | // Make them extra rounded with a modifier to replace v3's badges.
39 |
40 | .badge-pill {
41 | padding-right: $badge-pill-padding-x;
42 | padding-left: $badge-pill-padding-x;
43 | @include border-radius($badge-pill-border-radius);
44 | }
45 |
46 | // Colors
47 | //
48 | // Contextual variations (linked badges get darker on :hover).
49 |
50 | @each $color, $value in $theme-colors {
51 | .badge-#{$color} {
52 | @include badge-variant($value);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/reddash/app/base/static/assets/scss/black-dashboard/bootstrap/_breadcrumb.scss:
--------------------------------------------------------------------------------
1 | .breadcrumb {
2 | display: flex;
3 | flex-wrap: wrap;
4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x;
5 | margin-bottom: $breadcrumb-margin-bottom;
6 | list-style: none;
7 | background-color: $breadcrumb-bg;
8 | @include border-radius($breadcrumb-border-radius);
9 | }
10 |
11 | .breadcrumb-item {
12 | // The separator between breadcrumbs (by default, a forward-slash: "/")
13 | + .breadcrumb-item {
14 | padding-left: $breadcrumb-item-padding;
15 |
16 | &::before {
17 | display: inline-block; // Suppress underlining of the separator in modern browsers
18 | padding-right: $breadcrumb-item-padding;
19 | color: $breadcrumb-divider-color;
20 | content: $breadcrumb-divider;
21 | }
22 | }
23 |
24 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
25 | // without `