Skip to content

Instantly share code, notes, and snippets.

@NoCtrlZ1110
Last active May 10, 2024 14:06
Show Gist options
  • Save NoCtrlZ1110/6bc7dd58d9512a4710c151c6e20478ca to your computer and use it in GitHub Desktop.
Save NoCtrlZ1110/6bc7dd58d9512a4710c151c6e20478ca to your computer and use it in GitHub Desktop.
Telegram to Google Sheet || Subscribe to my channel: https://bit.ly/van-huy-dev-youtube
// Constants
const TOKEN = `<YourTokenHere>`;
const BASE_URL = `https://api.telegram.org/bot${TOKEN}`;
const CHAT_ID = '<ChatId>';
const DEPLOYED_URL = '<YourScriptDeployedURL>';
const SUM_CELL = 'G2';
const METHODS = {
SEND_MESSAGE: 'sendMessage',
SET_WEBHOOK: 'setWebhook',
GET_UPDATES: 'getUpdates',
}
// Utils
const toQueryParamsString = (obj) => {
return Object.keys(obj)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`)
.join('&');
}
// Telegram APIs
const makeRequest = async (method, queryParams = {}) => {
const url = `${BASE_URL}/${method}?${toQueryParamsString(queryParams)}`
const response = await UrlFetchApp.fetch(url);
return response.getContentText();
}
const sendMessage = (text) => {
makeRequest(METHODS.SEND_MESSAGE, {
chat_id: CHAT_ID,
text
})
}
const setWebhook = () => {
makeRequest(METHODS.SET_WEBHOOK,{
url: DEPLOYED_URL
})
}
const getChatId = async () => {
const res = await makeRequest(METHODS.GET_UPDATES);
console.log("ChatId: ", JSON.parse(res)?.result[0]?.message?.chat?.id)
}
// Google Sheet
const addNewRow = (content = []) => {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const Avals = sheet.getRange("A1:A").getValues();
const Alast = Avals.filter(String).length;
const columnNumber = content.length;
const newRow = sheet.getRange(Alast + 1, 1, 1, columnNumber);
newRow.setValues([content]);
}
// Extract label & price
const getMultiplyBase = (unitLabel) => {
switch (unitLabel) {
case 'k':
case 'K':
case 'nghìn':
case 'ng':
case 'ngàn':
return 1000;
case 'lít':
case 'lit':
case 'l':
return 100000;
case 'củ':
case 'tr':
case 'm':
case 'M':
return 1000000;
default:
return 1;
}
};
const addExpense = (text) => {
const regex = /(.*)\s(\d*)(\w*)/g;
const label = text.replace(regex, '$1');
const priceText = text.replace(regex, '$2');
const unitLabel = text.replace(regex, '$3');
const time = new Date().toLocaleString();
const price = Number(priceText) * getMultiplyBase(unitLabel);
addNewRow([time, label, price]);
}
// Webhooks
const doPost = (request) =>{
const contents = JSON.parse(request.postData.contents);
const text = contents.message.text;
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
addExpense(text);
const totalExpenses = sheet.getRange(SUM_CELL).getValue().toLocaleString('vi-VN', {style : 'currency', currency : 'VND'});
sendMessage(`Tổng chi tiêu: ${totalExpenses}`);
}
@lebathang
Copy link

Nice 👍

@mhqb365
Copy link

mhqb365 commented Feb 9, 2024

Tks bro ❤

@os24ultra004
Copy link

Thanks

@thiendt2k1
Copy link

cảm ơn anh ạ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment