1+ <!DOCTYPE>
2+ < html lang ="html ">
3+ < head >
4+ < title > Radio Net</ title >
5+ < link rel ="stylesheet " href ="https://fonts.googleapis.com/css2?family=IM+Fell+English:ital@0;1&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&family=Special+Elite&display=swap ">
6+ < link rel ="stylesheet " href ="styles.css ">
7+ </ head >
8+ < body >
9+ < div class ="video-modal ">
10+ < div class ="topbar ">
11+ < iconify-icon icon ="line-md:youtube "> </ iconify-icon >
12+ < span > Demonstration Video</ span >
13+ < button id ="modal-close " type ="button " class ="close-button ">
14+ < iconify-icon icon ="line-md:close "> </ iconify-icon >
15+ </ button >
16+ </ div >
17+ < iframe width ="560 " height ="315 " src ="https://www.youtube.com/embed/K2n_j2r6weM?si=NyVztHrqmLyZvP1X " title ="YouTube video player "
18+ allow ="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share "
19+ referrerpolicy ="strict-origin-when-cross-origin " allowfullscreen >
20+ </ iframe >
21+ </ div >
22+ < div class ="content ">
23+ < span >
24+ < h1 > Radio Net</ h1 >
25+ </ span >
26+ < div class ="content-body ">
27+ < div >
28+ < h2 > < iconify-icon icon ="line-md:question-circle "> </ iconify-icon > What is it</ h2 >
29+ < p >
30+ A Discord bot that turns a set of voice channels, in the same server or across different
31+ servers, into a half-duplex "radio net". Coordinate between groups of people in different locations, or just have fun with friends.
32+ The bot can be added to any server, and the voice channels can be in any server, as long as the bot has permission to join them.
33+ </ p >
34+ </ div >
35+
36+ < div >
37+ < h2 >
38+ < iconify-icon icon ="line-md:discord "> </ iconify-icon >
39+ < span > How it works</ span >
40+ < button type ="button " id ="modal-open " class ="demo-video-button ">
41+ < iconify-icon icon ="line-md:youtube "> </ iconify-icon >
42+ Video
43+ </ button >
44+ </ h2 >
45+ < p >
46+ The user starts a radio net by running the < span class ="highlight "> /net host</ span > command while in a voice channel. This creates a new net and a
47+ unique join code. The other users can then join the net by running < span class ="highlight "> /net join <join code></ span > command.
48+ Do this for each channel that should be in the net. Running these commands will make the bots join the voice channels and start
49+ listening for a priority speaker. When it detects a priority speaker in one channel, it transmits that audio to all other channels
50+ on the same net.
51+ </ p >
52+ </ div >
53+
54+ < div >
55+ < h2 > < iconify-icon icon ="line-md:cog "> </ iconify-icon > Setting up</ h2 >
56+ < ul >
57+ < li > Invite the < span class ="highlight "> Coordinator Bot</ span > and an optional amount of relay bots to your server.</ li >
58+ < li > Assign a role with < span class ="highlight "> Priority Speaker</ span > permissions to users.</ li >
59+ < li > Set up a Discord hotkey for < span class ="highlight "> Voice Activity Priority</ span > to act as the radio PTT.</ li >
60+ </ ul >
61+ </ div >
62+
63+ < div >
64+ < h2 > < iconify-icon inline icon ="line-md:document-code "> </ iconify-icon > Commands</ h2 >
65+ < ul >
66+ < li > < span class ="highlight "> /net host</ span > - Hosts a new radio net and creates a unique join code.</ li >
67+ < li > < span class ="highlight "> /net join <join code></ span > - Joins a existing radio net using the unique code created with < span class ="highlight "> /net host</ span > </ li >
68+ < li > < span class ="highlight "> /net leave</ span > - Leave the radio net. Can not be used by the hoster.</ li >
69+ < li > < span class ="highlight "> /net end</ span > - Ends the radio network and kicks all other participants. Must be used by the hoster.</ li >
70+ < li > < span class ="highlight "> /net status</ span > - List linked channels and who is currently transmitting.</ li >
71+ < li > < span class ="highlight "> /net preferences</ span > - Set user preferences like microphone gain.</ li >
72+ </ ul >
73+ </ div >
74+ </ div >
75+ </ div >
76+ < div class ="invites ">
77+ < h1 > < iconify-icon inline icon ="line-md:discord "> </ iconify-icon > Bot invites</ h1 >
78+
79+ < a class ="invite-card " target ="_blank " href ="https://discord.com/oauth2/authorize?client_id=1533606850900000869&permissions=3146752&integration_type=0&scope=bot+applications.commands ">
80+ < img src ="radio_net_pfp.png " alt ="Radio Net ">
81+ < div >
82+ < h3 > Coordinator < span class ="bot-hint required "> REQUIRED</ span > </ h3 >
83+ < span > Runs /net commands and doubles as a relay</ span >
84+ </ div >
85+ < iconify-icon icon ="line-md:external-link "> </ iconify-icon >
86+ </ a >
87+ < a class ="invite-card " target ="_blank " href ="https://discord.com/oauth2/authorize?client_id=1533607051224158349&permissions=3146752&integration_type=0&scope=bot+applications.commands ">
88+ < img src ="radio_relay_pfp.png " alt ="Radio Net ">
89+ < div >
90+ < h3 > Relay Alpha < span class ="bot-hint optional "> OPTIONAL</ span > </ h3 >
91+ < span > Optional. Adds extra simultaneous net capacity</ span >
92+ </ div >
93+ < iconify-icon icon ="line-md:external-link "> </ iconify-icon >
94+ </ a >
95+ < a class ="invite-card " target ="_blank " href ="https://discord.com/oauth2/authorize?client_id=1533607123018055841&permissions=3146752&integration_type=0&scope=bot+applications.commands ">
96+ < img src ="radio_relay_pfp.png " alt ="Radio Net ">
97+ < div >
98+ < h3 > Relay Bravo < span class ="bot-hint optional "> OPTIONAL</ span > </ h3 >
99+ < span > Optional. Adds extra simultaneous net capacity</ span >
100+ </ div >
101+ < iconify-icon icon ="line-md:external-link "> </ iconify-icon >
102+ </ a >
103+ < a class ="invite-card " target ="_blank " href ="https://discord.com/oauth2/authorize?client_id=1533607192299831376&permissions=3146752&integration_type=0&scope=bot+applications.commands ">
104+ < img src ="radio_relay_pfp.png " alt ="Radio Net ">
105+ < div >
106+ < h3 > Relay Charlie < span class ="bot-hint optional "> OPTIONAL</ span > </ h3 >
107+ < span > Optional. Adds extra simultaneous net capacity</ span >
108+ </ div >
109+ < iconify-icon icon ="line-md:external-link "> </ iconify-icon >
110+ </ a >
111+ < a class ="invite-card " target ="_blank " href ="https://discord.com/oauth2/authorize?client_id=1533609282736492574&permissions=3146752&integration_type=0&scope=bot+applications.commands ">
112+ < img src ="radio_relay_pfp.png " alt ="Radio Net ">
113+ < div >
114+ < h3 > Relay Delta < span class ="bot-hint optional "> OPTIONAL</ span > </ h3 >
115+ < span > Optional. Adds extra simultaneous net capacity</ span >
116+ </ div >
117+ < iconify-icon icon ="line-md:external-link "> </ iconify-icon >
118+ </ a >
119+ < a class ="invite-card " target ="_blank " href ="https://discord.com/oauth2/authorize?client_id=1533917410728611929&permissions=3146752&integration_type=0&scope=bot+applications.commands ">
120+ < img src ="radio_relay_pfp.png " alt ="Radio Net ">
121+ < div >
122+ < h3 > Relay Echo < span class ="bot-hint optional "> OPTIONAL</ span > </ h3 >
123+ < span > Optional. Adds extra simultaneous net capacity</ span >
124+ </ div >
125+ < iconify-icon icon ="line-md:external-link "> </ iconify-icon >
126+ </ a >
127+ </ div >
128+ </ body >
129+
130+ < script src ="https://code.iconify.design/iconify-icon/3.0.0/iconify-icon.min.js "> </ script >
131+ < script >
132+ const modal = document . querySelector ( '.video-modal' ) ;
133+ const openModalButton = document . getElementById ( 'modal-open' ) ;
134+ const closeModalButton = document . getElementById ( 'modal-close' ) ;
135+
136+ openModalButton . addEventListener ( 'click' , ( ) => {
137+ modal . classList . add ( 'active' ) ;
138+ } ) ;
139+
140+ closeModalButton . addEventListener ( 'click' , ( ) => {
141+ modal . classList . remove ( 'active' ) ;
142+ } ) ;
143+
144+ window . addEventListener ( 'click' , ( event ) => {
145+ if ( event . target === modal ) {
146+ modal . classList . remove ( 'active' ) ;
147+ }
148+ } ) ;
149+ </ script >
150+ </ html >
0 commit comments