aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AGENTS.md2
-rw-r--r--README.md2
-rw-r--r--requirements-dev.txt53
-rw-r--r--requirements.txt47
-rw-r--r--scripts/bump_reqs.py50
5 files changed, 61 insertions, 93 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 8d0b743..5f62ec3 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,7 +1,7 @@
1# Agent Instructions for Senator Sperma 1# Agent Instructions for Senator Sperma
2 2
3## Required Setup 3## Required Setup
4- Requires **Python 3.13** (3.14 not supported - py-cord incompatibility) 4- Requires **Python 3.14**
5- System dependencies: `ffmpeg`, `zbar` library (installed system-wide) 5- System dependencies: `ffmpeg`, `zbar` library (installed system-wide)
6- Bot token in `.env` file (copy from `.env.example`) 6- Bot token in `.env` file (copy from `.env.example`)
7 7
diff --git a/README.md b/README.md
index 8e71dbe..e9cf127 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
2 2
3A Discord bot with music playback, TTS, web search, and utility commands. 3A Discord bot with music playback, TTS, web search, and utility commands.
4 4
5Requires Python 3.13 (py-cord doesn't support 3.14 yet). 5Requires Python 3.14.
6 6
7## Setup 7## Setup
8 8
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 6a6279c..ed5f5cc 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,59 +1,18 @@
1pytest==8.3.4 1pytest==9.0.3
2pytest-asyncio==0.25.2 2pytest-asyncio==1.3.0
3pytest-mock==3.14.0 3basedpyright==1.39.5
4aiofiles==25.1.0 4aiofiles==25.1.0
5aiohappyeyeballs==2.6.1 5aiohttp==3.13.5
6aiohttp==3.13.3
7aiosignal==1.4.0
8anyio==4.12.1
9attrs==25.4.0
10basedpyright==1.39.2
11beautifulsoup4==4.14.3 6beautifulsoup4==4.14.3
12brotli==1.2.0
13bs4==0.0.2
14certifi==2026.2.25
15cffi==2.0.0
16charset-normalizer==3.4.6
17click==8.1.8
18contourpy==1.3.3
19croniter==6.2.2 7croniter==6.2.2
20cycler==0.12.1
21davey==0.1.4
22dotenv==0.9.9
23fonttools==4.62.1
24frozenlist==1.8.0
25gTTS==2.5.4 8gTTS==2.5.4
26h11==0.16.0
27httpcore==1.0.9
28httpx==0.28.1 9httpx==0.28.1
29idna==3.11
30kiwisolver==1.5.0
31matplotlib==3.10.8
32multidict==6.7.1
33mutagen==1.47.0 10mutagen==1.47.0
34nodejs-wheel-binaries==24.14.1
35numpy==2.4.4
36packaging==26.1
37pillow==12.2.0 11pillow==12.2.0
38propcache==0.4.1
39py-cord==2.8.0 12py-cord==2.8.0
40pycparser==3.0
41pycryptodomex==3.23.0
42PyNaCl==1.6.2
43pyparsing==3.3.2
44python-dateutil==2.9.0.post0
45python-dotenv==1.2.2 13python-dotenv==1.2.2
46pytube==15.0.0
47pyzbar==0.1.9 14pyzbar==0.1.9
48qrcode==8.2 15qrcode==8.2
49RapidFuzz==3.14.3 16requests==2.34.2
50requests==2.32.5
51six==1.17.0
52soupsieve==2.8.3
53typing_extensions==4.15.0
54urllib3==2.6.3
55websockets==16.0
56yarl==1.23.0
57youtube-search-python==1.6.6
58yt-dlp==2026.3.17 17yt-dlp==2026.3.17
59yt-dlp-ejs==0.8.0 18youtube-search-python==1.6.6
diff --git a/requirements.txt b/requirements.txt
index d43181f..5fb918e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,56 +1,15 @@
1aiofiles==25.1.0 1aiofiles==25.1.0
2aiohappyeyeballs==2.6.1 2aiohttp==3.13.5
3aiohttp==3.13.3
4aiosignal==1.4.0
5anyio==4.12.1
6attrs==25.4.0
7basedpyright==1.39.2
8beautifulsoup4==4.14.3 3beautifulsoup4==4.14.3
9brotli==1.2.0
10bs4==0.0.2
11certifi==2026.2.25
12cffi==2.0.0
13charset-normalizer==3.4.6
14click==8.1.8
15contourpy==1.3.3
16croniter==6.2.2 4croniter==6.2.2
17cycler==0.12.1
18davey==0.1.4
19dotenv==0.9.9
20fonttools==4.62.1
21frozenlist==1.8.0
22gTTS==2.5.4 5gTTS==2.5.4
23h11==0.16.0
24httpcore==1.0.9
25httpx==0.28.1 6httpx==0.28.1
26idna==3.11
27kiwisolver==1.5.0
28matplotlib==3.10.8
29multidict==6.7.1
30mutagen==1.47.0 7mutagen==1.47.0
31nodejs-wheel-binaries==24.14.1
32numpy==2.4.4
33packaging==26.1
34pillow==12.2.0 8pillow==12.2.0
35propcache==0.4.1
36py-cord==2.8.0 9py-cord==2.8.0
37pycparser==3.0
38pycryptodomex==3.23.0
39PyNaCl==1.6.2
40pyparsing==3.3.2
41python-dateutil==2.9.0.post0
42python-dotenv==1.2.2 10python-dotenv==1.2.2
43pytube==15.0.0
44pyzbar==0.1.9 11pyzbar==0.1.9
45qrcode==8.2 12qrcode==8.2
46RapidFuzz==3.14.3 13requests==2.34.2
47requests==2.32.5
48six==1.17.0
49soupsieve==2.8.3
50typing_extensions==4.15.0
51urllib3==2.6.3
52websockets==16.0
53yarl==1.23.0
54youtube-search-python==1.6.6
55yt-dlp==2026.3.17 14yt-dlp==2026.3.17
56yt-dlp-ejs==0.8.0 15youtube-search-python==1.6.6
diff --git a/scripts/bump_reqs.py b/scripts/bump_reqs.py
new file mode 100644
index 0000000..5d253e7
--- /dev/null
+++ b/scripts/bump_reqs.py
@@ -0,0 +1,50 @@
1#!/usr/bin/env python3
2"""Bump all pinned versions in requirements*.txt to latest from PyPI."""
3
4import json
5import re
6import urllib.request
7from pathlib import Path
8
9REQS = sorted(Path().glob("requirements*.txt"))
10PYPI = "https://pypi.org/pypi/{}/json"
11
12
13def latest_version(package: str) -> str | None:
14 url = PYPI.format(package)
15 try:
16 with urllib.request.urlopen(url, timeout=10) as resp:
17 data = json.load(resp)
18 return data["info"]["version"]
19 except Exception:
20 return None
21
22
23def bump_file(path: Path):
24 lines = path.read_text().splitlines()
25 changed = []
26 for line in lines:
27 m = re.match(r"^([\w-]+(?:\[[\w-]+])?)==[\w.]+$", line)
28 if m:
29 pkg = m.group(1)
30 latest = latest_version(pkg)
31 if latest:
32 changed.append(f"{pkg}=={latest}")
33 if f"{pkg}=={latest}" != line:
34 print(f" {pkg}: {line.split('==')[1]} -> {latest}")
35 else:
36 changed.append(line)
37 print(f" {pkg}: failed to fetch, keeping current")
38 else:
39 changed.append(line)
40 path.write_text("\n".join(changed) + "\n")
41
42
43def main():
44 for req in REQS:
45 print(f"\n{req}:")
46 bump_file(req)
47
48
49if __name__ == "__main__":
50 main()