This is the source code of one of my blog post. To read the full blog post please click here.
-
-
Save unnikked/828e45e52e217adc09478321225ec3de to your computer and use it in GitHub Desktop.
| var token = 'xxx'; | |
| function doPost(e) { | |
| // Make sure to only reply to json requests | |
| if(e.postData.type == "application/json") { | |
| // Parse the update sent from Telegram | |
| var update = JSON.parse(e.postData.contents); | |
| // Instantiate our bot passing the update | |
| var bot = new Bot(token, update); | |
| // Building commands | |
| var bus = new CommandBus(); | |
| bus.on(/\/start/, function () { | |
| this.replyToSender("Congratulations! It works!"); | |
| }); | |
| bus.on(/\/joke\s*([A-Za-z0-9_]+)?\s*([A-Za-z0-9_]+)?/, randomJoke); | |
| // Register the command bus | |
| bot.register(bus); | |
| // If the update is valid, process it | |
| if (update) { | |
| bot.process(); | |
| } | |
| } | |
| } | |
| function setWebhook() { | |
| var bot = new Bot(token, {}); | |
| var result = bot.request('setWebhook', { | |
| url: // publish your app and put your /excec URL here | |
| }); | |
| Logger.log(result); | |
| } | |
| function randomJoke(name, surname) { | |
| var firstName = name || null; | |
| var lastName = surname || null; | |
| var url = 'http://api.icndb.com/jokes/random?escape=javascript'; | |
| if (firstName) url += '&firstName=' + firstName; | |
| if (lastName) url += '&lastName=' + lastName; | |
| var data = JSON.parse(UrlFetchApp.fetch(url).getContentText()); | |
| this.replyToSender(data.value.joke); | |
| } | |
| function Bot (token, update) { | |
| this.token = token; | |
| this.update = update; | |
| this.handlers = []; | |
| } | |
| Bot.prototype.register = function ( handler) { | |
| this.handlers.push(handler); | |
| } | |
| Bot.prototype.process = function () { | |
| for (var i in this.handlers) { | |
| var event = this.handlers[i]; | |
| var result = event.condition(this); | |
| if (result) { | |
| return event.handle(this); | |
| } | |
| } | |
| } | |
| Bot.prototype.request = function (method, data) { | |
| var options = { | |
| 'method' : 'post', | |
| 'contentType': 'application/json', | |
| 'payload' : JSON.stringify(data) | |
| }; | |
| var response = UrlFetchApp.fetch('https://api.telegram.org/bot' + this.token + '/' + method, options); | |
| if (response.getResponseCode() == 200) { | |
| return JSON.parse(response.getContentText()); | |
| } | |
| return false; | |
| } | |
| Bot.prototype.replyToSender = function (text) { | |
| return this.request('sendMessage', { | |
| 'chat_id': this.update.message.from.id, | |
| 'text': text | |
| }); | |
| } | |
| function CommandBus() { | |
| this.commands = []; | |
| } | |
| CommandBus.prototype.on = function (regexp, callback) { | |
| this.commands.push({'regexp': regexp, 'callback': callback}); | |
| } | |
| CommandBus.prototype.condition = function (bot) { | |
| return bot.update.message.text.charAt(0) === '/'; | |
| } | |
| CommandBus.prototype.handle = function (bot) { | |
| for (var i in this.commands) { | |
| var cmd = this.commands[i]; | |
| var tokens = cmd.regexp.exec(bot.update.message.text); | |
| if (tokens != null) { | |
| return cmd.callback.apply(bot, tokens.splice(1)); | |
| } | |
| } | |
| return bot.replyToSender("Invalid command"); | |
| } |
Changing the function name to "function doPost(e)" works for me.
Also setWebhook https://gist.github.com/unnikked/828e45e52e217adc09478321225ec3de#gistcomment-3226679
Thanks @unnikked 👍
Thank you guys for your contributions! I did not know that this blew up over these years! Feel free to share your ideas!
You can join my community on Telegram.
Thank you guys for your contributions! I did not know that this blew up over these years! Feel free to share your ideas!
You can join my community on Telegram.
hi unnikked thank you for share this
i have a little problem i can write code just in one page https://ibb.co/pnS6CNr
i want write code just Return the user message and i that massage input var x ="massage"
The site unnikked.ga is down.
https://www.webpagetest.org/viewlog.php?test=211102_BiDcRH_e38e09f86dda4f4dd766da6ede76176a
Add keyboard to replytosender:
replyToSender(text,keys) { return this.request('sendMessage',{ 'chat_id': this.update.message.from.id, 'text': text, 'parse_mode': "HTML", 'reply_markup': JSON.stringify(keys) }); }
Hi I used the exact same code here, why is doPost failing according to the app script executions? I am writing to the telegram bot but its not responding at all. Webhook has been set successfully
Надо отправить команду боту Ошибка говорит что нет сообщения