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 models = require('./models').models
|
||||
const Help = require('./libs/Help')
|
||||
const ArtistSong = require('./libs/ArtistSong')
|
||||
const allowedCommands = ['!artist', '!song', '!stats', '!when', '!help', '!notifications']
|
||||
|
||||
// Init des librairies
|
||||
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, {
|
||||
userName: process.env.IRC_USER_NAME,
|
||||
realName: process.env.IRC_REAL_NAME,
|
||||
password: process.env.IRC_PASSWORD,
|
||||
channels: [process.env.IRC_CHANNEL]
|
||||
})
|
||||
// Initialisation du stream radion
|
||||
const stream = radio.createReadStream(process.env.STREAM_URL)
|
||||
|
||||
// Error events
|
||||
// Gestion des erreurs du bot IRC
|
||||
bot.addListener('error', function (message) {
|
||||
console.error('ERR:', message)
|
||||
})
|
||||
|
||||
/**
|
||||
* Fonction permettant de publier un message sur IRC
|
||||
* @param {String} where
|
||||
* @param {String} what
|
||||
*/
|
||||
const botSay = (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(' ')
|
||||
|
||||
// Le message publié est pour le bot
|
||||
|
@ -34,6 +56,7 @@ const actions = (where, message) => {
|
|||
switch (exploded[1]) {
|
||||
case '!artist':
|
||||
case '!song':
|
||||
artistSong.action(exploded[1].replace('!', ''), botSay, from, currentSong, exploded)
|
||||
break
|
||||
case '!help':
|
||||
Help.show(botSay, where, exploded)
|
||||
|
@ -47,11 +70,11 @@ const actions = (where, message) => {
|
|||
|
||||
// Listener for public 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
|
||||
bot.addListener('pm', function (from, to, message) {
|
||||
actions(from, message.args.join(' '))
|
||||
actions(from, message.args.join(' '), from)
|
||||
})
|
||||
|
||||
stream.on('connect', function () {
|
||||
|
@ -75,6 +98,11 @@ stream.on('metadata', function (data) {
|
|||
const artist = splitted[0]
|
||||
const title = splitted[1]
|
||||
|
||||
currentSong = {
|
||||
title: title,
|
||||
artist: artist
|
||||
}
|
||||
|
||||
// Save song for history
|
||||
db.saveSong({
|
||||
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
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction sauvegardant en historique le morceau en cours de lecture
|
||||
* @param {Object} value
|
||||
*/
|
||||
saveSong (value) {
|
||||
// Find if previous song was the same (on bot reload)
|
||||
this.models.Histories
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
module.exports = mongoose => {
|
||||
const schema = new mongoose.Schema({
|
||||
user: String,
|
||||
property: {
|
||||
type: {
|
||||
type: String,
|
||||
enum: ['artist', 'title']
|
||||
},
|
||||
|
|
|
@ -8,7 +8,7 @@ mongoose.set('useNewUrlParser', true)
|
|||
mongoose.set('useUnifiedTopology', true)
|
||||
mongoose.set('useFindAndModify', false)
|
||||
mongoose.set('useCreateIndex', true)
|
||||
mongoose.set('debug', false)
|
||||
mongoose.set('debug', true)
|
||||
|
||||
mongoose.connect(process.env.MONGO_URL)
|
||||
|
||||
|
|
Loading…
Reference in a new issue