-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #298 from InsanusMokrassar/19.0.0
19.0.0
- Loading branch information
Showing
6 changed files
with
144 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# WebHooks | ||
|
||
Launches webhook-based simple bot. Use `/start` with bot to get simple info about webhooks | ||
|
||
## Launch | ||
|
||
```bash | ||
../gradlew run --args="BOT_TOKEN https://sample.com it/is/subpath 8080 debug" | ||
``` | ||
|
||
Required arguments: | ||
|
||
1. Token | ||
2. Arguments starting with `https://` | ||
|
||
Optional arguments: | ||
|
||
* Any argument == `debug` to enable debug mode | ||
* Any argument **not** starting with `https://` and **not** equal to `debug` as **subpath** (will be used as | ||
subroute to place listening of webhooks) | ||
* Any argument as number of port | ||
|
||
Sample: `TOKEN https://sample.com it/is/subpath 8080` will result to: | ||
|
||
* `TOKEN` used as token | ||
* Bot will set up its webhook info as `https://sample.com/it/is/subpath` | ||
* Bot will set up to listen webhooks on route `it/is/subpath` | ||
* Bot will start to listen any incoming request on port `8080` and url `0.0.0.0` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
buildscript { | ||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||
} | ||
} | ||
|
||
apply plugin: 'kotlin' | ||
apply plugin: 'application' | ||
|
||
mainClassName="WebHooksKt" | ||
|
||
|
||
dependencies { | ||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" | ||
|
||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version" | ||
implementation "dev.inmo:micro_utils.ktor.server:$micro_utils_version" | ||
implementation "io.ktor:ktor-server-cio:$ktor_version" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
import dev.inmo.kslog.common.KSLog | ||
import dev.inmo.kslog.common.LogLevel | ||
import dev.inmo.kslog.common.defaultMessageFormatter | ||
import dev.inmo.kslog.common.setDefaultKSLog | ||
import dev.inmo.micro_utils.ktor.server.createKtorServer | ||
import dev.inmo.tgbotapi.bot.ktor.telegramBot | ||
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands | ||
import dev.inmo.tgbotapi.extensions.api.send.reply | ||
import dev.inmo.tgbotapi.extensions.api.webhook.setWebhookInfo | ||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour | ||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand | ||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.includeWebhookHandlingInRoute | ||
import dev.inmo.tgbotapi.types.BotCommand | ||
import dev.inmo.tgbotapi.types.chat.PrivateChat | ||
import dev.inmo.tgbotapi.utils.buildEntities | ||
import io.ktor.server.routing.* | ||
|
||
/** | ||
* Launches webhook-based simple bot. Required arguments: | ||
* | ||
* 1. Token | ||
* *. Arguments starting with `https://` | ||
* | ||
* Optional arguments: | ||
* | ||
* *. Any argument == `debug` to enable debug mode | ||
* *. Any argument **not** starting with `https://` and **not** equal to `debug` as **subpath** (will be used as | ||
* subroute to place listening of webhooks) | ||
* *. Any argument as number of port | ||
* | ||
* Sample: `TOKEN https://sample.com it/is/subpath 8080` will result to: | ||
* | ||
* * `TOKEN` used as token | ||
* * Bot will set up its webhook info as `https://sample.com/it/is/subpath` | ||
* * Bot will set up to listen webhooks on route `it/is/subpath` | ||
* * Bot will start to listen any incoming request on port `8080` and url `0.0.0.0` | ||
*/ | ||
suspend fun main(args: Array<String>) { | ||
val botToken = args.first() | ||
val address = args.first { it.startsWith("https://") } | ||
val subpath = args.drop(1).firstOrNull { it != address && it != "debug" } | ||
val port = args.firstNotNullOfOrNull { it.toIntOrNull() } ?: 8080 | ||
val isDebug = args.any { it == "debug" } | ||
|
||
if (isDebug) { | ||
setDefaultKSLog( | ||
KSLog { level: LogLevel, tag: String?, message: Any, throwable: Throwable? -> | ||
println(defaultMessageFormatter(level, tag, message, throwable)) | ||
} | ||
) | ||
} | ||
|
||
val bot = telegramBot(botToken) | ||
|
||
val behaviourContext = bot.buildBehaviour (defaultExceptionsHandler = { it.printStackTrace() }) { | ||
onCommand("start", initialFilter = { it.chat is PrivateChat }) { | ||
reply( | ||
it, | ||
buildEntities { | ||
+"Url: $address" + "\n" | ||
+"Listening server: 0.0.0.0" + "\n" | ||
+"Listening port: $port" | ||
} | ||
) | ||
} | ||
|
||
setMyCommands(BotCommand("start", "Get webhook info")) | ||
} | ||
|
||
val webhookInfoSubpath = subpath ?.let { "/" + it.removePrefix("/") } ?: "" // drop leading `/` to add it in the beginning for correct construction of subpath | ||
bot.setWebhookInfo(address + webhookInfoSubpath) | ||
|
||
createKtorServer( | ||
"0.0.0.0", | ||
port, | ||
) { | ||
routing { | ||
if (subpath == null) { | ||
includeWebhookHandlingInRoute(behaviourContext, block = behaviourContext.asUpdateReceiver) | ||
} else { | ||
route(subpath) { | ||
includeWebhookHandlingInRoute(behaviourContext, block = behaviourContext.asUpdateReceiver) | ||
} | ||
} | ||
} | ||
}.start(true) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -57,3 +57,5 @@ include ":GiveawaysBot" | |
include ":CustomBot" | ||
|
||
include ":MemberUpdatedWatcherBot" | ||
|
||
include ":WebHooks" |