Skip to content

Instantly share code, notes, and snippets.

@ramzs
Forked from dsemenko-habr/PaymentNotificator.gs
Created February 9, 2022 10:14
Show Gist options
  • Save ramzs/35fa68c0e4c83e4b66d2137d8364dbd6 to your computer and use it in GitHub Desktop.
Save ramzs/35fa68c0e4c83e4b66d2137d8364dbd6 to your computer and use it in GitHub Desktop.
const SHEET_NAME = "Копилка челлендж";
const TABLE_RANGE = "A2:E27";
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const PAYMENT_MESSAGES = {
0: "Напоминалка: сегодня тебе надо внести %amount₽ в копилку для челленджа",
1: "Напоминалка: завтра тебе надо внести %amount₽ в копилку для челленджа",
}
class Payment {
constructor(date, week, amount, paid) {
this.date = date;
this.week = week;
this.amount = amount;
this.paid = paid;
}
daysBeforePayment() {
let today = new Date();
return Math.ceil((this.date - today) / 86400000);
}
isPaid() {
return this.paid;
}
getAmount() {
return this.amount;
}
}
function getCurrentPayment() {
let data = SHEET.getRange(TABLE_RANGE).getValues();
for (line of data) {
let payment = new Payment(line[0], line[1], line[2], line[4]);
if (!payment.isPaid()) {
return payment;
}
}
}
function paymentScheduler() {
let payment = getCurrentPayment();
let daysLeft = payment.daysBeforePayment();
let messageToSend = PAYMENT_MESSAGES[daysLeft];
if (messageToSend != null) {
messageToSend = messageToSend.replace("%amount", payment.getAmount());
tgBot.sendMessage(messageToSend);
}
}
const BOT_TOKEN = "SECRET";
const MY_CHAT_ID = 1234567;
class TelegramBot {
constructor(token) {
this.token = token;
this.api_url = `https://api.telegram.org/bot${BOT_TOKEN}/`;
}
sendMessage(message) {
Logger.log(`Sending message to telegram: ${message}`);
try {
let isRequestSuccessful = this._apiSendMessage(message);
if (isRequestSuccessful) {
Logger.log("Message was sent successful!");
} else {
Logger.log("Message wasn't sent");
}
} catch (error) {
Logger.log(`An error occurred while sending the request: ${error}`)
}
}
_apiSendMessage(message) {
let response = UrlFetchApp.fetch(`${this.api_url}sendMessage?chat_id=${MY_CHAT_ID}&text=${message}`);
Logger.log(`Telegram response: ${response.getContentText()}`);
return JSON.parse(response.getContentText())["ok"];
}
}
const tgBot = new TelegramBot(BOT_TOKEN);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment