diff --git a/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/BotCommands.kt b/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/BotCommands.kt index de8b700..bdcd498 100644 --- a/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/BotCommands.kt +++ b/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/BotCommands.kt @@ -5,10 +5,13 @@ import org.bukkit.configuration.file.YamlConfiguration class Commands(yamlCfg: YamlConfiguration) { val time: String val online: String + val chatID: String + init { yamlCfg.run { time = getString("commands.time", "time")!! online = getString("commands.online", "online")!! + chatID = getString("commands.chat_id", "chat_id")!! } } } \ No newline at end of file diff --git a/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/Constants.kt b/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/Constants.kt index 371c746..31b310c 100644 --- a/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/Constants.kt +++ b/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/Constants.kt @@ -22,4 +22,9 @@ object Constants { object COMMANDS { const val PLUGIN_RELOAD = "tgbridge_reload" } + object COMMAND_DESC { + const val timeDesc = "Get time on server" + const val onlineDesc = "Get players online" + const val chatIDDesc = "Get current chat id" + } } diff --git a/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/TgBot.kt b/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/TgBot.kt index 9ef41c3..a6dd235 100644 --- a/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/TgBot.kt +++ b/src/main/kotlin/org/kraftwerk28/spigot_tg_bridge/TgBot.kt @@ -5,6 +5,7 @@ import com.github.kotlintelegrambot.bot import com.github.kotlintelegrambot.dispatch import com.github.kotlintelegrambot.dispatcher.command import com.github.kotlintelegrambot.dispatcher.text +import com.github.kotlintelegrambot.entities.BotCommand import com.github.kotlintelegrambot.entities.ParseMode import com.github.kotlintelegrambot.entities.Update import com.github.kotlintelegrambot.entities.User @@ -30,9 +31,11 @@ class TgBot(private val plugin: Plugin, private val config: Configuration) { dispatch { command(commands.time.replace(slashRegex, ""), ::time) command(commands.online.replace(slashRegex, ""), ::online) + command(commands.chatID.replace(slashRegex, ""), ::chatID) text(null, ::onText) } } + bot.setMyCommands(getBotCommands()) skipUpdates() plugin.logger.info("Server address: ${InetAddress.getLocalHost().hostAddress}.") config.webhookConfig?.let { _ -> @@ -48,6 +51,10 @@ class TgBot(private val plugin: Plugin, private val config: Configuration) { private fun time(bot: Bot, update: Update) { val msg = update.message!! + if (!config.allowedChats.contains(msg.chat.id)) { + return + } + if (plugin.server.worlds.isEmpty()) { bot.sendMessage( msg.chat.id, @@ -74,6 +81,11 @@ class TgBot(private val plugin: Plugin, private val config: Configuration) { } private fun online(bot: Bot, update: Update) { + val msg = update.message!! + if (!config.allowedChats.contains(msg.chat.id)) { + return + } + val playerList = plugin.server.onlinePlayers val playerStr = plugin.server .onlinePlayers @@ -82,7 +94,6 @@ class TgBot(private val plugin: Plugin, private val config: Configuration) { val text = if (playerList.isNotEmpty()) "${config.onlineString}:\n$playerStr" else config.nobodyOnlineString - val msg = update.message!! bot.sendMessage( msg.chat.id, text, replyToMessageId = msg.messageId, @@ -90,6 +101,23 @@ class TgBot(private val plugin: Plugin, private val config: Configuration) { ) } + private fun chatID(bot: Bot, update: Update) { + val msg = update.message!! + val chatID = msg.chat.id + val text = """ + Chat ID: + $chatID + paste this id to chats: section in you config.yml file so it will look like this: + """.trimIndent() + + "\n\nchats:\n # other ids...\n - ${chatID}" + bot.sendMessage( + chatID, + text, + parseMode = ParseMode.HTML, + replyToMessageId = msg.messageId + ) + } + fun broadcastToTG(text: String) { config.allowedChats.forEach { chatID -> bot.sendMessage(chatID, text, parseMode = ParseMode.HTML) @@ -131,6 +159,12 @@ class TgBot(private val plugin: Plugin, private val config: Configuration) { } } + private fun getBotCommands(): List { + val cmdList = config.commands.run { listOf(time, online, chatID) } + val descList = C.COMMAND_DESC.run { listOf(timeDesc, onlineDesc, chatIDDesc) } + return cmdList.zip(descList).map { BotCommand(it.first, it.second) } + } + companion object { fun escapeHTML(s: String): String = s.replace("&", "&").replace(">", ">").replace("<", "<") diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 46aba92..537536b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: SpigotTGBridge -version: 0.0.10 +version: 0.0.11 api-version: '1.15' main: org.kraftwerk28.spigot_tg_bridge.Plugin description: Telegram <-> Minecraft communication plugin for Spigot.