Skip to content

Commit d4019dc

Browse files
author
timhauke
committed
fix: disable_all_items had an errors this is fixed.
1 parent c2c2d95 commit d4019dc

File tree

2 files changed

+224
-0
lines changed

2 files changed

+224
-0
lines changed

FURTHER_DEVELOPMENT.md

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
<div align="center">
2+
<h1 style="margin-bottom: 0.4rem;">VectoBeat Development Path</h1>
3+
<p style="max-width: 680px;">
4+
A staged implementation checklist that visualises the next waves of improvements for the VectoBeat music bot.
5+
Toggle each milestone as releases go out to keep the roadmap transparent for contributors and stakeholders.
6+
</p>
7+
</div>
8+
9+
<hr />
10+
11+
<section>
12+
<h2>🎯 Next Steps &mdash; Feature Expansion</h2>
13+
<ul style="list-style: none; padding-left: 0;">
14+
<li>
15+
<label>
16+
<input type="checkbox" disabled />
17+
<strong>Per-Guild Playback Profiles</strong> &mdash; Allow server owners to customise default volume, autoplay, and announcement styles via slash configuration.
18+
</label>
19+
</li>
20+
<li>
21+
<label>
22+
<input type="checkbox" disabled />
23+
<strong>Playlist Persistence</strong> &mdash; Back playlists with persistent storage (PostgreSQL or Redis) plus import/export tooling.
24+
</label>
25+
</li>
26+
<li>
27+
<label>
28+
<input type="checkbox" disabled />
29+
<strong>Advanced Autoplay</strong> &mdash; Recommend tracks automatically using guild listening history and source metadata.
30+
</label>
31+
</li>
32+
<li>
33+
<label>
34+
<input type="checkbox" disabled />
35+
<strong>Cross-Fade &amp; Gapless Playback</strong> &mdash; Employ Lavalink filters to deliver seamless transitions between songs.
36+
</label>
37+
</li>
38+
<li>
39+
<label>
40+
<input type="checkbox" disabled />
41+
<strong>Lyrics Integration</strong> &mdash; Surface synchronised lyrics (Genius, Musixmatch) within now-playing embeds.
42+
</label>
43+
</li>
44+
<li>
45+
<label>
46+
<input type="checkbox" disabled />
47+
<strong>DJ Permissions Layer</strong> &mdash; Add role-based queue control with an auditable history.
48+
</label>
49+
</li>
50+
</ul>
51+
</section>
52+
53+
<section>
54+
<h2>🛡️ Next Steps &mdash; Reliability &amp; Operations</h2>
55+
<ul style="list-style: none; padding-left: 0;">
56+
<li>
57+
<label>
58+
<input type="checkbox" disabled />
59+
<strong>Multi-Node Lavalink Failover</strong> &mdash; Provision redundant nodes with automatic reconnect and player migration.
60+
</label>
61+
</li>
62+
<li>
63+
<label>
64+
<input type="checkbox" disabled />
65+
<strong>Self-Healing Supervisors</strong> &mdash; Watch shard heartbeats and restart or reconnect when anomalies occur.
66+
</label>
67+
</li>
68+
<li>
69+
<label>
70+
<input type="checkbox" disabled />
71+
<strong>Structured Alerting</strong> &mdash; Export metrics to Prometheus/Alertmanager for proactive paging.
72+
</label>
73+
</li>
74+
<li>
75+
<label>
76+
<input type="checkbox" disabled />
77+
<strong>Chaos Testing Playbook</strong> &mdash; Run scheduled disconnect, latency, and error-injection drills.
78+
</label>
79+
</li>
80+
<li>
81+
<label>
82+
<input type="checkbox" disabled />
83+
<strong>Auto Scaling Strategy</strong> &mdash; Integrate with Kubernetes/Nomad to scale shards and nodes based on concurrency dashboards.
84+
</label>
85+
</li>
86+
</ul>
87+
</section>
88+
89+
<section>
90+
<h2>🔎 Next Steps &mdash; Observability &amp; Diagnostics</h2>
91+
<ul style="list-style: none; padding-left: 0;">
92+
<li>
93+
<label>
94+
<input type="checkbox" disabled />
95+
<strong>Grafana Dashboards</strong> &mdash; Publish live dashboards for shard health, node stats, and slash command throughput.
96+
</label>
97+
</li>
98+
<li>
99+
<label>
100+
<input type="checkbox" disabled />
101+
<strong>Command Analytics Pipeline</strong> &mdash; Stream anonymised command events into a data warehouse for trend analysis.
102+
</label>
103+
</li>
104+
<li>
105+
<label>
106+
<input type="checkbox" disabled />
107+
<strong>Real-Time Queue Telemetry</strong> &mdash; Emit queue lifecycle events (play, skip, finish) to webhooks or WebSocket consumers.
108+
</label>
109+
</li>
110+
<li>
111+
<label>
112+
<input type="checkbox" disabled />
113+
<strong>Enhanced Slash Feedback</strong> &mdash; Display progress bars and follow-ups for long-running operations.
114+
</label>
115+
</li>
116+
</ul>
117+
</section>
118+
119+
<section>
120+
<h2>🧰 Next Steps &mdash; Developer Experience</h2>
121+
<ul style="list-style: none; padding-left: 0;">
122+
<li>
123+
<label>
124+
<input type="checkbox" disabled />
125+
<strong>Strict Typing Enforcement</strong> &mdash; Gate merges with mypy/pyright and extend type hints across modules.
126+
</label>
127+
</li>
128+
<li>
129+
<label>
130+
<input type="checkbox" disabled />
131+
<strong>Scenario Test Harness</strong> &mdash; Mock Lavalink responses for integration-style queue and playback validation.
132+
</label>
133+
</li>
134+
<li>
135+
<label>
136+
<input type="checkbox" disabled />
137+
<strong>Command Reference Generator</strong> &mdash; Auto-build slash command documentation from source annotations.
138+
</label>
139+
</li>
140+
<li>
141+
<label>
142+
<input type="checkbox" disabled />
143+
<strong>Local Sandbox Stack</strong> &mdash; Ship docker-compose with Lavalink, Redis, and Postgres for contributors.
144+
</label>
145+
</li>
146+
</ul>
147+
</section>
148+
149+
<section>
150+
<h2>⚡ Next Steps &mdash; Performance</h2>
151+
<ul style="list-style: none; padding-left: 0%;">
152+
<li>
153+
<label>
154+
<input type="checkbox" disabled />
155+
<strong>Event Loop Profiling</strong> &mdash; Benchmark coroutine hotspots with `pyinstrument` and asyncio debug facilities.
156+
</label>
157+
</li>
158+
<li>
159+
<label>
160+
<input type="checkbox" disabled />
161+
<strong>Adaptive Caching</strong> &mdash; Cache heavy search queries with TTLs to curb upstream traffic.
162+
</label>
163+
</li>
164+
<li>
165+
<label>
166+
<input type="checkbox" disabled />
167+
<strong>Dynamic Search Limits</strong> &mdash; Tune track search result counts based on latency and guild load.
168+
</label>
169+
</li>
170+
<li>
171+
<label>
172+
<input type="checkbox" disabled />
173+
<strong>Batch REST Updates</strong> &mdash; Aggregate Discord REST edits to reduce rate-limit pressure.
174+
</label>
175+
</li>
176+
<li>
177+
<label>
178+
<input type="checkbox" disabled />
179+
<strong>Resource Budget Enforcement</strong> &mdash; Throttle high-load guilds once CPU/memory quotas are exceeded.
180+
</label>
181+
</li>
182+
</ul>
183+
</section>
184+
185+
<section>
186+
<h2>🔒 Next Steps &mdash; Security &amp; Compliance</h2>
187+
<ul style="list-style: none; padding-left: 0%;">
188+
<li>
189+
<label>
190+
<input type="checkbox" disabled />
191+
<strong>Secret Rotation Service</strong> &mdash; Automate token refresh via Vault or cloud secret managers.
192+
</label>
193+
</li>
194+
<li>
195+
<label>
196+
<input type="checkbox" disabled />
197+
<strong>Permission Scanner</strong> &mdash; Audit guild voice permissions and notify owners when capabilities are missing.
198+
</label>
199+
</li>
200+
<li>
201+
<label>
202+
<input type="checkbox" disabled />
203+
<strong>Audit Trail Ledger</strong> &mdash; Record administrative actions (force skip, queue clear) in immutable storage.
204+
</label>
205+
</li>
206+
<li>
207+
<label>
208+
<input type="checkbox" disabled />
209+
<strong>Privacy &amp; Data Handling Review</strong> &mdash; Document retention policies and offer opt-out controls for stored history.
210+
</label>
211+
</li>
212+
</ul>
213+
</section>
214+
215+
<hr />
216+
217+
<p align="center" style="font-size: 0.9rem;">
218+
Revisit this checklist after each release sprint, update statuses, and circulate progress with the wider team to keep everyone aligned on what ships next.
219+
</p>

src/commands/music_controls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,11 @@ async def on_timeout(self):
458458
except discord.HTTPException:
459459
pass
460460

461+
def disable_all_items(self):
462+
"""Gracefully disable every interactive component in the view."""
463+
for child in self.children:
464+
child.disabled = True
465+
461466
@discord.ui.button(label="Refresh", style=discord.ButtonStyle.secondary)
462467
async def refresh_button(self, interaction: discord.Interaction, button: discord.ui.Button): # type: ignore[override]
463468
"""Allow users to refresh the embed on demand."""

0 commit comments

Comments
 (0)