From f43cfcb370fb7bf2584ee86af0351bf24943c64b Mon Sep 17 00:00:00 2001 From: Marco Loewe Date: Sun, 29 Aug 2021 20:27:41 +0200 Subject: [PATCH] Added subscribe and unsubscribe commands to the buttsbot channel --- bot.js | 248 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 131 insertions(+), 117 deletions(-) diff --git a/bot.js b/bot.js index 8881f3a..a67ba0a 100644 --- a/bot.js +++ b/bot.js @@ -36,133 +36,147 @@ function isNumeric(n) { // Event handlers function onMessageHandler (channel, userstate, message, self) { - var trimmedMessage = message.trim(); + var message = message.trim(); - if (trimmedMessage.startsWith("!buttsbot")) { - if (userstate['room-id'] === userstate['user-id'] || userstate['mod']) { - - var parts = trimmedMessage.split(' '); - var action = parts[1]; - var value = parts[2]; + if (channel === "#butt5b0t") { + var messageChannel = "#" + userstate['username']; - switch (action) { - case "config": - client.say(channel, "Chance: " + config.chance + "% - Limit: " + config.limit + " - Word: " + config.word + " - Ignored Users: " + config.ignoredUsers.join(', ')); - break; - case "word": - config.word = value; - fs.writeFileSync('buttsbot.config', JSON.stringify(config)); - client.say(channel, "Word set to " + value); - break; - case "chance": - if (isNumeric(value)) { - if (value > 100) - value = 100; - if (value < 0) - value = 0; - config.chance = parseInt(value); - fs.writeFileSync('buttsbot.config', JSON.stringify(config)); - client.say(channel, "Chance set to " + value + "%"); - } else { - client.say(channel, "Expected a number, got " + value); - } - break; - case "ignore": - if (value && value !== "") { - console.log(`* ignore: value ok`); - value = value.replace("@", ""); - if (!config.ignoredUsers.includes(value)) { - console.log(`* ignore: value not already ignored`); - config.ignoredUsers.push(value); - fs.writeFileSync('buttsbot.config', JSON.stringify(config)); - } - client.say(channel, "User " + value + " will be ignored from now on."); - } else { - client.say(channel, "Excepted username, got empty value"); - } - break; - case "rmignore": - if (value && value !== "") { - console.log(`* rmignore: value ok`); - value = value.replace("@", ""); - if (config.ignoredUsers.includes(value)) { - console.log(`* rmignore: value ignored`); - - let index = config.ignoredUsers.indexOf(value); - config.ignoredUsers.splice(index, 1); + if (message === "!subscribe") { + client.join(messageChannel); + client.say(channel, "Joined channel " + messageChannel); + } - fs.writeFileSync('buttsbot.config', JSON.stringify(config)); - } - client.say(channel, "User " + value + " will no longer be ignored."); - } else { - client.say(channel, "Expected username, got empty value"); - } - break; - case "limit": - if (isNumeric(value)) { - config.limit = parseInt(value); - fs.writeFileSync('buttsbot.config', JSON.stringify(config)); - client.say(channel, "Set new limit: 1 butt per " + value + " words"); - } else { - client.say(channel, "Expected a number, got " + value); - } - break; - default: - client.say(channel, "Action '" + action + "' not recognized."); - } - } else { - console.log(`* buttsbot: User not authorized`); + if (message === "!unsibscribe") { + client.part(messageChannel); + client.say(channel, "Left channel " + messageChannel); } } else { if (self) return; - if (trimmedMessage.startsWith("!")) - return; - - if (config.ignoredUsers.includes(userstate['display-name']) || config.ignoredUsers.includes(userstate['username'])) { - console.log(`* User ${userstate['username']} is on the ignore list.`); - return; - } - - var number = Math.random() * 100; - if (number <= config.chance) { - - var words = trimmedMessage.split(' '); - var syllables = words.map(syllabify); - - var buttCount = Math.ceil(words.length / config.limit); - - var randomNumbersUsed = []; - - for (var i = 0; i < buttCount; i++) { - - var random = randomIntFromInterval(1, words.length); - - while (randomNumbersUsed.includes(random)) random = randomIntFromInterval(1, words.length); - - randomNumbersUsed.push(random); - - var word = syllables[random - 1]; - - if (word) { - var randomSyllable = randomIntFromInterval(1, word.length); - - var firstLetterOfSyllable = word[randomSyllable - 1][0]; - - word[randomSyllable - 1] = firstLetterOfSyllable == firstLetterOfSyllable.toUpperCase() ? config.word.toUpperCase() : config.word; + if (message.startsWith("!buttsbot")) { + if (userstate['room-id'] === userstate['user-id'] || userstate['mod']) { + + var parts = message.split(' '); + var action = parts[1]; + var value = parts[2]; + + switch (action) { + case "config": + client.say(channel, "Chance: " + config.chance + "% - Limit: " + config.limit + " - Word: " + config.word + " - Ignored Users: " + config.ignoredUsers.join(', ')); + break; + case "word": + config.word = value; + fs.writeFileSync('buttsbot.config', JSON.stringify(config)); + client.say(channel, "Word set to " + value); + break; + case "chance": + if (isNumeric(value)) { + if (value > 100) + value = 100; + if (value < 0) + value = 0; + config.chance = parseInt(value); + fs.writeFileSync('buttsbot.config', JSON.stringify(config)); + client.say(channel, "Chance set to " + value + "%"); + } else { + client.say(channel, "Expected a number, got " + value); + } + break; + case "ignore": + if (value && value !== "") { + console.log(`* ignore: value ok`); + value = value.replace("@", ""); + if (!config.ignoredUsers.includes(value)) { + console.log(`* ignore: value not already ignored`); + config.ignoredUsers.push(value); + fs.writeFileSync('buttsbot.config', JSON.stringify(config)); + } + client.say(channel, "User " + value + " will be ignored from now on."); + } else { + client.say(channel, "Excepted username, got empty value"); + } + break; + case "rmignore": + if (value && value !== "") { + console.log(`* rmignore: value ok`); + value = value.replace("@", ""); + if (config.ignoredUsers.includes(value)) { + console.log(`* rmignore: value ignored`); + + let index = config.ignoredUsers.indexOf(value); + config.ignoredUsers.splice(index, 1); + + fs.writeFileSync('buttsbot.config', JSON.stringify(config)); + } + client.say(channel, "User " + value + " will no longer be ignored."); + } else { + client.say(channel, "Expected username, got empty value"); + } + break; + case "limit": + if (isNumeric(value)) { + config.limit = parseInt(value); + fs.writeFileSync('buttsbot.config', JSON.stringify(config)); + client.say(channel, "Set new limit: 1 butt per " + value + " words"); + } else { + client.say(channel, "Expected a number, got " + value); + } + break; + default: + client.say(channel, "Action '" + action + "' not recognized."); } + } else { + console.log(`* buttsbot: User not authorized`); + } + } else { + if (message.startsWith("!")) + return; + + if (config.ignoredUsers.includes(userstate['display-name']) || config.ignoredUsers.includes(userstate['username'])) { + console.log(`* User ${userstate['username']} is on the ignore list.`); + return; + } + + var number = Math.random() * 100; + if (number <= config.chance) { + + var words = message.split(' '); + var syllables = words.map(syllabify); + + var buttCount = Math.ceil(words.length / config.limit); + + var randomNumbersUsed = []; + + for (var i = 0; i < buttCount; i++) { + + var random = randomIntFromInterval(1, words.length); + + while (randomNumbersUsed.includes(random)) random = randomIntFromInterval(1, words.length); + + randomNumbersUsed.push(random); + + var word = syllables[random - 1]; + + if (word) { + var randomSyllable = randomIntFromInterval(1, word.length); + + var firstLetterOfSyllable = word[randomSyllable - 1][0]; + + word[randomSyllable - 1] = firstLetterOfSyllable == firstLetterOfSyllable.toUpperCase() ? config.word.toUpperCase() : config.word; + } + } + + var newMessage = ""; + + syllables.forEach((s) => { + if (s != null) + newMessage += s.join('') + ' '; + }); + + client.say(channel, newMessage.trim()); } - - var newMessage = ""; - - syllables.forEach((s) => { - if (s != null) - newMessage += s.join('') + ' '; - }); - - client.say(channel, newMessage.trim()); } - } + } } function onConnectedHandler (addr, port) {