diff --git a/src/client/classes/Datastore.ts b/src/client/classes/Datastore.ts index cc7fa2a..d398a12 100644 --- a/src/client/classes/Datastore.ts +++ b/src/client/classes/Datastore.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import path from 'path'; export default class { - map: Map; + map: Map; constructor() { this.map = new Map(); this.loadData(); @@ -49,7 +49,7 @@ export default class { this.saveEntry(id, newData); } - loadEntry(id: any){ + loadEntry(id: string){ try { const json = require(`../../../datastore/` + id + '.json'); this.map.set(id, json); diff --git a/src/client/classes/Stations.ts b/src/client/classes/Stations.ts index 5f555ce..144c7ca 100644 --- a/src/client/classes/Stations.ts +++ b/src/client/classes/Stations.ts @@ -7,7 +7,7 @@ export interface station { name: string, owner: string, logo: string, - stream: [] + stream: any } export default class Stations extends Array { @@ -22,11 +22,11 @@ export default class Stations extends Array { logger('Stations', 'Started fetching list - ' + options.url); let list = await fetch(options.url) .then(this.checkFetchStatus) - .then((response: { json: () => any; }) => response.json()); + .then((response: { json: () => station; }) => response.json()); if(list){ this.length = 0; - list.forEach((station: any) => { + list.forEach((station: station) => { try { this.push(station); } catch (error) { @@ -61,7 +61,7 @@ export default class Stations extends Array { } checkFetchStatus(response: any) { - if (response.ok) { // res.status >= 200 && res.status < 300 + if (response.ok) { return response; } else { throw new Error(response.status + " " + response.statusText); diff --git a/src/client/classes/Streamer.ts b/src/client/classes/Streamer.ts index 5b6cce2..55733bc 100644 --- a/src/client/classes/Streamer.ts +++ b/src/client/classes/Streamer.ts @@ -1,6 +1,7 @@ import logger from "../funcs/logger"; import { createAudioPlayer, createAudioResource, NoSubscriberBehavior } from "@discordjs/voice"; import RadioClient from "../../Client"; +import { station } from "./Stations"; export default class Streamer { map: any; @@ -29,7 +30,7 @@ export default class Streamer { if(this.mode == "auto"){ if(!client.stations) return; - client.stations.forEach((station: any) => { + client.stations.forEach((station: station) => { this.play(station); }); } @@ -40,13 +41,13 @@ export default class Streamer { let streamers = this.map.keys(); streamers.forEach((streamer: any) => { - if(client.stations?.findIndex((station: { name: any; }) => station.name == streamer) == -1){ + if(client.stations?.findIndex((station: station) => station.name == streamer) == -1){ this.stop(streamer); } }); } - play(station: any) { + play(station: station) { let audioPlayer = this.map.get(station.name); if(!audioPlayer) { if(this.mode == "auto"){ @@ -95,7 +96,7 @@ export default class Streamer { return audioPlayer; } - stop(station: any){ + stop(station: station){ let audioPlayer = this.map.get(station.name); if(audioPlayer){ logger('Streamer', station.name + " / " + "Stop"); @@ -105,7 +106,7 @@ export default class Streamer { this.map.delete(station.name); } - listen(station: any) { + listen(station: station) { let audioPlayer = this.map.get(station.name); if(!audioPlayer || this.mode == "manual" && audioPlayer.subscribers.length == 0) audioPlayer = this.play(station); return audioPlayer; @@ -113,7 +114,7 @@ export default class Streamer { leave(client: RadioClient) { if(!client.stations) return; - client.stations.forEach((station: any) => { + client.stations.forEach((station: station) => { this.stop(station); }); } diff --git a/src/client/commands/next.ts b/src/client/commands/next.ts index 02dc465..43a3b92 100644 --- a/src/client/commands/next.ts +++ b/src/client/commands/next.ts @@ -1,12 +1,13 @@ import { ButtonInteraction, ChatInputCommandInteraction, StringSelectMenuInteraction } from "discord.js"; import RadioClient from "../../Client"; import { station } from "../classes/Stations" +import { command } from "../commands"; export default { name: 'next', description: 'Next Station', category: 'radio', - async execute(interaction: ButtonInteraction | ChatInputCommandInteraction | StringSelectMenuInteraction, client: RadioClient, command: any) { + async execute(interaction: ButtonInteraction | ChatInputCommandInteraction | StringSelectMenuInteraction, client: RadioClient, command: command) { if (client.funcs.check(client, interaction, command)) { const radio = client.radio?.get(interaction.guild?.id); diff --git a/src/client/funcs/listStations.ts b/src/client/funcs/listStations.ts index 35bffc4..d60a43e 100644 --- a/src/client/funcs/listStations.ts +++ b/src/client/funcs/listStations.ts @@ -1,20 +1,19 @@ -import { ActionRowBuilder, StringSelectMenuBuilder } from "discord.js"; +import { ActionRowBuilder, SelectMenuComponentOptionData, StringSelectMenuBuilder } from "discord.js"; import RadioClient from "../../Client"; +import { station } from "../classes/Stations"; export default function listStations(client: RadioClient, interaction: any){ - let stations: any = new Array(); - let options: any = new Array(); - if(!client.stations) return; - stations = client.stations.forEach((station: { name?: any; owner?: any; label?: any; description?: any; value?: any; }) => { + let options : SelectMenuComponentOptionData[] = new Array(); + + client.stations.forEach((station: station) => { if(station.name == "GrooveFM") return; - station = { + options.push({ label: station.name, description: station.owner, value: station.name - }; - options.push(station); + }); }); const menu = new ActionRowBuilder() @@ -25,9 +24,6 @@ export default function listStations(client: RadioClient, interaction: any){ .addOptions(options) ); - stations = null; - options = null; - return interaction.reply({ content: '**Select station:**', components: [menu], diff --git a/src/client/funcs/play.ts b/src/client/funcs/play.ts index f407b2b..6943850 100644 --- a/src/client/funcs/play.ts +++ b/src/client/funcs/play.ts @@ -1,8 +1,11 @@ -import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ColorResolvable, EmbedBuilder } from "discord.js"; +import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ChatInputCommandInteraction, ColorResolvable, EmbedBuilder, Guild, StringSelectMenuInteraction } from "discord.js"; import RadioClient from "../../Client"; +import { station } from "../classes/Stations"; -export default async function play(client: RadioClient, interaction: any, guild: any, station: any) { +export default async function play(client: RadioClient, interaction: ChatInputCommandInteraction | StringSelectMenuInteraction | null, guild: Guild | null, station: station) { + if(!guild) return; let message: any = {}; + const radio = client.radio?.get(guild.id); const audioPlayer = client.streamer?.listen(station); radio.connection.subscribe(audioPlayer); diff --git a/src/client/funcs/saveState.ts b/src/client/funcs/saveState.ts index 0bba27a..5552f31 100644 --- a/src/client/funcs/saveState.ts +++ b/src/client/funcs/saveState.ts @@ -1,6 +1,7 @@ +import { Guild } from "discord.js"; import RadioClient from "../../Client"; -export default function saveState(client: RadioClient, guild: any, radio: any){ +export default function saveState(client: RadioClient, guild: Guild, radio: any){ if(!client.datastore) return; client.datastore.checkEntry(guild.id);