Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
github: ddc
ko_fi: ddcsta
ko_fi: ddc
custom: "https://www.paypal.com/ncp/payment/6G9Z78QHUD4RJ"
3 changes: 0 additions & 3 deletions .github/PULL_REQUEST_TEMPLATE
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
## Summary
<!-- Brief description of what this PR does and why -->

## Changes Made
<!-- List the key changes -->

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
run: uv python install ${{ env.LATEST_PYTHON_VERSION }}

- name: Install dependencies
run: uv sync --locked --all-extras --group dev
run: uv sync --locked --all-extras --all-groups

- name: Run tests with coverage
uses: nick-fields/retry@v3
Expand Down Expand Up @@ -68,7 +68,7 @@ jobs:
run: uv python install ${{ env.LATEST_PYTHON_VERSION }}

- name: Install dependencies
run: uv sync --locked --all-extras --group dev
run: uv sync --locked --all-extras --all-groups

- name: Run integration tests
uses: nick-fields/retry@v3
Expand Down
11 changes: 5 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,11 @@ celerybeat.pid
# Environments
.env
.env.prod
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
.env.dev
.venv*
env*/
venv*/
ENV*/

# Spyder project settings
.spyderproject
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
<a href="https://www.paypal.com/ncp/payment/6G9Z78QHUD4RJ"><img src="https://img.shields.io/badge/Donate-PayPal-brightgreen.svg?style=plastic&logo=paypal&logoColor=white" alt="Donate"/></a>
<br>
<a href="https://www.python.org/downloads"><img src="https://img.shields.io/badge/python-3.14-blue.svg?style=plastic&logo=python&logoColor=3776AB" alt="Python"/></a>
<a href="https://github.com/ddc/DiscordBot/releases/latest"><img src="https://img.shields.io/github/v/release/ddc/DiscordBot?style=plastic&logo=github&logoColor=white" alt="Release"/></a>
<a href="https://github.com/astral-sh/uv"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json&style=plastic" alt="uv"/></a>
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=plastic" alt="Ruff"/></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=plastic&logo=creativecommons&logoColor=FFFFFF" alt="License: MIT"/></a>
<a href="https://github.com/ddc/DiscordBot/releases/latest"><img src="https://img.shields.io/github/v/release/ddc/DiscordBot?style=plastic&logo=github&logoColor=white" alt="Release"/></a>
<br>
<a href="https://github.com/ddc/DiscordBot/issues"><img src="https://img.shields.io/github/issues/ddc/DiscordBot?style=plastic&logo=github&logoColor=white" alt="issues"/></a>
<a href="https://codecov.io/gh/ddc/DiscordBot"><img src="https://img.shields.io/codecov/c/github/ddc/DiscordBot?token=E942EZII4Q&style=plastic&logo=codecov" alt="codecov"/></a>
Expand Down Expand Up @@ -266,7 +266,7 @@ Requires [UV](https://docs.astral.sh/uv/getting-started/installation/) to be ins

## Setup
```shell
uv sync --all-extras --all-groups
uv lock --upgrade && uv sync --all-extras --all-groups
```

## Running Tests
Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "DiscordBot"
version = "3.0.9"
version = "3.0.10"
description = "A simple Discord bot with OpenAI support and server administration tools"
urls.Repository = "https://github.com/ddc/DiscordBot"
urls.Homepage = "https://ddc.github.io/DiscordBot"
Expand Down Expand Up @@ -36,7 +36,7 @@ dependencies = [
"ddcdatabases[postgres]>=4.0.1",
"discord-py>=2.7.1",
"gTTS>=2.5.4",
"openai>=2.29.0",
"openai>=2.30.0",
"PyNaCl>=1.6.2",
"pythonLogs>=7.0.0",
"uuid-utils>=0.14.1",
Expand All @@ -63,7 +63,7 @@ test-integration = "uv run pytest tests/integration"
hadolint.shell = "docker run --rm -i -v $(pwd)/.hadolint.yml:/.config/hadolint.yml:ro hadolint/hadolint < Dockerfile"
test-docker = "uv run pytest tests/docker"
tests.sequence = ["linter", "hadolint", "test-docker", "test", "test-integration"]
updatedev.sequence = ["linter", {shell = "uv lock --upgrade && uv sync --all-extras --group dev"}]
updatedev.sequence = ["linter", {shell = "uv lock --upgrade && uv sync --all-extras --all-groups"}]
migration = "uv run --frozen alembic upgrade head"

[tool.pytest.ini_options]
Expand Down
214 changes: 108 additions & 106 deletions src/bot/constants/messages.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from typing import Final

"""Bot message constants organized by domain."""


Expand Down Expand Up @@ -225,17 +227,17 @@ class Owner:
# ============================================================================

# Bot
BOT_TOKEN_NOT_FOUND = Bot.MISSING_ENV_VAR
BOT_TERMINATED = Bot.TERMINATED
BOT_STOPPED_CTRTC = Bot.STOPPED_CTRTC
BOT_FATAL_ERROR_MAIN = Bot.FATAL_ERROR_MAIN
BOT_CRASHED = Bot.CRASHED
BOT_CLOSING = Bot.CLOSING
BOT_LOGIN_FAILED = Bot.LOGIN_FAILED
BOT_INIT_PREFIX_FAILED = Bot.INIT_PREFIX_FAILED
BOT_LOAD_SETTINGS_FAILED = Bot.LOAD_SETTINGS_FAILED
BOT_LOAD_COGS_FAILED = Bot.LOAD_COGS_FAILED
BOT_LOADED_ALL_COGS_SUCCESS = Bot.LOADED_ALL_COGS_SUCCESS
BOT_TOKEN_NOT_FOUND: Final = Bot.MISSING_ENV_VAR
BOT_TERMINATED: Final = Bot.TERMINATED
BOT_STOPPED_CTRTC: Final = Bot.STOPPED_CTRTC
BOT_FATAL_ERROR_MAIN: Final = Bot.FATAL_ERROR_MAIN
BOT_CRASHED: Final = Bot.CRASHED
BOT_CLOSING: Final = Bot.CLOSING
BOT_LOGIN_FAILED: Final = Bot.LOGIN_FAILED
BOT_INIT_PREFIX_FAILED: Final = Bot.INIT_PREFIX_FAILED
BOT_LOAD_SETTINGS_FAILED: Final = Bot.LOAD_SETTINGS_FAILED
BOT_LOAD_COGS_FAILED: Final = Bot.LOAD_COGS_FAILED
BOT_LOADED_ALL_COGS_SUCCESS: Final = Bot.LOADED_ALL_COGS_SUCCESS
bot_online = Bot.online
bot_starting = Bot.starting
bot_disconnected = Bot.disconnected
Expand All @@ -245,129 +247,129 @@ class Owner:
bg_task_warning = Admin.bg_task_warning

# Config
CONFIG_JOIN = Config.JOIN
CONFIG_LEAVE = Config.LEAVE
CONFIG_SERVER = Config.SERVER
CONFIG_MEMBER = Config.MEMBER
CONFIG_BLOCK_INVIS_MEMBERS = Config.BLOCK_INVIS_MEMBERS
CONFIG_BOT_WORD_REACTIONS = Config.BOT_WORD_REACTIONS
CONFIG_PFILTER_CHANNELS = Config.PFILTER_CHANNELS
CONFIG_JOIN: Final = Config.JOIN
CONFIG_LEAVE: Final = Config.LEAVE
CONFIG_SERVER: Final = Config.SERVER
CONFIG_MEMBER: Final = Config.MEMBER
CONFIG_BLOCK_INVIS_MEMBERS: Final = Config.BLOCK_INVIS_MEMBERS
CONFIG_BOT_WORD_REACTIONS: Final = Config.BOT_WORD_REACTIONS
CONFIG_PFILTER_CHANNELS: Final = Config.PFILTER_CHANNELS
config_pfilter = Config.pfilter
CONFIG_CHANNEL_ID_INSTEAD_NAME = Config.CHANNEL_ID_INSTEAD_NAME
CONFIG_NOT_ACTIVATED_ERROR = Config.NOT_ACTIVATED_ERROR
MISING_REUIRED_ARGUMENT = Config.MISSING_REQUIRED_ARGUMENT
CHANNEL_ID_NOT_FOUND = Config.CHANNEL_ID_NOT_FOUND
BOT_MISSING_MANAGE_MESSAGES_PERMISSION = Config.BOT_MISSING_MANAGE_MESSAGES
NO_CHANNELS_LISTED = Config.NO_CHANNELS_LISTED
CONFIG_CHANNEL_ID_INSTEAD_NAME: Final = Config.CHANNEL_ID_INSTEAD_NAME
CONFIG_NOT_ACTIVATED_ERROR: Final = Config.NOT_ACTIVATED_ERROR
MISING_REUIRED_ARGUMENT: Final = Config.MISSING_REQUIRED_ARGUMENT
CHANNEL_ID_NOT_FOUND: Final = Config.CHANNEL_ID_NOT_FOUND
BOT_MISSING_MANAGE_MESSAGES_PERMISSION: Final = Config.BOT_MISSING_MANAGE_MESSAGES
NO_CHANNELS_LISTED: Final = Config.NO_CHANNELS_LISTED

# Custom Command
ALREADY_A_STANDARD_COMMAND = CustomCommand.ALREADY_A_STANDARD_COMMAND
COMMAND_LENGHT_ERROR = CustomCommand.LENGTH_ERROR
CUSTOM_COMMAND_ADDED = CustomCommand.ADDED
CUSTOM_COMMAND_EDITED = CustomCommand.EDITED
CUSTOM_COMMAND_REMOVED = CustomCommand.REMOVED
CUSTOM_COMMAND_ALL_REMOVED = CustomCommand.ALL_REMOVED
COMMAND_ALREADY_EXISTS = CustomCommand.ALREADY_EXISTS
NO_CUSTOM_COMMANDS_FOUND = CustomCommand.NO_COMMANDS_FOUND
CUSTOM_COMMAND_UNABLE_REMOVE = CustomCommand.UNABLE_REMOVE
CUSTOM_COMMANDS_SERVER = CustomCommand.COMMANDS_SERVER
GET_CONFIGS_ERROR = CustomCommand.GET_CONFIGS_ERROR
ALREADY_A_STANDARD_COMMAND: Final = CustomCommand.ALREADY_A_STANDARD_COMMAND
COMMAND_LENGHT_ERROR: Final = CustomCommand.LENGTH_ERROR
CUSTOM_COMMAND_ADDED: Final = CustomCommand.ADDED
CUSTOM_COMMAND_EDITED: Final = CustomCommand.EDITED
CUSTOM_COMMAND_REMOVED: Final = CustomCommand.REMOVED
CUSTOM_COMMAND_ALL_REMOVED: Final = CustomCommand.ALL_REMOVED
COMMAND_ALREADY_EXISTS: Final = CustomCommand.ALREADY_EXISTS
NO_CUSTOM_COMMANDS_FOUND: Final = CustomCommand.NO_COMMANDS_FOUND
CUSTOM_COMMAND_UNABLE_REMOVE: Final = CustomCommand.UNABLE_REMOVE
CUSTOM_COMMANDS_SERVER: Final = CustomCommand.COMMANDS_SERVER
GET_CONFIGS_ERROR: Final = CustomCommand.GET_CONFIGS_ERROR

# Command Error
MISSING_REQUIRED_ARGUMENT_HELP_MESSAGE = CommandError.MISSING_REQUIRED_ARGUMENT_HELP
COMMAND_NOT_FOUND = CommandError.NOT_FOUND
COMMAND_ERROR = CommandError.ERROR
COMMAND_RAISED_EXCEPTION = CommandError.RAISED_EXCEPTION
NOT_ADMIN_USE_COMMAND = CommandError.NOT_ADMIN
BOT_OWNERS_ONLY_COMMAND = CommandError.OWNERS_ONLY
PREFIXES_CHOICE = CommandError.PREFIXES_CHOICE
MORE_INFO = CommandError.MORE_INFO
UNKNOWN_OPTION = CommandError.UNKNOWN_OPTION
HELP_COMMAND_MORE_INFO = CommandError.HELP_MORE_INFO
NO_OPTION_FOUND = CommandError.NO_OPTION_FOUND
NO_PERMISSION_EXECUTE_COMMAND = CommandError.NO_PERMISSION
INVALID_MESSAGE = CommandError.INVALID_MESSAGE
COMMAND_INTERNAL_ERROR = CommandError.INTERNAL_ERROR
CONTACT_ADMIN = CommandError.CONTACT_ADMIN
DM_CANNOT_EXECUTE_COMMAND = CommandError.DM_CANNOT_EXECUTE
PRIVILEGE_LOW = CommandError.PRIVILEGE_LOW
DIRECT_MESSAGES_DISABLED = CommandError.DIRECT_MESSAGES_DISABLED
MISSING_REQUIRED_ARGUMENT_HELP_MESSAGE: Final = CommandError.MISSING_REQUIRED_ARGUMENT_HELP
COMMAND_NOT_FOUND: Final = CommandError.NOT_FOUND
COMMAND_ERROR: Final = CommandError.ERROR
COMMAND_RAISED_EXCEPTION: Final = CommandError.RAISED_EXCEPTION
NOT_ADMIN_USE_COMMAND: Final = CommandError.NOT_ADMIN
BOT_OWNERS_ONLY_COMMAND: Final = CommandError.OWNERS_ONLY
PREFIXES_CHOICE: Final = CommandError.PREFIXES_CHOICE
MORE_INFO: Final = CommandError.MORE_INFO
UNKNOWN_OPTION: Final = CommandError.UNKNOWN_OPTION
HELP_COMMAND_MORE_INFO: Final = CommandError.HELP_MORE_INFO
NO_OPTION_FOUND: Final = CommandError.NO_OPTION_FOUND
NO_PERMISSION_EXECUTE_COMMAND: Final = CommandError.NO_PERMISSION
INVALID_MESSAGE: Final = CommandError.INVALID_MESSAGE
COMMAND_INTERNAL_ERROR: Final = CommandError.INTERNAL_ERROR
CONTACT_ADMIN: Final = CommandError.CONTACT_ADMIN
DM_CANNOT_EXECUTE_COMMAND: Final = CommandError.DM_CANNOT_EXECUTE
PRIVILEGE_LOW: Final = CommandError.PRIVILEGE_LOW
DIRECT_MESSAGES_DISABLED: Final = CommandError.DIRECT_MESSAGES_DISABLED

# Guild Join
guild_join_bot_message = GuildJoin.bot_message

# Guild Update
NEW_SERVER_SETTINGS = GuildUpdate.NEW_SERVER_SETTINGS
NEW_SERVER_ICON = GuildUpdate.NEW_SERVER_ICON
NEW_SERVER_NAME = GuildUpdate.NEW_SERVER_NAME
PREVIOUS_NAME = GuildUpdate.PREVIOUS_NAME
PREVIOUS_SERVER_OWNER = GuildUpdate.PREVIOUS_SERVER_OWNER
NEW_SERVER_OWNER = GuildUpdate.NEW_SERVER_OWNER
NEW_SERVER_SETTINGS: Final = GuildUpdate.NEW_SERVER_SETTINGS
NEW_SERVER_ICON: Final = GuildUpdate.NEW_SERVER_ICON
NEW_SERVER_NAME: Final = GuildUpdate.NEW_SERVER_NAME
PREVIOUS_NAME: Final = GuildUpdate.PREVIOUS_NAME
PREVIOUS_SERVER_OWNER: Final = GuildUpdate.PREVIOUS_SERVER_OWNER
NEW_SERVER_OWNER: Final = GuildUpdate.NEW_SERVER_OWNER

# Member Join
JOINED_THE_SERVER = MemberJoin.JOINED_THE_SERVER
JOINED_THE_SERVER: Final = MemberJoin.JOINED_THE_SERVER

# Member Remove
LEFT_THE_SERVER = MemberRemove.LEFT_THE_SERVER
LEFT_THE_SERVER: Final = MemberRemove.LEFT_THE_SERVER

# Member Update
PROFILE_CHANGES = MemberUpdate.PROFILE_CHANGES
PREVIOUS_NICKNAME = MemberUpdate.PREVIOUS_NICKNAME
NEW_NICKNAME = MemberUpdate.NEW_NICKNAME
PREVIOUS_ROLES = MemberUpdate.PREVIOUS_ROLES
NEW_ROLES = MemberUpdate.NEW_ROLES
PROFILE_CHANGES: Final = MemberUpdate.PROFILE_CHANGES
PREVIOUS_NICKNAME: Final = MemberUpdate.PREVIOUS_NICKNAME
NEW_NICKNAME: Final = MemberUpdate.NEW_NICKNAME
PREVIOUS_ROLES: Final = MemberUpdate.PREVIOUS_ROLES
NEW_ROLES: Final = MemberUpdate.NEW_ROLES

# Messages
BOT_REACT_EMOJIS = Messages.BOT_REACT_EMOJIS
OWNER_DM_BOT_MESSAGE = Messages.OWNER_DM_BOT_MESSAGE
NO_DM_MESSAGES = Messages.NO_DM_MESSAGES
DM_COMMAND_NOT_ALLOWED = Messages.DM_COMMAND_NOT_ALLOWED
DM_COMMANDS_ALLOW_LIST = Messages.DM_COMMANDS_ALLOW_LIST
BOT_REACT_STUPID = Messages.BOT_REACT_STUPID
BOT_REACT_RETARD = Messages.BOT_REACT_RETARD
MESSAGE_CENSURED = Messages.MESSAGE_CENSURED
PRIVATE_BOT_MESSAGE = Messages.PRIVATE_BOT_MESSAGE
BOT_REACT_EMOJIS: Final = Messages.BOT_REACT_EMOJIS
OWNER_DM_BOT_MESSAGE: Final = Messages.OWNER_DM_BOT_MESSAGE
NO_DM_MESSAGES: Final = Messages.NO_DM_MESSAGES
DM_COMMAND_NOT_ALLOWED: Final = Messages.DM_COMMAND_NOT_ALLOWED
DM_COMMANDS_ALLOW_LIST: Final = Messages.DM_COMMANDS_ALLOW_LIST
BOT_REACT_STUPID: Final = Messages.BOT_REACT_STUPID
BOT_REACT_RETARD: Final = Messages.BOT_REACT_RETARD
MESSAGE_CENSURED: Final = Messages.MESSAGE_CENSURED
PRIVATE_BOT_MESSAGE: Final = Messages.PRIVATE_BOT_MESSAGE
blocked_invis_message = Messages.blocked_invis

# User Update
NEW_AVATAR = UserUpdate.NEW_AVATAR
NEW_NAME = UserUpdate.NEW_NAME
PREVIOUS_DISCRIMINATOR = UserUpdate.PREVIOUS_DISCRIMINATOR
NEW_DISCRIMINATOR = UserUpdate.NEW_DISCRIMINATOR
NEW_AVATAR: Final = UserUpdate.NEW_AVATAR
NEW_NAME: Final = UserUpdate.NEW_NAME
PREVIOUS_DISCRIMINATOR: Final = UserUpdate.PREVIOUS_DISCRIMINATOR
NEW_DISCRIMINATOR: Final = UserUpdate.NEW_DISCRIMINATOR

# Bot Utils
LOADING_EXTENSIONS = BotUtils.LOADING_EXTENSIONS
LOADING_EXTENSION_FAILED = BotUtils.LOADING_EXTENSION_FAILED
DISABLED_DM = BotUtils.DISABLED_DM
MESSAGE_REMOVED_FOR_PRIVACY = BotUtils.MESSAGE_REMOVED_FOR_PRIVACY
DELETE_MESSAGE_NO_PERMISSION = BotUtils.DELETE_MESSAGE_NO_PERMISSION
SEND_MESSAGE_FAILED = BotUtils.SEND_MESSAGE_FAILED
LOADING_EXTENSIONS: Final = BotUtils.LOADING_EXTENSIONS
LOADING_EXTENSION_FAILED: Final = BotUtils.LOADING_EXTENSION_FAILED
DISABLED_DM: Final = BotUtils.DISABLED_DM
MESSAGE_REMOVED_FOR_PRIVACY: Final = BotUtils.MESSAGE_REMOVED_FOR_PRIVACY
DELETE_MESSAGE_NO_PERMISSION: Final = BotUtils.DELETE_MESSAGE_NO_PERMISSION
SEND_MESSAGE_FAILED: Final = BotUtils.SEND_MESSAGE_FAILED

# Dice Rolls
DICE_SIZE_NOT_VALID = DiceRolls.SIZE_NOT_VALID
MEMBER_HIGHEST_ROLL_ANOUNCE = DiceRolls.MEMBER_HIGHEST_ROLL_ANNOUNCE
SERVER_HIGHEST_ROLL_ANOUNCE = DiceRolls.SERVER_HIGHEST_ROLL_ANNOUNCE
MEMBER_SERVER_WINNER_ANOUNCE = DiceRolls.MEMBER_SERVER_WINNER_ANNOUNCE
MEMBER_HIGHEST_ROLL = DiceRolls.MEMBER_HIGHEST_ROLL
MEMBER_HAS_HIGHEST_ROLL = DiceRolls.MEMBER_HAS_HIGHEST_ROLL
DICE_SIZE_HIGHER_ONE = DiceRolls.SIZE_HIGHER_ONE
RESET_ALL_ROLLS = DiceRolls.RESET_ALL
DELETED_ALL_ROLLS = DiceRolls.DELETED_ALL
DICE_SIZE_NOT_VALID: Final = DiceRolls.SIZE_NOT_VALID
MEMBER_HIGHEST_ROLL_ANOUNCE: Final = DiceRolls.MEMBER_HIGHEST_ROLL_ANNOUNCE
SERVER_HIGHEST_ROLL_ANOUNCE: Final = DiceRolls.SERVER_HIGHEST_ROLL_ANNOUNCE
MEMBER_SERVER_WINNER_ANOUNCE: Final = DiceRolls.MEMBER_SERVER_WINNER_ANNOUNCE
MEMBER_HIGHEST_ROLL: Final = DiceRolls.MEMBER_HIGHEST_ROLL
MEMBER_HAS_HIGHEST_ROLL: Final = DiceRolls.MEMBER_HAS_HIGHEST_ROLL
DICE_SIZE_HIGHER_ONE: Final = DiceRolls.SIZE_HIGHER_ONE
RESET_ALL_ROLLS: Final = DiceRolls.RESET_ALL
DELETED_ALL_ROLLS: Final = DiceRolls.DELETED_ALL
no_dice_size_rolls = DiceRolls.no_size_rolls

# Misc
PEPE_DOWNLOAD_ERROR = Misc.PEPE_DOWNLOAD_ERROR
INVITE_TITLE = Misc.INVITE_TITLE
UNLIMITED_INVITES = Misc.UNLIMITED_INVITES
TEMPORARY_INVITES = Misc.TEMPORARY_INVITES
REVOKED_INVITES = Misc.REVOKED_INVITES
NO_INVITES = Misc.NO_INVITES
DO_NOT_DISTURB = Misc.DO_NOT_DISTURB
JOINED_DISCORD_ON = Misc.JOINED_DISCORD_ON
JOINED_THIS_SERVER_ON = Misc.JOINED_THIS_SERVER_ON
LIST_COMMAND_CATEGORIES = Misc.LIST_COMMAND_CATEGORIES
PEPE_DOWNLOAD_ERROR: Final = Misc.PEPE_DOWNLOAD_ERROR
INVITE_TITLE: Final = Misc.INVITE_TITLE
UNLIMITED_INVITES: Final = Misc.UNLIMITED_INVITES
TEMPORARY_INVITES: Final = Misc.TEMPORARY_INVITES
REVOKED_INVITES: Final = Misc.REVOKED_INVITES
NO_INVITES: Final = Misc.NO_INVITES
DO_NOT_DISTURB: Final = Misc.DO_NOT_DISTURB
JOINED_DISCORD_ON: Final = Misc.JOINED_DISCORD_ON
JOINED_THIS_SERVER_ON: Final = Misc.JOINED_THIS_SERVER_ON
LIST_COMMAND_CATEGORIES: Final = Misc.LIST_COMMAND_CATEGORIES
dev_info_msg = Misc.dev_info

# Owner
BOT_PREFIX_CHANGED = Owner.PREFIX_CHANGED
BOT_DESCRIPTION_CHANGED = Owner.DESCRIPTION_CHANGED
BOT_PREFIX_CHANGED: Final = Owner.PREFIX_CHANGED
BOT_DESCRIPTION_CHANGED: Final = Owner.DESCRIPTION_CHANGED
Loading
Loading