I thought of using bots from Telegram to broadcast critical alerts to a Telegram group - and as I wanted to try Google Compute - to deploy the process on Google Compute Engine.
Code has been written in Kotlin
Kotlin/Telegram Code
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>morse</groupId> <artifactId>morse-tg</artifactId> <version>1.0</version> <properties> <kotlin.version>1.1.4-3</kotlin.version> </properties> <build> <sourceDirectory>src/main/kotlin</sourceDirectory> <testSourceDirectory>src/test/kotlin</testSourceDirectory> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> <configuration> <jvmTarget>1.8</jvmTarget> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <configuration> <mainClass>morse.SupportBot</mainClass> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jre8</artifactId> <version>${kotlin.version}</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-test</artifactId> <version>${kotlin.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.telegram</groupId> <artifactId>telegrambots</artifactId> <version>3.3</version> </dependency> </dependencies> </project>
kt code
package morse import org.telegram.telegrambots.ApiContextInitializer import org.telegram.telegrambots.TelegramBotsApi import org.telegram.telegrambots.logging.BotLogger import java.util.* import java.util.logging.Level class SupportBot : TimerTask() { lateinit var longPollHandler:LongPollingHandler override fun run() { longPollHandler.broadcast() } fun broadcast() { val timer = Timer() timer.schedule(this, 10_000, 60_000) } fun init() { BotLogger.info("SupportBot", "init()") ApiContextInitializer.init() BotLogger.setLevel(Level.ALL) val botAPI = TelegramBotsApi() BotLogger.info("SupportBot", "registering...()") longPollHandler = LongPollingHandler() botAPI.registerBot(longPollHandler) botAPI.registerBot(WebhookHandler()) BotLogger.info("SupportBot", "Registered Handler") } companion object { @JvmStatic fun main(args: Arraymaven was used to build, package and run this code.) { BotLogger.info("SupportBot", "SupportBot") val bot = SupportBot() bot.init() bot.broadcast() } } } package morse object Cred { val bot = " " val token = " " } package morse import org.telegram.telegrambots.api.methods.BotApiMethod import org.telegram.telegrambots.api.objects.Update import org.telegram.telegrambots.bots.TelegramWebhookBot import java.util.* class WebhookHandler : TelegramWebhookBot() { override fun getBotUsername() : String = Cred.bot override fun getBotToken(): String = Cred.token override fun getBotPath(): String = UUID.randomUUID().toString() override fun onWebhookUpdateReceived(update: Update?): BotApiMethod<*>? { return null } } package morse import org.telegram.telegrambots.api.methods.send.SendMessage import org.telegram.telegrambots.api.objects.Update import org.telegram.telegrambots.bots.TelegramLongPollingBot import org.telegram.telegrambots.logging.BotLogger import java.util.* class LongPollingHandler : TelegramLongPollingBot() { override fun getBotUsername(): String = Cred.bot override fun getBotToken(): String = Cred.token override fun onUpdateReceived(update: Update?) { BotLogger.info("LongPollingHandler", update.toString()) try { if (update?.hasMessage()!!) { val message = update.message if (message.hasText()) { val sendMessageReq = SendMessage() sendMessageReq.setChatId(message.chatId) sendMessageReq.text = "You just told me " + message.text sendMessage(sendMessageReq) } } } catch (t: Throwable) { BotLogger.error("onUpdateReceived", t) } } fun broadcast() { BotLogger.info("LongPollingHandler", "broadcast") val sendMessageReq = SendMessage() sendMessageReq.chatId = "A negative chat it you get when added to the group" sendMessageReq.text = "Random message sent from Google Cloud at " + Date() sendMessage(sendMessageReq) } }
No comments:
Post a Comment