mirror of
				https://github.com/warengroup/eximiabots-radiox.git
				synced 2025-11-04 09:29:33 +00:00 
			
		
		
		
	Search Stations and large update
This commit is contained in:
		@@ -6,22 +6,10 @@ module.exports = {
 | 
				
			|||||||
    permission: 'none',
 | 
					    permission: 'none',
 | 
				
			||||||
    category: 'info',
 | 
					    category: 'info',
 | 
				
			||||||
    async execute(msg, args, client, Discord, prefix) {
 | 
					    async execute(msg, args, client, Discord, prefix) {
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        let developers = "";
 | 
					 | 
				
			||||||
        let user = "";
 | 
					 | 
				
			||||||
        for(i = 0; i < client.config.devId.length; i++){
 | 
					 | 
				
			||||||
            user = await client.users.fetch(client.config.devId[i]);
 | 
					 | 
				
			||||||
            if(i == client.config.devId.length-1){
 | 
					 | 
				
			||||||
                developers += user.tag;
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                developers += user.tag + " & ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        const embed = new Discord.MessageEmbed()
 | 
					        const embed = new Discord.MessageEmbed()
 | 
				
			||||||
            .setTitle(`Found a bug with ${client.user.username}?\nDM the core developer:`)
 | 
					            .setTitle(`Found a bug with ${client.user.username}?\nDM the core developer:`)
 | 
				
			||||||
            .setColor(client.config.embedColor)
 | 
					            .setColor(client.config.embedColor)
 | 
				
			||||||
            .setDescription(`${developers}\nOr join the support server: ${client.config.supportGuild}`)
 | 
					            .setDescription(`${client.developers}\nOr join the support server: ${client.config.supportGuild}`)
 | 
				
			||||||
            .setFooter('EximiaBots by Warén Media');
 | 
					            .setFooter('EximiaBots by Warén Media');
 | 
				
			||||||
        msg.channel.send(embed);
 | 
					        msg.channel.send(embed);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,15 +7,14 @@ module.exports = {
 | 
				
			|||||||
    category: 'music',
 | 
					    category: 'music',
 | 
				
			||||||
    async execute(msg, args, client, Discord, prefix) {
 | 
					    async execute(msg, args, client, Discord, prefix) {
 | 
				
			||||||
        const radio = client.radio.get(msg.guild.id);
 | 
					        const radio = client.radio.get(msg.guild.id);
 | 
				
			||||||
        if (!radio) return msg.channel.send('<:redx:674263474704220182> There is nothing playing.');
 | 
					        if (!radio || !radio.playing) return msg.channel.send('<:redx:674263474704220182> There is nothing playing.');
 | 
				
			||||||
        if (!radio.playing) return msg.channel.send('<:redx:674263474704220182> There is nothing playing.');
 | 
					 | 
				
			||||||
        radio.time = radio.connection.dispatcher.streamTime;
 | 
					        radio.time = radio.connection.dispatcher.streamTime;
 | 
				
			||||||
        const completed = (radio.time.toFixed(0));
 | 
					        const completed = (radio.time.toFixed(0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const embed = new Discord.MessageEmbed()
 | 
					        const embed = new Discord.MessageEmbed()
 | 
				
			||||||
            .setTitle("<a:aNotes:674602408105476106> Now Playing")
 | 
					            .setTitle("<a:aNotes:674602408105476106> Now Playing")
 | 
				
			||||||
            .setColor(client.config.embedColor)
 | 
					            .setColor(client.config.embedColor)
 | 
				
			||||||
            .setDescription(`**${client.stations[radio.station].name}** \n Owner: ${client.stations[radio.station].owner} \n\`${client.funcs.msToTime(completed, "hh:mm:ss")}\``)
 | 
					            .setDescription(`**${radio.station.name}** \n Owner: ${radio.station.owner} \n\`${client.funcs.msToTime(completed, "hh:mm:ss")}\``)
 | 
				
			||||||
            .setFooter('EximiaBots by Warén Media');
 | 
					            .setFooter('EximiaBots by Warén Media');
 | 
				
			||||||
        return msg.channel.send(embed);
 | 
					        return msg.channel.send(embed);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ module.exports = {
 | 
				
			|||||||
	permission: 'none',
 | 
						permission: 'none',
 | 
				
			||||||
	category: 'music',
 | 
						category: 'music',
 | 
				
			||||||
	async execute(msg, args, client, Discord, prefix) {
 | 
						async execute(msg, args, client, Discord, prefix) {
 | 
				
			||||||
		const station = args[1] ? args[1].replace(/<(.+)>/g, "$1") : "";
 | 
							let url = args[1] ? args[1].replace(/<(.+)>/g, "$1") : "";
 | 
				
			||||||
		const radio = client.radio.get(msg.guild.id);
 | 
							const radio = client.radio.get(msg.guild.id);
 | 
				
			||||||
		const voiceChannel = msg.member.voice.channel;
 | 
							const voiceChannel = msg.member.voice.channel;
 | 
				
			||||||
		if (!radio) {
 | 
							if (!radio) {
 | 
				
			||||||
@@ -22,29 +22,46 @@ module.exports = {
 | 
				
			|||||||
		if (!permissions.has('SPEAK')) {
 | 
							if (!permissions.has('SPEAK')) {
 | 
				
			||||||
			return msg.channel.send('<:redx:674263474704220182> I cannot speak in your voice channel, make sure I have the proper permissions!');
 | 
								return msg.channel.send('<:redx:674263474704220182> I cannot speak in your voice channel, make sure I have the proper permissions!');
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							let station;
 | 
				
			||||||
 | 
							const number = parseInt(args[1] - 1);
 | 
				
			||||||
 | 
							if (url.startsWith('http')) {
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							} else if (!isNaN(number)) {
 | 
				
			||||||
 | 
								if (number > client.stations.length - 1) {
 | 
				
			||||||
 | 
									return radio.textChannel.send('<:redx:674263474704220182> no such station!');
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									url = client.stations[number].stream[client.stations[number].stream.default];
 | 
				
			||||||
 | 
									station = client.stations[number];
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								const sstation = await client.funcs.searchStation(args.slice(1).join(' '), client);
 | 
				
			||||||
 | 
								if (sstation === false) return msg.channel.send('No stations found!');
 | 
				
			||||||
 | 
								url = sstation.stream[sstation.stream.default];
 | 
				
			||||||
 | 
								station = sstation
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (radio) {
 | 
							if (radio) {
 | 
				
			||||||
			radio.connection.dispatcher.destroy();
 | 
								radio.connection.dispatcher.destroy();
 | 
				
			||||||
            radio.station = station;
 | 
								radio.station = station;
 | 
				
			||||||
			client.funcs.play(msg.guild, client, station);
 | 
								client.funcs.play(msg.guild, client, url);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        const construct = {
 | 
							const construct = {
 | 
				
			||||||
			textChannel: msg.channel,
 | 
								textChannel: msg.channel,
 | 
				
			||||||
			voiceChannel: voiceChannel,
 | 
								voiceChannel: voiceChannel,
 | 
				
			||||||
			connection: null,
 | 
								connection: null,
 | 
				
			||||||
			playing: false,
 | 
								playing: false,
 | 
				
			||||||
			station: station-1,
 | 
								station: station,
 | 
				
			||||||
			name: null,
 | 
					 | 
				
			||||||
			volume: client.config.volume,
 | 
								volume: client.config.volume,
 | 
				
			||||||
 | 
								time: null
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
		client.radio.set(msg.guild.id, construct);
 | 
							client.radio.set(msg.guild.id, construct);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
		try {
 | 
							try {
 | 
				
			||||||
			const connection = await voiceChannel.join();
 | 
								const connection = await voiceChannel.join();
 | 
				
			||||||
			construct.connection = connection;
 | 
								construct.connection = connection;
 | 
				
			||||||
			client.funcs.play(msg.guild, client, station);
 | 
								client.funcs.play(msg.guild, client, url);
 | 
				
			||||||
		} catch (error) {
 | 
							} catch (error) {
 | 
				
			||||||
			client.radio.delete(msg.guild.id);
 | 
								client.radio.delete(msg.guild.id);
 | 
				
			||||||
			client.debug_channel.send("Error with connecting to voice channel: " + error);
 | 
								client.debug_channel.send("Error with connecting to voice channel: " + error);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,17 +3,27 @@ const fetch = require('node-fetch');
 | 
				
			|||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    name: 'ready',
 | 
					    name: 'ready',
 | 
				
			||||||
    async execute(client, Discord) {
 | 
					    async execute(client, Discord) {
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        console.log('RadioX');
 | 
					        console.log('RadioX');
 | 
				
			||||||
        console.log('We will bring you finnish radio to your discord server');
 | 
					        console.log('We will bring you finnish radio to your discord server');
 | 
				
			||||||
        console.log('(c)2020 EximiaBots by Warén Media / Christer Warén & MatteZ02');
 | 
					        console.log('(c)2020 EximiaBots by Warén Media / Christer Warén & MatteZ02');
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
 | 
					        let user = "";
 | 
				
			||||||
 | 
					        for (i = 0; i < client.config.devId.length; i++) {
 | 
				
			||||||
 | 
					            user = await client.users.fetch(client.config.devId[i]);
 | 
				
			||||||
 | 
					            if (i == client.config.devId.length - 1) {
 | 
				
			||||||
 | 
					                client.developers += user.tag;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                client.developers += user.tag + " & ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        client.stations = await fetch('https://gitea.cwinfo.org/cwchristerw/radio/raw/branch/master/playlist.json')
 | 
					        client.stations = await fetch('https://gitea.cwinfo.org/cwchristerw/radio/raw/branch/master/playlist.json')
 | 
				
			||||||
            .then(res => res.json());
 | 
					            .then(res => res.json());
 | 
				
			||||||
            
 | 
					
 | 
				
			||||||
        setInterval(async () => {
 | 
					        setInterval(async () => {
 | 
				
			||||||
            client.stations = await fetch('https://gitea.cwinfo.org/cwchristerw/radio/raw/branch/master/playlist.json')
 | 
					            client.stations = await fetch('https://gitea.cwinfo.org/cwchristerw/radio/raw/branch/master/playlist.json')
 | 
				
			||||||
                .then(res => res.json());
 | 
					                .then(res => res.json());
 | 
				
			||||||
        }, 3600);
 | 
					        }, 3600000);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -8,7 +8,6 @@ module.exports = {
 | 
				
			|||||||
            if (newState.member.voice.channel === null) {
 | 
					            if (newState.member.voice.channel === null) {
 | 
				
			||||||
                radio.songs = [];
 | 
					                radio.songs = [];
 | 
				
			||||||
                radio.looping = false;
 | 
					                radio.looping = false;
 | 
				
			||||||
                radio.endReason = "manual disconnect";
 | 
					 | 
				
			||||||
                return client.radio.delete(newState.guild.id);
 | 
					                return client.radio.delete(newState.guild.id);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (newState.member.voice.channel !== radio.voiceChannel) {
 | 
					            if (newState.member.voice.channel !== radio.voiceChannel) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,24 +1,6 @@
 | 
				
			|||||||
module.exports = async function (guild, client, station) {
 | 
					module.exports = async function (guild, client, url) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const radio = client.radio.get(guild.id);
 | 
					    const radio = client.radio.get(guild.id);
 | 
				
			||||||
    let url = "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (isNaN(station)) {
 | 
					 | 
				
			||||||
        radio.voiceChannel.leave();
 | 
					 | 
				
			||||||
        return radio.textChannel.send('<:redx:674263474704220182> An error has occured while playing radio!');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (station - 1 > client.stations.length - 1) {
 | 
					 | 
				
			||||||
        radio.voiceChannel.leave();
 | 
					 | 
				
			||||||
        return radio.textChannel.send('<:redx:674263474704220182> An error has occured while playing radio!');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    url = client.stations[station - 1].stream[client.stations[station - 1].stream.default];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!url) {
 | 
					 | 
				
			||||||
        radio.voiceChannel.leave();
 | 
					 | 
				
			||||||
        return radio.textChannel.send('<:redx:674263474704220182> An error has occured while playing radio!');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const dispatcher = radio.connection
 | 
					    const dispatcher = radio.connection
 | 
				
			||||||
        .play(url, { bitrate: 1024, passes: 10, volume: 1, highWaterMark: 1 << 25 })
 | 
					        .play(url, { bitrate: 1024, passes: 10, volume: 1, highWaterMark: 1 << 25 })
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								struct/funcs/searchStation.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								struct/funcs/searchStation.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					module.exports = function (key, client) {
 | 
				
			||||||
 | 
					    let foundStations = [];
 | 
				
			||||||
 | 
					    if (!key) return false;
 | 
				
			||||||
 | 
					    const probabilityIncrement = 100 / key.split(' ').length / 2;
 | 
				
			||||||
 | 
					    for (let i = 0; i < key.split(' ').length; i++) {
 | 
				
			||||||
 | 
					        client.stations.filter(x => x.name.toUpperCase().includes(key.split(' ')[i].toUpperCase()) || x === key).forEach(x => foundStations.push({ station: x, name: x.name, probability: probabilityIncrement }));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (foundStations.length === 0) return false;
 | 
				
			||||||
 | 
					    for (let i = 0; i < foundStations.length; i++) {
 | 
				
			||||||
 | 
					        for (let j = 0; j < foundStations.length; j++) {
 | 
				
			||||||
 | 
					            if (foundStations[i] === foundStations[j] && i !== j) foundStations.splice(i, 1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for (let i = 0; i < foundStations.length; i++) {
 | 
				
			||||||
 | 
					        if (foundStations[i].name.length > key.length) {
 | 
				
			||||||
 | 
					            foundStations[i].probability -= (foundStations[i].name.split(' ').length - key.split(' ').length) * (probabilityIncrement * 0.5);
 | 
				
			||||||
 | 
					        } else if (foundStations[i].name.length === key.length) {
 | 
				
			||||||
 | 
					            foundStations[i].probability += (probabilityIncrement * 0.9);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (let j = 0; j < key.split(' ').length; j++) {
 | 
				
			||||||
 | 
					            if (!foundStations[i].name.toUpperCase().includes(key.toUpperCase().split(' ')[j])) {
 | 
				
			||||||
 | 
					                foundStations[i].probability -= (probabilityIncrement * 0.5);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    let highestProbabilityStation;
 | 
				
			||||||
 | 
					    console.log('Stations found: ', foundStations);
 | 
				
			||||||
 | 
					    for (let i = 0; i < foundStations.length; i++) {
 | 
				
			||||||
 | 
					        if (!highestProbabilityStation || highestProbabilityStation.probability < foundStations[i].probability) highestProbabilityStation = foundStations[i];
 | 
				
			||||||
 | 
					        if (highestProbabilityStation && highestProbabilityStation.probability === foundStations[i].probability) {
 | 
				
			||||||
 | 
					            highestProbabilityStation = foundStations[i].station;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return highestProbabilityStation;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Reference in New Issue
	
	Block a user