chatbot javascript

const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post(‘/webhook’, (req, res) => {
processWebhook(req.body);
res.send(‘OK’);
});

const apiURL = ‘YOUR_API_URL_HERE’;
const apiKey = ‘YOUR_API_PASSWORD_HERE’;
const apiHeaders = {
‘Content-Type’: ‘application/x-www-form-urlencoded’,
‘X-Key’: apiKey
};

const processWebhook = (body) => {
//process chat messages only
if (!body.hasOwnProperty(“type”) || body.type != “chat_message”) {
return;
}
for (let index = 0; index < body.data.length; index++) { let messageObject = body.data[index]; let msgContent = messageObject.message; //moderate messages if user is not moderator or higher if (!isChatStaff(messageObject.rank)) { if (containsBadWord(messageObject.message)) { //ban user fetch(apiURL, { method: ‘POST’, headers: apiHeaders, body: new URLSearchParams({ “action”: “ban”, “chatname”: messageObject.chat_name, “channel”: messageObject.channel, “userid”: messageObject.user_id, “reason”: “Inappropriate language”, “duration”: 6 //ban the user for 6 hours }) }); return; } } //analyze for command if (msgContent.startsWith(‘!’)) { let command; if (msgContent.includes(‘ ‘)) { command = msgContent.split(‘ ‘); command = command[0].substring(1); } else { command = msgContent.substring(1); } command = command.toLowerCase(); switch (command) { case “say”: processSayCommand(messageObject); break; case “8ball”: process8ballCommand(messageObject); break; default: return; } } } } const processSayCommand = (messageObject) => {
let messageToSay = messageObject.message.substring(5);
if (!messageToSay) {
return;
}
fetch(apiURL, {
method: ‘POST’,
headers: apiHeaders,
body: new URLSearchParams({
“action”: “sendmessage”,
“message”: messageToSay,
“username”: “Bot”,
“chatname”: messageObject.chat_name,
“channel”: messageObject.channel
})
});
}

const process8ballCommand = (messageObject) => {
let question = messageObject.message.substring(7);
if (!question) {
return;
}
const responses = [“It’s a no from me. :frown:”, “Not in a thousand years! :rofl:”, “Yes! :smile:”, “Of course. :nod:”, “No way! :smh:”, “Not a chance. :thumbsdown:”, “Signs point to yes. :thumbsup:”, “You bet! :cool:”, “Come on, everyone knows it’s a no. :lol:”, “You know it! :wink:”];
let randomNumber = Math.floor(Math.random() * 10);
fetch(apiURL, {
method: ‘POST’,
headers: apiHeaders,
body: new URLSearchParams({
“action”: “sendmessage”,
“message”: generateMention(messageObject) + responses[randomNumber],
“username”: “Bot”,
“chatname”: messageObject.chat_name,
“channel”: messageObject.channel
})
});
}

const generateMention = (messageObject) => {
return “@” + messageObject.user_id + “|” + encodeURIComponent(messageObject.nickname) + ” “;
}

const isChatStaff = (rank) => {
return [“moderator”, “manager”, “owner”].indexOf(rank) > -1;
}

const containsBadWord = (msg) => {
const badWords = [“test”, “bad”];
for (let index = 0; index < badWords.length; index++) { const badWord = badWords[index]; const spmsg = ” ” + msg + ” “; if (badWord == msg || spmsg.includes(” ” + badWord + ” “)) { return true; } } return false } const port = 3000; app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});