require('dotenv').config(); const tmi = require('tmi.js'); const https = require('https'); const options = { hostname: 'api.twitch.tv', port: 443, path: '/kraken/streams/149689994', method: 'GET', headers: { "client-id": "gp762nuuoqcoxypju8c569th9wz7q5", "Authorization": ("Bearer " + process.env.API_BEARER), "Accept": "application/vnd.twitchtv.v5+json" } } // Define configuration options const opts = { identity: { username: "HighlightMarkerBot", password: process.env.IRC_OAUTH }, channels: [ "yiggalow" ] }; // Create a client with our options const client = new tmi.client(opts); // Register our event handlers (defined below) client.on('message', onMessageHandler); client.on('connected', onConnectedHandler); // Connect to Twitch: client.connect(); // Called every time a message comes in function onMessageHandler(target, context, msg, self) { if (self) { return; } // Ignore messages from the bot // Remove whitespace from chat message const commandName = msg.trim(); // If the command is known, let's execute it if (commandName === '!dice') { const num = rollDice(); client.say(target, `You rolled a ${num}`); console.log(`* Executed ${commandName} command`); } else if (commandName === '!uptime') { let stream; let stream_time; const req = https.request(options, res => { let data = []; res.on('data', chunk => { data.push(chunk); }); res.on('end', () => { stream = JSON.parse(Buffer.concat(data).toString()); if (!stream || !stream['stream'] || !stream['stream']['created_at']) { client.say(target, `Uptime: not available`); return; } stream_time = stream['stream']['created_at']; const dateStart = new Date(stream_time); const dateEnd = new Date(); const timeDifference = Math.abs(dateEnd - dateStart); client.say(target, `Uptime: ${getTimeInFormat(timeDifference)}`); console.log(`* Executed ${commandName} command`); }); }) req.end(); } else { console.log(`* Unknown command ${commandName}`); } } function getTimeInFormat(timeInMillis) { let hours = Math.floor(timeInMillis/1000/60/60); timeInMillis -= hours*1000*60*60 let minutes = Math.floor((timeInMillis)/1000/60); timeInMillis -= minutes*1000*60 let seconds = Math.floor((timeInMillis)/1000); return hours + " Stunde/n " + minutes + " Minute/n " + seconds + " Sekunde/n" } // Function called when the "dice" command is issued function rollDice() { const sides = 6; return Math.floor(Math.random() * sides) + 1; } // Called every time the bot connects to Twitch chat function onConnectedHandler(addr, port) { console.log(`* Connected to ${addr}:${port}`); }