diff --git a/ResenderBot/ResenderBotLib/build.gradle b/ResenderBot/ResenderBotLib/build.gradle new file mode 100644 index 0000000..34744d2 --- /dev/null +++ b/ResenderBot/ResenderBotLib/build.gradle @@ -0,0 +1,35 @@ +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version" +} + +repositories { + jcenter() +} + +kotlin { + jvm() + js(IR) { + browser() + binaries.executable() + } + + sourceSets { + commonMain { + dependencies { + implementation kotlin('stdlib') + + api "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version" + } + } + } +} diff --git a/ResenderBot/ResenderBotLib/src/commonMain/kotlin/ResenderBot.kt b/ResenderBot/ResenderBotLib/src/commonMain/kotlin/ResenderBot.kt new file mode 100644 index 0000000..fc363d6 --- /dev/null +++ b/ResenderBot/ResenderBotLib/src/commonMain/kotlin/ResenderBot.kt @@ -0,0 +1,44 @@ +import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.bot.getMe +import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.media.sendMediaGroup +import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot +import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely +import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts.* +import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling +import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MediaGroupContent +import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MessageContent +import kotlinx.coroutines.* +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach + +suspend fun activateResenderBot( + token: String, + print: (Any) -> Unit +) { + val bot = telegramBot(token) + + print(bot.getMe()) + + supervisorScope { + val scope = this + bot.startGettingFlowsUpdatesByLongPolling { + filterContentMessages(scope).onEach { + it.content.createResends(it.chat.id, replyToMessageId = it.messageId).forEach { + bot.executeUnsafe(it) ?.also { + print(it) + } + } + }.launchIn(scope) + filterMediaGroupMessages(scope).onEach { + safely { + bot.sendMediaGroup( + it.first().chat, + it.map { it.content.toMediaGroupMemberInputMedia() }, + replyToMessageId = it.first().messageId + ).also { + print(it) + } + } + }.launchIn(scope) + } + } +} diff --git a/ResenderBot/ResenderBotLib/src/jsMain/kotlin/ResenderBot.kt b/ResenderBot/ResenderBotLib/src/jsMain/kotlin/ResenderBot.kt new file mode 100644 index 0000000..fdbedda --- /dev/null +++ b/ResenderBot/ResenderBotLib/src/jsMain/kotlin/ResenderBot.kt @@ -0,0 +1,32 @@ +import kotlinx.browser.document +import kotlinx.coroutines.* +import org.w3c.dom.* + +private val scope = CoroutineScope(Dispatchers.Default) + +fun main() { + document.addEventListener( + "DOMContentLoaded", + { + val botsContainer = document.getElementById("bots_container") ?: return@addEventListener + + (document.getElementById("bot_token_form") as? HTMLFormElement) ?.onsubmit = { + (document.getElementById("bot_token") as? HTMLInputElement) ?.value ?.let { token -> + val botContainer = document.createElement("div") as HTMLDivElement + botsContainer.append(botContainer) + + val infoDiv = document.createElement("div") as HTMLDivElement + botContainer.append(infoDiv) + + scope.launch { + activateResenderBot(token) { + infoDiv.innerHTML = it.toString() + } + } + } + + false + } + } + ) +} diff --git a/ResenderBot/src/main/resources/index.html b/ResenderBot/ResenderBotLib/src/jsMain/resources/index.html similarity index 100% rename from ResenderBot/src/main/resources/index.html rename to ResenderBot/ResenderBotLib/src/jsMain/resources/index.html diff --git a/ResenderBot/build.gradle b/ResenderBot/build.gradle deleted file mode 100644 index a5f2341..0000000 --- a/ResenderBot/build.gradle +++ /dev/null @@ -1,22 +0,0 @@ -plugins { - id 'org.jetbrains.kotlin.js' version "$kotlin_version" -} - -repositories { - jcenter() - mavenCentral() - mavenLocal() -} - -kotlin { - js(IR) { - browser() - binaries.executable() - } -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-js" - - implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version" -} diff --git a/ResenderBot/jvm_launcher/build.gradle b/ResenderBot/jvm_launcher/build.gradle new file mode 100644 index 0000000..08aef6b --- /dev/null +++ b/ResenderBot/jvm_launcher/build.gradle @@ -0,0 +1,24 @@ +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: 'kotlin' +apply plugin: 'application' + +mainClassName="ResenderBotJvmKt" + +repositories { + jcenter() +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + + implementation project(":ResenderBot:ResenderBotLib") +} diff --git a/ResenderBot/jvm_launcher/src/main/kotlin/ResenderBotJvm.kt b/ResenderBot/jvm_launcher/src/main/kotlin/ResenderBotJvm.kt new file mode 100644 index 0000000..0aa1a92 --- /dev/null +++ b/ResenderBot/jvm_launcher/src/main/kotlin/ResenderBotJvm.kt @@ -0,0 +1,5 @@ +suspend fun main(args: Array) { + activateResenderBot(args.first()) { + println(it) + } +} diff --git a/ResenderBot/src/main/kotlin/ResenderBot.kt b/ResenderBot/src/main/kotlin/ResenderBot.kt deleted file mode 100644 index 7ed7f00..0000000 --- a/ResenderBot/src/main/kotlin/ResenderBot.kt +++ /dev/null @@ -1,65 +0,0 @@ -import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.bot.getMe -import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.media.sendMediaGroup -import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot -import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely -import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts.* -import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling -import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MediaGroupContent -import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MessageContent -import kotlinx.browser.document -import kotlinx.coroutines.* -import kotlinx.coroutines.flow.* -import org.w3c.dom.* - -private val scope = CoroutineScope(Dispatchers.Default) - -fun main() { - document.addEventListener( - "DOMContentLoaded", - { - val botsContainer = document.getElementById("bots_container") ?: return@addEventListener - - (document.getElementById("bot_token_form") as? HTMLFormElement) ?.onsubmit = { - val botContainer = document.createElement("div") as HTMLDivElement - botsContainer.append(botContainer) - - val statusDiv = document.createElement("div") as HTMLDivElement - botContainer.append(statusDiv) - - val lastRequestAnswerDiv = document.createElement("div") as HTMLDivElement - botContainer.append(lastRequestAnswerDiv) - - val token = (document.getElementById("bot_token") as? HTMLInputElement) ?.value - if (token != null) { - val bot = telegramBot(token) - scope.launch { - statusDiv.innerHTML = "Loaded bot: ${bot.getMe()}" - - bot.startGettingFlowsUpdatesByLongPolling { - filterContentMessages(scope).onEach { - it.content.createResends(it.chat.id, replyToMessageId = it.messageId).forEach { - bot.executeUnsafe(it) ?.also { - lastRequestAnswerDiv.innerHTML = it.toString() - } - } - }.launchIn(scope) - filterMediaGroupMessages(scope).onEach { - safely { - bot.sendMediaGroup( - it.first().chat, - it.map { it.content.toMediaGroupMemberInputMedia() }, - replyToMessageId = it.first().messageId - ).also { - lastRequestAnswerDiv.innerHTML = it.toString() - } - } - }.launchIn(scope) - } - } - } - - false - } - } - ) -} diff --git a/settings.gradle b/settings.gradle index 53527c1..216a18d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,4 +2,5 @@ include ":ForwarderBot" include ":RandomFileSenderBot" include ":HelloBot" include ":GetMeBot" -include ":ResenderBot" +include ":ResenderBot:ResenderBotLib" +include ":ResenderBot:jvm_launcher"