Added Artist/Song library
This commit is contained in:
parent
7015fc1671
commit
68f821b933
5 changed files with 134 additions and 6 deletions
36
index.js
36
index.js
|
@ -3,28 +3,50 @@ const irc = require('irc-upd')
|
||||||
const Db = require('./libs/Db')
|
const Db = require('./libs/Db')
|
||||||
const models = require('./models').models
|
const models = require('./models').models
|
||||||
const Help = require('./libs/Help')
|
const Help = require('./libs/Help')
|
||||||
|
const ArtistSong = require('./libs/ArtistSong')
|
||||||
const allowedCommands = ['!artist', '!song', '!stats', '!when', '!help', '!notifications']
|
const allowedCommands = ['!artist', '!song', '!stats', '!when', '!help', '!notifications']
|
||||||
|
|
||||||
|
// Init des librairies
|
||||||
const db = new Db(models)
|
const db = new Db(models)
|
||||||
|
const artistSong = new ArtistSong(models)
|
||||||
|
|
||||||
|
// Stockage du morceau en cours de lecture
|
||||||
|
let currentSong = {
|
||||||
|
artist: null,
|
||||||
|
title: null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialisation du bot IRC
|
||||||
const bot = new irc.Client(process.env.IRC_SERVER, process.env.IRC_NICKNAME, {
|
const bot = new irc.Client(process.env.IRC_SERVER, process.env.IRC_NICKNAME, {
|
||||||
userName: process.env.IRC_USER_NAME,
|
userName: process.env.IRC_USER_NAME,
|
||||||
realName: process.env.IRC_REAL_NAME,
|
realName: process.env.IRC_REAL_NAME,
|
||||||
password: process.env.IRC_PASSWORD,
|
password: process.env.IRC_PASSWORD,
|
||||||
channels: [process.env.IRC_CHANNEL]
|
channels: [process.env.IRC_CHANNEL]
|
||||||
})
|
})
|
||||||
|
// Initialisation du stream radion
|
||||||
const stream = radio.createReadStream(process.env.STREAM_URL)
|
const stream = radio.createReadStream(process.env.STREAM_URL)
|
||||||
|
|
||||||
// Error events
|
// Gestion des erreurs du bot IRC
|
||||||
bot.addListener('error', function (message) {
|
bot.addListener('error', function (message) {
|
||||||
console.error('ERR:', message)
|
console.error('ERR:', message)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction permettant de publier un message sur IRC
|
||||||
|
* @param {String} where
|
||||||
|
* @param {String} what
|
||||||
|
*/
|
||||||
const botSay = (where, what) => {
|
const botSay = (where, what) => {
|
||||||
bot.say(where, what)
|
bot.say(where, what)
|
||||||
}
|
}
|
||||||
|
|
||||||
const actions = (where, message) => {
|
/**
|
||||||
|
* Gestion des actions
|
||||||
|
* @param {String} where
|
||||||
|
* @param {String} message
|
||||||
|
* @param {String} from
|
||||||
|
*/
|
||||||
|
const actions = (where, message, from) => {
|
||||||
const exploded = message.split(' ')
|
const exploded = message.split(' ')
|
||||||
|
|
||||||
// Le message publié est pour le bot
|
// Le message publié est pour le bot
|
||||||
|
@ -34,6 +56,7 @@ const actions = (where, message) => {
|
||||||
switch (exploded[1]) {
|
switch (exploded[1]) {
|
||||||
case '!artist':
|
case '!artist':
|
||||||
case '!song':
|
case '!song':
|
||||||
|
artistSong.action(exploded[1].replace('!', ''), botSay, from, currentSong, exploded)
|
||||||
break
|
break
|
||||||
case '!help':
|
case '!help':
|
||||||
Help.show(botSay, where, exploded)
|
Help.show(botSay, where, exploded)
|
||||||
|
@ -47,11 +70,11 @@ const actions = (where, message) => {
|
||||||
|
|
||||||
// Listener for public message
|
// Listener for public message
|
||||||
bot.addListener(`message${process.env.IRC_CHANNEL}`, function (from, to, message) {
|
bot.addListener(`message${process.env.IRC_CHANNEL}`, function (from, to, message) {
|
||||||
actions(process.env.IRC_CHANNEL, message.args.splice(1).join(' '))
|
actions(process.env.IRC_CHANNEL, message.args.splice(1).join(' '), from)
|
||||||
})
|
})
|
||||||
// Listener for private message
|
// Listener for private message
|
||||||
bot.addListener('pm', function (from, to, message) {
|
bot.addListener('pm', function (from, to, message) {
|
||||||
actions(from, message.args.join(' '))
|
actions(from, message.args.join(' '), from)
|
||||||
})
|
})
|
||||||
|
|
||||||
stream.on('connect', function () {
|
stream.on('connect', function () {
|
||||||
|
@ -75,6 +98,11 @@ stream.on('metadata', function (data) {
|
||||||
const artist = splitted[0]
|
const artist = splitted[0]
|
||||||
const title = splitted[1]
|
const title = splitted[1]
|
||||||
|
|
||||||
|
currentSong = {
|
||||||
|
title: title,
|
||||||
|
artist: artist
|
||||||
|
}
|
||||||
|
|
||||||
// Save song for history
|
// Save song for history
|
||||||
db.saveSong({
|
db.saveSong({
|
||||||
radio: process.env.RADIO_ALIAS,
|
radio: process.env.RADIO_ALIAS,
|
||||||
|
|
96
libs/ArtistSong.js
Normal file
96
libs/ArtistSong.js
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
class ArtistSong {
|
||||||
|
constructor (models) {
|
||||||
|
this.models = models
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Point d'entrée pour l'ajout suppression de favoris
|
||||||
|
* @param {String} type
|
||||||
|
* @param {Function} botSay
|
||||||
|
* @param {String} from
|
||||||
|
* @param {Object} currentSong
|
||||||
|
* @param {Array} line
|
||||||
|
*/
|
||||||
|
action (type, botSay, from, currentSong, line) {
|
||||||
|
let value = currentSong[type]
|
||||||
|
|
||||||
|
if (line.length > 3) {
|
||||||
|
value = ''
|
||||||
|
for (let i = 3; i < line.length; i += 1) {
|
||||||
|
value += ' ' + line[i]
|
||||||
|
}
|
||||||
|
value = value.replace(' ', '')
|
||||||
|
}
|
||||||
|
|
||||||
|
const item = {
|
||||||
|
user: from,
|
||||||
|
type: type,
|
||||||
|
value: value
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (line[2]) {
|
||||||
|
case 'add':
|
||||||
|
this.add(botSay, from, item)
|
||||||
|
break
|
||||||
|
case 'del':
|
||||||
|
this.delete(botSay, from, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction permettant d'ajouter un favoris
|
||||||
|
* @param {Function} botSay
|
||||||
|
* @param {String} from
|
||||||
|
* @param {Object} item
|
||||||
|
*/
|
||||||
|
add (botSay, from, item) {
|
||||||
|
this.models.Notifications
|
||||||
|
.findOne(item)
|
||||||
|
.then(notification => {
|
||||||
|
if (!notification) {
|
||||||
|
const newItem = new this.models.Notifications(item)
|
||||||
|
newItem.save((err, res) => {
|
||||||
|
if (err) {
|
||||||
|
console.log('ERR:', err)
|
||||||
|
} else {
|
||||||
|
botSay(from, `${item.value} correctement ajouté dans vos favoris`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
botSay(from, `${item.value} est déjà dans tes favoris, c'est moche de vieillir...`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('ERR:', err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction permettant de supprimer un favoris
|
||||||
|
* @param {Function} botSay
|
||||||
|
* @param {String} from
|
||||||
|
* @param {Object} item
|
||||||
|
*/
|
||||||
|
delete (botSay, from, item) {
|
||||||
|
this.models.Notifications
|
||||||
|
.findOne(item)
|
||||||
|
.then(notification => {
|
||||||
|
if (notification) {
|
||||||
|
notification.remove((err, res) => {
|
||||||
|
if (err) {
|
||||||
|
console.log('ERR:', err)
|
||||||
|
} else {
|
||||||
|
botSay(from, `${item.value} correctement retiré dans vos favoris`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
botSay(from, `${item.value} n'est dpas dans tes favoris, c'est moche de vieillir...`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('ERR:', err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ArtistSong
|
|
@ -4,6 +4,10 @@ class Db {
|
||||||
this.models = models
|
this.models = models
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction sauvegardant en historique le morceau en cours de lecture
|
||||||
|
* @param {Object} value
|
||||||
|
*/
|
||||||
saveSong (value) {
|
saveSong (value) {
|
||||||
// Find if previous song was the same (on bot reload)
|
// Find if previous song was the same (on bot reload)
|
||||||
this.models.Histories
|
this.models.Histories
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module.exports = mongoose => {
|
module.exports = mongoose => {
|
||||||
const schema = new mongoose.Schema({
|
const schema = new mongoose.Schema({
|
||||||
user: String,
|
user: String,
|
||||||
property: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
enum: ['artist', 'title']
|
enum: ['artist', 'title']
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@ mongoose.set('useNewUrlParser', true)
|
||||||
mongoose.set('useUnifiedTopology', true)
|
mongoose.set('useUnifiedTopology', true)
|
||||||
mongoose.set('useFindAndModify', false)
|
mongoose.set('useFindAndModify', false)
|
||||||
mongoose.set('useCreateIndex', true)
|
mongoose.set('useCreateIndex', true)
|
||||||
mongoose.set('debug', false)
|
mongoose.set('debug', true)
|
||||||
|
|
||||||
mongoose.connect(process.env.MONGO_URL)
|
mongoose.connect(process.env.MONGO_URL)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue