Twitch_Highlight_Marker/bot.js

171 lines
5.2 KiB
JavaScript
Raw Normal View History

require('dotenv').config();
2021-04-19 11:43:54 +00:00
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"
}
}
2021-04-19 11:43:54 +00:00
// Define configuration options
const opts = {
identity: {
username: "HighlightMarkerBot",
password: process.env.IRC_OAUTH
2021-04-19 11:43:54 +00:00
},
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') {
console.log(`* Executed ${commandName} command`);
2021-04-19 11:43:54 +00:00
const num = rollDice();
client.say(target, `You rolled a ${num}`);
} else if (commandName === '!uptime') {
console.log(`* Executed ${commandName} command`);
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 if (commandName.startsWith('!mark')) {
console.log(`* Executed ${commandName} command`);
let streamer;
let stream;
let stream_id;
let stream_game;
let description;
let username;
let timestamp;
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, `You can't do that now!`);
return;
}
const stream_time = stream['stream']['created_at'];
const dateStart = new Date(stream_time);
const dateEnd = new Date();
const timeDifference = Math.abs(dateEnd - dateStart);
// streamer | stream_id | game | description | timestamp | username
streamer = "yiggalow";
stream_id = stream['stream']['_id'];
stream_game = stream['stream']['game'];
timestamp = getTimeInHHMMSS(timeDifference);
description = commandName.substr(6,commandName.length-1);
username = context["username"];
const json_for_sql = {
access_key: process.env.ACCESS_KEY,
streamer: streamer,
stream_id: stream_id,
stream_game: stream_game,
timestamp: timestamp,
description: description,
username: username
};
client.say(target, `Mark has been tracked for the next highlight video! Thank you for your submission ${username}. `);
});
})
req.end();
2021-04-19 11:43:54 +00:00
} else {
console.log(`* Unknown command ${commandName}`);
}
}
function getTimeInHHMMSS(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+":"+minutes+":"+seconds;
}
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"
}
2021-04-19 11:43:54 +00:00
// 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}`);
}