NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name OG-TelegramAlert
// @description Create telegram alert and fire web notification on Ogame when an attacke/spy is detected.
// @include *.ogame*gameforge.com/game/index.php*
// @author Gentoos
// @copyright 2023, Gentoos
// @license MIT
// @version 1.0.1
// @updateURL https://openuserjs.org/meta/Waniarik/OG-SoundAlert.meta.js
// @downloadURL https://openuserjs.org/install/Waniarik/OG-SoundAlert.user.js
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// ==/UserScript==
// ==OpenUserJS==
// @author Gentoos
// ==/OpenUserJS==
(function () {
'use strict';
/* **************************************************************/
/* ******************** PARAMETERS ******************************/
/* **************************************************************/
var sa_minutes = 1; // something superior to 1. A random seconds will be added to it.
var sa_random = 20; // random pick seconds within this number
var sa_volume = 40; // volume of sound in percentage
/* **************************************************************/
/* ********************** SCRIPT ********************************/
/* **************************************************************/
var $ = unsafeWindow.$;
var sa_time = ((sa_minutes * 60) + (Math.floor(Math.random() * sa_random))) * 1000;
var sa_context = new AudioContext();
var sa_notificationDetails = {
title: 'Ogame Alert',
text: 'You are under attack on Ogame',
timeout: 15000,
icon: 'https://is4-ssl.mzstatic.com/image/thumb/Purple91/v4/31/2d/98/312d98f7-b935-69b3-596e-2159d13c0865/mzl.kxpdlefq.png/246x0w.jpg',
onclick: function () {
window.focus();
}
};
function sa_reload() {
console.log("Reload with " + sa_time + " seconds");
setTimeout(function () {
if (GM_getValue('sa_toggleOn') === true && (/component=overview/.test(location.href))) {
location.reload();
}
}, sa_time);
}
function sa_checkAlerts() {
let token = "";
let chat_id = "";
let message = "You're under attack";
var url = "https://api.telegram.org/bot" + token + "/sendMessage?chat_id=" + chat_id + "&text=" + message + "&parse_mode=html";
var oReq = new XMLHttpRequest();
if ($('#attack_alert').hasClass("soon") || $('#attack_alert').hasClass("today")) {
var events = document.getElementsByClassName('eventFleet');
var attack = false;
for (let i = 0; i < events.length; i++) {
if (events[i].innerHTML.match('hostile') && events[i].getAttribute('data-mission-type') == 1) {
if ($('#attack_alert').hasClass("soon")) {
oReq.open("GET", url, true);
oReq.send();
console.log("You're under attack");
} else if ($('#attack_alert').hasClass("today")) {
oReq.open("GET", url, true);
oReq.send();
console.log("You're under attack");
}
attack = true;
break;
}
}
if (attack === false) {
// Spy
}
}
}
/*--- Cross-browser Shim code follows:*/
function sa_shim_GM_notification() {
if (typeof GM_notification === "function") {
return;
}
window.GM_notification = function (ntcOptions) {
checkPermission();
function askPermission() {
Notification.requestPermission(function (permission) {
console.log("New permission: ", permission);
checkPermission();
});
}
function checkPermission() {
if (Notification.permission === "granted") {
fireNotice();
}
else if (Notification.permission === "denied") {
console.log("User has denied notifications for this page/site!");
askPermission();
}
else {
askPermission();
}
}
function fireNotice() {
if (!ntcOptions.title) {
console.log("Title is required for notification");
return;
}
if (ntcOptions.text && !ntcOptions.body) {
ntcOptions.body = ntcOptions.text;
}
var ntfctn = new Notification(ntcOptions.title, ntcOptions);
if (ntcOptions.onclick) {
ntfctn.onclick = ntcOptions.onclick;
}
if (ntcOptions.timeout) {
setTimeout(function () {
ntfctn.close();
}, ntcOptions.timeout);
}
}
}
}
/* **************************************************************/
/* ********************* STARTUP ********************************/
/* **************************************************************/
function launch() {
sa_shim_GM_notification();
sa_checkAlerts();
sa_reload();
}
/* **************************************************************/
/* *********************** GUI **********************************/
/* **************************************************************/
function sa_drawMenu() {}
unsafeWindow.sa_handleClick = function (cb) {
GM_setValue('sa_toggleOn', cb.checked);
let isToggle = GM_getValue("sa_toggleOn");
if (!isToggle) {
// Switched off
}
if (isToggle) {
// Switched on
launch();
}
}
if (!/page=empire/.test(location.href)) {
var aff_option = `
<span class="menu_icon">
<label class="tooltipRight js_hideTipOnMobile sa-switch">
<input id="cbActiveSA" type="checkbox" onclick="sa_handleClick(this);">
<span class="sa-slider round"></span>
</label>
</span>
<a id="drawOptionSA" class="menubutton" href="#" accesskey="" target="_self">
<span class="textlabel">Alert
</span></a>`;
var tableau = document.createElement("li");
tableau.innerHTML = aff_option;
/*tableau.className += "custom-option";*/
tableau.id = 'option-SoundAlert';
document.getElementById('menuTable').appendChild(tableau);
let isToggle = GM_getValue("sa_toggleOn");
$("#cbActiveSA").prop('checked', isToggle ? isToggle : false);
document.getElementById('drawOptionSA').addEventListener("click", function (event) {
sa_drawMenu();
}, true);
if (isToggle) {
launch();
}
}
/* **************************************************************/
/* ************************ CSS *********************************/
/* **************************************************************/
GM_addStyle(`
/*** THEME ***/
#menuTable > .custom-option {
margin-top: 10px !important;
margin-bottom: 10px !important;
}
#menuTable > .custom-option ~ .custom-option {
margin-top: -10px !important;
margin-bottom: 10px !important;
}
.custom-option a span {
color: #68a2ff !important;
}
/*** TOGGLE SWITCH ***/
.sa-switch {
position: relative;
display: inline-block;
width: 30px;
height: 17px;
margin-top: 5px;
}
.sa-switch input {
opacity: 0;
width: 0;
height: 0;
}
.sa-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ff4949;
-webkit-transition: .4s;
transition: .4s;
}
.sa-slider:before {
position: absolute;
content: "";
height: 13px;
width: 13px;
left: 2px;
bottom: 2px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .sa-slider {
background-color: #0664b0;
}
input:focus + .sa-slider {
box-shadow: 0 0 1px #0664b0;
}
input:checked + .sa-slider:before {
-webkit-transform: translateX(13px);
-ms-transform: translateX(13px);
transform: translateX(13px);
}
.sa-slider.round {
border-radius: 17px;
}
.sa-slider.round:before {
border-radius: 50%;
}
`);
})();