Skip to content

Commit c87f3c0

Browse files
committed
♻️ Refactor imports and remove unused schema definitions
Fixes #107
1 parent da59d60 commit c87f3c0

File tree

17 files changed

+121
-219
lines changed

17 files changed

+121
-219
lines changed

config.example.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ extensions:
3636
every: 300 # 300 seconds = 5 minutes
3737
bot:
3838
token: "bot token here" # Your bot token
39+
slash:
40+
enabled: true # Enable slash commands
3941
cache:
4042
type: "memory" # Cache type. Possible values: "memory" or "redis"
4143
redis: # Redis configuration (only used if type is "redis")

guides/getting-started.md

+5-11
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ pdm install
108108
```yaml
109109
bot:
110110
token: "YOUR_BOT_TOKEN_HERE"
111+
slash:
112+
enabled: true # Required for slash commands to work
111113
```
112114
113115
Replace `YOUR_BOT_TOKEN_HERE` with the actual token of your Discord bot.
@@ -139,9 +141,9 @@ touch src/extensions/my_first_extension/__init__.py
139141
2. Open `__init__.py` in your preferred text editor and add the following content:
140142

141143
```python
142-
from .main import setup, default, schema
144+
from .main import setup, default
143145
144-
__all__ = ["setup", "default", "schema"]
146+
__all__ = ["setup", "default"]
145147
```
146148

147149
> [!NOTE] This file imports and exposes the necessary components from our `main.py` file
@@ -175,10 +177,6 @@ def setup(bot: discord.Bot):
175177
default = {
176178
"enabled": True
177179
}
178-
179-
schema = {
180-
"enabled": bool
181-
}
182180
```
183181

184182
Let's break down what we've done here:
@@ -189,7 +187,7 @@ Let's break down what we've done here:
189187
- We define a `MyFirstExtension` class that inherits from `commands.Cog`. This class
190188
will contain our commands and listeners.
191189
- The `setup` function is required by Botkit to add our cog to the bot.
192-
- We define `default` and `schema` dictionaries for the extension's configuration.
190+
- We define a `default` dictionary for the extension's configuration.
193191

194192
> [!TIP] Using type hints (like `bot: discord.Bot`) helps catch errors early and
195193
> improves code readability. It's a good practice to use them consistently in your code.
@@ -303,10 +301,6 @@ def setup(bot: discord.Bot):
303301
default = {
304302
"enabled": True
305303
}
306-
307-
schema = {
308-
"enabled": bool
309-
}
310304
```
311305

312306
## Step 12: Running Your Bot

pdm.lock

+63-75
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ dependencies = [
1313
"orjson>=3.10.7",
1414
"pytz>=2024.1",
1515
"typing-extensions>=4.12.2",
16-
"schema>=0.7.7",
1716
"hypercorn>=0.17.3",
1817
"quart>=0.19.6",
1918
"pydantic>=2.10.6",

requirements.txt

+39-41
Original file line numberDiff line numberDiff line change
@@ -187,22 +187,23 @@ multidict==6.4.3 \
187187
--hash=sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507 \
188188
--hash=sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae \
189189
--hash=sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054
190-
orjson==3.10.16 \
191-
--hash=sha256:02c6279016346e774dd92625d46c6c40db687b8a0d685aadb91e26e46cc33e1e \
192-
--hash=sha256:30245c08d818fdcaa48b7d5b81499b8cae09acabb216fe61ca619876b128e184 \
193-
--hash=sha256:5385bbfdbc90ff5b2635b7e6bebf259652db00a92b5e3c45b616df75b9058e88 \
194-
--hash=sha256:6d3444abbfa71ba21bb042caa4b062535b122248259fdb9deea567969140abca \
195-
--hash=sha256:6daa0e1c9bf2e030e93c98394de94506f2a4d12e1e9dadd7c53d5e44d0f9628e \
196-
--hash=sha256:73390ed838f03764540a7bdc4071fe0123914c2cc02fb6abf35182d5fd1b7a42 \
197-
--hash=sha256:7ca55097a11426db80f79378e873a8c51f4dde9ffc22de44850f9696b7eb0e8c \
198-
--hash=sha256:80fed80eaf0e20a31942ae5d0728849862446512769692474be5e6b73123a23b \
199-
--hash=sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6 \
200-
--hash=sha256:9da9019afb21e02410ef600e56666652b73eb3e4d213a0ec919ff391a7dd52aa \
201-
--hash=sha256:a0ba1d0baa71bf7579a4ccdcf503e6f3098ef9542106a0eca82395898c8a500a \
202-
--hash=sha256:a22bba012a0c94ec02a7768953020ab0d3e2b884760f859176343a36c01adf87 \
203-
--hash=sha256:d2aaa5c495e11d17b9b93205f5fa196737ee3202f000aaebf028dc9a73750f10 \
204-
--hash=sha256:daeb3a1ee17b69981d3aae30c3b4e786b0f8c9e6c71f2b48f1aef934f63f38f4 \
205-
--hash=sha256:eb0beefa5ef3af8845f3a69ff2a4aa62529b5acec1cfe5f8a6b4141033fd46ef
190+
orjson==3.10.18 \
191+
--hash=sha256:187ec33bbec58c76dbd4066340067d9ece6e10067bb0cc074a21ae3300caa84e \
192+
--hash=sha256:22748de2a07fcc8781a70edb887abf801bb6142e6236123ff93d12d92db3d406 \
193+
--hash=sha256:303565c67a6c7b1f194c94632a4a39918e067bd6176a48bec697393865ce4f06 \
194+
--hash=sha256:356b076f1662c9813d5fa56db7d63ccceef4c271b1fb3dd522aca291375fcf17 \
195+
--hash=sha256:3a83c9954a4107b9acd10291b7f12a6b29e35e8d43a414799906ea10e75438e6 \
196+
--hash=sha256:3d600be83fe4514944500fa8c2a0a77099025ec6482e8087d7659e891f23058a \
197+
--hash=sha256:50c15557afb7f6d63bc6d6348e0337a880a04eaa9cd7c9d569bcb4e760a24753 \
198+
--hash=sha256:559eb40a70a7494cd5beab2d73657262a74a2c59aff2068fdba8f0424ec5b39d \
199+
--hash=sha256:6612787e5b0756a171c7d81ba245ef63a3533a637c335aa7fcb8e665f4a0966f \
200+
--hash=sha256:7ac6bd7be0dcab5b702c9d43d25e70eb456dfd2e119d512447468f6405b4a69c \
201+
--hash=sha256:86314fdb5053a2f5a5d881f03fca0219bfdf832912aa88d18676a5175c6916b5 \
202+
--hash=sha256:9dca85398d6d093dd41dc0983cbf54ab8e6afd1c547b6b8a311643917fbf4e0c \
203+
--hash=sha256:9f72f100cee8dde70100406d5c1abba515a7df926d4ed81e20a9730c062fe9ad \
204+
--hash=sha256:e8da3947d92123eda795b68228cafe2724815621fe35e8e320a9e9593a4bcd53 \
205+
--hash=sha256:f3c29eb9a81e2fbc6fd7ddcfba3e101ba92eaff455b8d602bf7511088bbc0eae \
206+
--hash=sha256:f9f94cf6d3f9cd720d641f8399e390e7411487e493962213390d1ae45c7814fc
206207
priority==2.0.0 \
207208
--hash=sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa \
208209
--hash=sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0
@@ -234,25 +235,25 @@ pycord-rest-bot==0.1.0a9 \
234235
pycparser==2.22 \
235236
--hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
236237
--hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
237-
pydantic==2.11.3 \
238-
--hash=sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3 \
239-
--hash=sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f
240-
pydantic-core==2.33.1 \
241-
--hash=sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8 \
242-
--hash=sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4 \
243-
--hash=sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939 \
244-
--hash=sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea \
245-
--hash=sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e \
246-
--hash=sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498 \
247-
--hash=sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d \
248-
--hash=sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a \
249-
--hash=sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df \
250-
--hash=sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3 \
251-
--hash=sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d \
252-
--hash=sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda \
253-
--hash=sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db \
254-
--hash=sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b \
255-
--hash=sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39
238+
pydantic==2.11.4 \
239+
--hash=sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d \
240+
--hash=sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb
241+
pydantic-core==2.33.2 \
242+
--hash=sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7 \
243+
--hash=sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025 \
244+
--hash=sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b \
245+
--hash=sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea \
246+
--hash=sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc \
247+
--hash=sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1 \
248+
--hash=sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88 \
249+
--hash=sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290 \
250+
--hash=sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc \
251+
--hash=sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f \
252+
--hash=sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab \
253+
--hash=sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1 \
254+
--hash=sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011 \
255+
--hash=sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2 \
256+
--hash=sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6
256257
pynacl==1.5.0 \
257258
--hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \
258259
--hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \
@@ -290,12 +291,9 @@ pyyaml==6.0.2 \
290291
quart==0.20.0 \
291292
--hash=sha256:003c08f551746710acb757de49d9b768986fd431517d0eb127380b656b98b8f1 \
292293
--hash=sha256:08793c206ff832483586f5ae47018c7e40bdd75d886fee3fabbdaa70c2cf505d
293-
redis==5.2.1 \
294-
--hash=sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f \
295-
--hash=sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4
296-
schema==0.7.7 \
297-
--hash=sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde \
298-
--hash=sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807
294+
redis==6.0.0 \
295+
--hash=sha256:5446780d2425b787ed89c91ddbfa1be6d32370a636c8fdb687f11b1c26c1fa88 \
296+
--hash=sha256:a2e040aee2cdd947be1fa3a32e35a956cd839cc4c1dbbe4b2cdee5b9623fd27c
299297
sentry-sdk==2.27.0 \
300298
--hash=sha256:90f4f883f9eff294aff59af3d58c2d1b64e3927b28d5ada2b9b41f5aeda47daf \
301299
--hash=sha256:c58935bfff8af6a0856d37e8adebdbc7b3281c2b632ec823ef03cd108d216ff0

src/extensions/add-dm/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright (c) NiceBots.xyz
22
# SPDX-License-Identifier: MIT
33

4-
from .main import default, schema, setup
4+
from .main import default, setup
55

6-
__all__ = ["default", "schema", "setup"]
6+
__all__ = ["default", "setup"]

src/extensions/add-dm/main.py

-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import discord
55
from discord.ext import commands
6-
from schema import Schema
76

87
from src.log import logger
98

@@ -12,13 +11,6 @@
1211
"message": "Heyy, {user.mention}! Thank you for inviting me to your server! To get started, type `/help`",
1312
}
1413

15-
schema = Schema(
16-
{
17-
"enabled": bool,
18-
"message": str,
19-
},
20-
)
21-
2214

2315
class AddDM(commands.Cog):
2416
def __init__(self, bot: discord.Bot, config: dict) -> None:

src/extensions/branding/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright (c) NiceBots.xyz
22
# SPDX-License-Identifier: MIT
33

4-
from .branding import default, schema, setup
4+
from .branding import default, setup
55

6-
__all__ = ["default", "schema", "setup"]
6+
__all__ = ["default", "setup"]

src/extensions/branding/branding.py

-38
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import discord
1010
import pytz
1111
from discord.ext import commands, tasks
12-
from schema import And, Optional, Or, Schema
1312
from typing_extensions import TypedDict
1413

1514
from src.log import logger
@@ -36,43 +35,6 @@
3635
},
3736
}
3837

39-
status_schema = Schema(
40-
{
41-
Optional("playing"): Or(str, list[str]),
42-
Optional("watching"): Or(str, list[str]),
43-
Optional("listening"): Or(str, list[str]),
44-
Optional("streaming"): Or(str, list[str]),
45-
Optional("every"): And(int, lambda n: n > 0),
46-
},
47-
)
48-
49-
embed_config_schema = Schema(
50-
{
51-
"footer": Optional(
52-
{
53-
"value": Or(str, list[str]),
54-
Optional("time"): bool,
55-
Optional("tz"): And(str, lambda s: s in pytz.all_timezones),
56-
Optional("separator"): str,
57-
},
58-
),
59-
Optional("color"): Or(str, int),
60-
Optional("author_url"): str,
61-
Optional("author"): str,
62-
},
63-
)
64-
65-
schema = Schema(
66-
{
67-
"enabled": bool,
68-
Optional("embed"): embed_config_schema,
69-
Optional("status"): And(
70-
status_schema,
71-
lambda s: any(k in ["playing", "watching", "listening", "streaming"] for k in s),
72-
),
73-
},
74-
)
75-
7638

7739
class Footer(TypedDict):
7840
value: str | list[str] | None

src/extensions/listings/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright (c) NiceBots.xyz
22
# SPDX-License-Identifier: MIT
33

4-
from .main import default, schema, setup
4+
from .main import default, setup
55

6-
__all__ = ["default", "schema", "setup"]
6+
__all__ = ["default", "setup"]

src/extensions/listings/main.py

-9
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import aiohttp
77
import discord
88
from discord.ext import commands, tasks
9-
from schema import Optional, Schema
109

1110
from src.log import logger
1211

@@ -17,14 +16,6 @@
1716
"enabled": False,
1817
}
1918

20-
schema = Schema(
21-
{
22-
Optional("topgg_token"): str,
23-
Optional("discordscom_token"): str,
24-
"enabled": bool,
25-
},
26-
)
27-
2819

2920
async def post_request(url: str, headers: dict[Any, Any], payload: dict[Any, Any]) -> None:
3021
async with aiohttp.ClientSession() as session, session.post(url, headers=headers, json=payload) as resp:
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright (c) NiceBots.xyz
22
# SPDX-License-Identifier: MIT
33

4-
from .main import default, schema, setup
4+
from .main import default, setup
55

6-
__all__ = ["default", "schema", "setup"]
6+
__all__ = ["default", "setup"]

src/extensions/nice_errors/main.py

-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import discord
77
from discord.ext import commands
8-
from schema import Optional, Schema
98

109
from src import custom
1110
from src.utils.cooldown import CooldownExceeded
@@ -20,13 +19,6 @@
2019
"enabled": True,
2120
}
2221

23-
schema = Schema(
24-
{
25-
"enabled": bool,
26-
Optional("sentry"): {"dsn": str},
27-
},
28-
)
29-
3022

3123
@final
3224
class NiceErrors(commands.Cog):

src/extensions/ping/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright (c) NiceBots.xyz
22
# SPDX-License-Identifier: MIT
33

4-
from .ping import default, on_startup, schema, setup, setup_webserver
4+
from .ping import default, on_startup, setup, setup_webserver
55

6-
__all__ = ["default", "on_startup", "schema", "setup", "setup_webserver"]
6+
__all__ = ["default", "on_startup", "setup", "setup_webserver"]

src/extensions/ping/ping.py

-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import discord
66
from discord.ext import bridge, commands
77
from quart import Quart
8-
from schema import Schema
98

109
from src import custom
1110
from src.log import logger
@@ -15,12 +14,6 @@
1514
"enabled": True,
1615
}
1716

18-
schema = Schema(
19-
{
20-
"enabled": bool,
21-
},
22-
)
23-
2417

2518
class BridgePing(commands.Cog):
2619
def __init__(self, bot: custom.Bot) -> None:
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright (c) NiceBots.xyz
22
# SPDX-License-Identifier: MIT
33

4-
from .main import default, schema, setup
4+
from .main import default, setup
55

6-
__all__ = ["default", "schema", "setup"]
6+
__all__ = ["default", "setup"]

src/extensions/status-post/main.py

-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import aiohttp
88
import discord
99
from discord.ext import commands, tasks
10-
from schema import Schema
1110

1211
from src.log import logger
1312

@@ -17,14 +16,6 @@
1716
"every": 60,
1817
}
1918

20-
schema = Schema(
21-
{
22-
"enabled": bool,
23-
"url": str,
24-
"every": int,
25-
},
26-
)
27-
2819

2920
class Status(commands.Cog):
3021
def __init__(self, bot: discord.Bot, config: dict[Any, Any]) -> None:

0 commit comments

Comments
 (0)