mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-11-18 13:00:18 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| eb08732938 |
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
@@ -1,3 +1,5 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
custom: ['https://tonscan.org/address/UQAtuSLJ76Zehc3qP-eRYMR98fPIu_oOp_atcpVX55zxHwTU']
|
patreon: InsanusMokrassar
|
||||||
|
|
||||||
|
custom: ['https://paypal.me/InsanusMokrassar?locale.x=ru_RU']
|
||||||
|
|||||||
11
.github/dependabot.yml
vendored
11
.github/dependabot.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
# To get started with Dependabot version updates, you'll need to specify which
|
|
||||||
# package ecosystems to update and where the package manifests are located.
|
|
||||||
# Please see the documentation for all configuration options:
|
|
||||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "gradle" # See documentation for possible values
|
|
||||||
directory: "/tgbotapi.core" # Location of package manifests
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
8
.github/labeler.yml
vendored
8
.github/labeler.yml
vendored
@@ -1,8 +1,6 @@
|
|||||||
api: "TelegramBotAPI-api/**"
|
api: "TelegramBotAPI-extensions-api/**"
|
||||||
utils: "TelegramBotAPI-utils/**"
|
utils: "TelegramBotAPI-extensions-utils/**"
|
||||||
behaviour-builder: "TelegramBotAPI-behaviour_builder/**"
|
core: "TelegramBotAPI/**" # currently not work
|
||||||
behaviour-builder_fsm: "TelegramBotAPI-behaviour_builder-fsm/**"
|
|
||||||
core: "TelegramBotAPI-core/**" # currently not work
|
|
||||||
|
|
||||||
code: "**/*.kt"
|
code: "**/*.kt"
|
||||||
gradle: "**/*.gradle"
|
gradle: "**/*.gradle"
|
||||||
|
|||||||
3
.github/workflows/greetings.yml
vendored
3
.github/workflows/greetings.yml
vendored
@@ -5,9 +5,6 @@ on: [pull_request, issues]
|
|||||||
jobs:
|
jobs:
|
||||||
greeting:
|
greeting:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/first-interaction@v1
|
- uses: actions/first-interaction@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
21
.github/workflows/kdocs.yml
vendored
21
.github/workflows/kdocs.yml
vendored
@@ -1,21 +0,0 @@
|
|||||||
name: Publish KDocs
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
jobs:
|
|
||||||
publishing:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 17
|
|
||||||
- name: Build
|
|
||||||
run: ./gradlew dokkaHtmlMultiModule
|
|
||||||
- name: Publish KDocs
|
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
publish_dir: ./build/dokka/htmlMultiModule
|
|
||||||
publish_branch: kdocs
|
|
||||||
1
.github/workflows/label.yml
vendored
1
.github/workflows/label.yml
vendored
@@ -12,7 +12,6 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
triage:
|
triage:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ github.actor == github.repository_owner }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@v2
|
- uses: actions/labeler@v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
36
.github/workflows/packages_publishing.yml
vendored
36
.github/workflows/packages_publishing.yml
vendored
@@ -1,36 +0,0 @@
|
|||||||
name: Publish package to GitHub Packages
|
|
||||||
on: [push]
|
|
||||||
jobs:
|
|
||||||
publishing:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 17
|
|
||||||
- name: Setup LibCurl
|
|
||||||
run: sudo apt update && sudo apt install -y libcurl4-openssl-dev
|
|
||||||
- name: Rewrite version
|
|
||||||
run: |
|
|
||||||
branch="`echo "${{ github.ref }}" | grep -o "[^/]*$"`"
|
|
||||||
cat gradle.properties | sed -e "s/^library_version=\([0-9\.]*\)/library_version=\1-branch_$branch-build${{ github.run_number }}/" > gradle.properties.tmp
|
|
||||||
rm gradle.properties
|
|
||||||
mv gradle.properties.tmp gradle.properties
|
|
||||||
- name: KotlinSymbolProcessing execution
|
|
||||||
run: ./gradlew kspCommonMainKotlinMetadata
|
|
||||||
- name: Build
|
|
||||||
run: ./gradlew build
|
|
||||||
- name: API compatibility check
|
|
||||||
run: ./gradlew apiCheck
|
|
||||||
- name: Publish to GithubPackages
|
|
||||||
continue-on-error: true
|
|
||||||
run: ./gradlew publishAllPublicationsToGithubPackagesRepository --no-parallel
|
|
||||||
env:
|
|
||||||
GITHUB_USER: ${{ github.actor }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Publish to InmoNexus
|
|
||||||
continue-on-error: true
|
|
||||||
run: ./gradlew publishAllPublicationsToInmoNexusRepository
|
|
||||||
env:
|
|
||||||
INMONEXUS_USER: ${{ secrets.INMONEXUS_USER }}
|
|
||||||
INMONEXUS_PASSWORD: ${{ secrets.INMONEXUS_PASSWORD }}
|
|
||||||
1
.github/write-good.yml
vendored
Normal file
1
.github/write-good.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
spellchecker: true
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,5 +1,4 @@
|
|||||||
.idea
|
.idea
|
||||||
.kotlin
|
|
||||||
out/*
|
out/*
|
||||||
*.iml
|
*.iml
|
||||||
target
|
target
|
||||||
@@ -9,9 +8,6 @@ settings.xml
|
|||||||
.gradle/
|
.gradle/
|
||||||
build/
|
build/
|
||||||
out/
|
out/
|
||||||
bin/
|
|
||||||
|
|
||||||
local.properties
|
local.properties
|
||||||
kotlin-js-store/
|
|
||||||
secret.gradle
|
secret.gradle
|
||||||
.aider*
|
|
||||||
|
|||||||
2482
CHANGELOG.md
2482
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
228
README.md
228
README.md
@@ -1,139 +1,137 @@
|
|||||||
# TelegramBotAPI [](https://central.sonatype.com/artifact/dev.inmo/tgbotapi) [](https://core.telegram.org/bots/api-changelog#august-15-2025)
|
# TelegramBotAPI
|
||||||
|
|
||||||
| Docs | [](https://tgbotapi.inmo.dev/index.html) [](https://docs.inmo.dev/tgbotapi/index.html) |
|
| Common info | [](https://github.com/KotlinBy/awesome-kotlin) [](https://travis-ci.com/InsanusMokrassar/TelegramBotAPI) [Small survey](https://forms.gle/2Hex2ynbHWHhi1KY7)|
|
||||||
|:----------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
|
| -------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
| Useful repos | [](https://github.com/InsanusMokrassar/TelegramBotAPI-bot_template/generate) [](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/) |
|
| Useful links | [](https://t.me/InMoTelegramBotAPI) [](https://tgbotapi.inmo.dev/docs/index.html) [Examples](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/), [Mini tutorial](https://bookstack.inmo.dev/books/telegrambotapi/chapter/introduction-tutorial) |
|
||||||
| Misc | [](https://github.com/KotlinBy/awesome-kotlin) [](https://docs.google.com/forms/d/e/1FAIpQLSctdJHT_aEniyYT0-IUAEfo1hsIlezX2owlkEAYX4KPl2V2_A/viewform?usp=sf_link) |
|
| TelegramBotAPI Core status | [](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi.core/_latestVersion) [](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.core) |
|
||||||
| Platforms |   |
|
| TelegramBotAPI Extensions status | [](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi.extensions.api/_latestVersion) [](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.extensions.api) |
|
||||||
| Experimental Platforms | [](https://kotlinlang.org/docs/native-target-support.html#tier-1) [](https://kotlinlang.org/docs/native-target-support.html#tier-1) |
|
| TelegramBotAPI Util Extensions status | [](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi.extensions.utils/_latestVersion) [](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.extensions.utils) |
|
||||||
|
| TelegramBotAPI All status | [](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi/_latestVersion) [](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi) |
|
||||||
|
|
||||||
<!--- [](https://t.me/ktgbotapi) --->
|
**At the time of publication of version `0.28.0` there are errors in serialization plugins like
|
||||||
|
[kotlinx.serialization#1004](https://github.com/Kotlin/kotlinx.serialization/issues/1004). It is possible, that both JVM
|
||||||
|
and JS version may work improperly in some cases with `kotlinx.serialization` version `1.0.0-RC`**
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://t.me/ktgbotapi">
|
|
||||||
<img src="./resources/tg_channel_qr.jpg">
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
Hello! This is a set of libraries for working with Telegram Bot API.
|
It is a complex of libraries for working with `TelegramBotAPI` in type-safe and strict way as much as it possible. In
|
||||||
|
the list of this complex currently next projects:
|
||||||
|
|
||||||
## Examples
|
* [TelegramBotAPI Core](tgbotapi.core/README.md) - core of library. In fact it is independent library and can be used alone
|
||||||
|
without any additional library
|
||||||
|
* [TelegramBotAPI API Extensions](tgbotapi.extensions.api/README.md) - contains extensions (mostly for
|
||||||
|
`RequestsExecutor`), which allows to use the core library in more pleasant way
|
||||||
|
* [TelegramBotAPI Util Extensions](tgbotapi.extensions.utils/README.md) - contains extensions for more comfortable
|
||||||
|
work with commands, updates and other different things
|
||||||
|
* [TelegramBotAPI](tgbotapi/README.md) - concentration of all previously mentioned libraries
|
||||||
|
|
||||||
There are several things you need to do to launch examples below:
|
Most part of some specific solves or unuseful
|
||||||
|
moments are describing by official [Telegram Bot API](https://core.telegram.org/bots/api).
|
||||||
|
|
||||||
* Add `mavenCentral()` to your project repositories
|
## JavaScript notes
|
||||||
* [Maven variant](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Including-in-your-project#pomxml)
|
|
||||||
* Add dependency `implementation "dev.inmo:tgbotapi:$tgbotapi_version"`
|
|
||||||
* Replace `tgbotapi_version` with exact version (see last one in the table above) or put variable with this name in project
|
|
||||||
* Alternative variant for maven [here](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Including-in-your-project#telegrambotapi)
|
|
||||||
|
|
||||||
More including instructions [available here](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Including-in-your-project).
|
### Versions before `0.28.0`
|
||||||
Other configuration examples:
|
|
||||||
|
|
||||||
* [For multiplatform](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/tree/master/ResenderBot)
|
In case if you are want to use this library inside of browser, you will need additional settings (thanks for help to [Alexander Nozik](https://research.jetbrains.org/researchers/altavir)):
|
||||||
* [For JVM](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/blob/master/GetMeBot/build.gradle)
|
|
||||||
|
|
||||||
### Most common example
|
<details>
|
||||||
|
<summary>Gradle build script help (for versions before 0.28.0)</summary>
|
||||||
|
|
||||||
```kotlin
|
```groovy
|
||||||
suspend fun main() {
|
dependencies {
|
||||||
val bot = telegramBot(TOKEN)
|
/* ... */
|
||||||
|
|
||||||
bot.buildBehaviourWithLongPolling {
|
implementation "com.github.insanusmokrassar:TelegramBotAPI:$tgbot_api_version"
|
||||||
println(getMe())
|
implementation "com.github.insanusmokrassar:TelegramBotAPI-extensions-api:$tgbot_api_version" // optional
|
||||||
|
implementation "com.github.insanusmokrassar:TelegramBotAPI-extensions-utils:$tgbot_api_version" // optional
|
||||||
onCommand("start") {
|
|
||||||
reply(it, "Hi:)")
|
/* Block of dependencies for correct building in browser */
|
||||||
}
|
implementation(npm("fs"))
|
||||||
}.join()
|
implementation(npm("bufferutil"))
|
||||||
|
implementation(npm("utf-8-validate"))
|
||||||
|
implementation(npm("abort-controller"))
|
||||||
|
implementation(npm("text-encoding"))
|
||||||
}
|
}
|
||||||
```
|
|
||||||
|
|
||||||
In this example you will see information about this bot at the moment of starting and answer with `Hi:)` every time it
|
/* ... */
|
||||||
gets message `/start`
|
|
||||||
|
|
||||||
### Handling only last messages
|
kotlin {
|
||||||
|
target {
|
||||||
```kotlin
|
browser {
|
||||||
suspend fun main() {
|
/* Block for fix of exception in absence of some functionality, https://github.com/ktorio/ktor/issues/1339 */
|
||||||
val bot = telegramBot(TOKEN)
|
dceTask {
|
||||||
|
dceOptions {
|
||||||
val flowsUpdatesFilter = FlowsUpdatesFilter()
|
keep("ktor-ktor-io.\$\$importsForInline\$\$.ktor-ktor-io.io.ktor.utils.io")
|
||||||
bot.buildBehaviour(flowUpdatesFilter = flowsUpdatesFilter) {
|
}
|
||||||
println(getMe())
|
}
|
||||||
|
|
||||||
onCommand("start") {
|
|
||||||
reply(it, "Hi:)")
|
|
||||||
}
|
|
||||||
|
|
||||||
retrieveAccumulatedUpdates(this).join()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The main difference with the previous example is that bot will get only last updates (accumulated before bot launch
|
|
||||||
and maybe some updates it got after launch)
|
|
||||||
|
|
||||||
### Build a little bit more complex behaviour
|
|
||||||
|
|
||||||
```kotlin
|
|
||||||
suspend fun main() {
|
|
||||||
val bot = telegramBot(TOKEN)
|
|
||||||
|
|
||||||
bot.buildBehaviourWithLongPolling {
|
|
||||||
println(getMe())
|
|
||||||
|
|
||||||
val nameReplyMarkup = ReplyKeyboardMarkup(
|
|
||||||
matrix {
|
|
||||||
row {
|
|
||||||
+SimpleKeyboardButton("nope")
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
onCommand("start") {
|
|
||||||
val photo = waitPhoto(
|
|
||||||
SendTextMessage(it.chat.id, "Send me your photo please")
|
|
||||||
).first()
|
|
||||||
|
|
||||||
val name = waitText(
|
|
||||||
SendTextMessage(
|
|
||||||
it.chat.id,
|
|
||||||
"Send me your name or choose \"nope\"",
|
|
||||||
replyMarkup = nameReplyMarkup
|
|
||||||
)
|
|
||||||
).first().text.takeIf { it != "nope" }
|
|
||||||
|
|
||||||
sendPhoto(
|
|
||||||
it.chat,
|
|
||||||
photo.mediaCollection,
|
|
||||||
entities = buildEntities {
|
|
||||||
if (name != null) regular(name) // may be collapsed up to name ?.let(::regular)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}.join()
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### More examples
|
</details>
|
||||||
|
|
||||||
You may find examples in [this project](https://github.com/InsanusMokrassar/TelegramBotAPI-examples). Besides, you are
|
## Ok, where should I start?
|
||||||
always welcome in our [docs](https://docs.inmo.dev/tgbotapi/index.html) and
|
|
||||||
[chat](https://t.me/InMoTelegramBotAPIChat).
|
|
||||||
|
|
||||||
### Bot API Server Notice
|

|
||||||
|
|
||||||
Under the hood, default bots realizations will try to use links
|
In most cases, the most simple way will be to implement [TelegramBotAPI](TelegramBotAPI/README.md) - it contains
|
||||||
([PathedFile](tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/PathedFile.kt)#filePath) as files each
|
all necessary tools for comfort usage of this library. If you want to exclude some libraries, you can implement just
|
||||||
time you are trying to download file from telegram in any way - via saving to file, use stream or download as byte array.
|
[TelegramBotAPI API Extensions](tgbotapi.extensions.api/README.md),
|
||||||
To let bot correctly download files from bot api server, you must:
|
[TelegramBotAPI Util Extensions](tgbotapi.extensions.utils/README.md) or even
|
||||||
|
[TelegramBotAPI Core](tgbotapi.core/README.md).
|
||||||
|
|
||||||
* Run bot api server locally
|
If you want to dive deeper in the core of library or develop something for it - welcome to learn more from
|
||||||
to proxy requests for files to the server where bot api server has been hosted
|
[TelegramBotAPI Core](tgbotapi.core/README.md) and our [Telegram Chat](https://teleg.one/InMoTelegramBotAPIChat).
|
||||||
* In case of local bot api server (shared one host machine) you must ensure that access to bot api server has been
|
|
||||||
granted for your bot. For example, [aiogram/telegram-bot-api](https://hub.docker.com/r/aiogram/telegram-bot-api) image
|
Anyway, all libraries are very typical inside of them. Examples:
|
||||||
use `101` UID/GID in linux for user and group as owners. So, your bot must run under user included in `101` group
|
|
||||||
(like `systemd-journal`) or be `101` UID user (like `systemd-resolve`)
|
* In `TelegramBotAPI` common request look like `requestsExecutor.execute(SomeRequest())`
|
||||||
* **OR** Use some reverse proxy (like nginx). It will allow you to broadcast your bots files without linux rights problems
|
* `tgbotapi.extensions.api` typical syntax look like `requestsExecutor.someRequest()` (in most cases it would be
|
||||||
* Set [TelegramAPIUrlsKeeper](tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/TelegramAPIUrlsKeeper.kt)#fileLinkUrlMapper
|
better to use `bot` name instead of `requestsExecutor`)
|
||||||
to map urls to let bot execute requests to your nginx proxy
|
* `tgbotapi.extensions.utils` will look like `filter.filterBaseMessageUpdates(chatId).filterExactCommands(Regex("^.*$"))...`
|
||||||
|
|
||||||
|
## Build instruction
|
||||||
|
|
||||||
|
If you want to build this project or to contribute, there are several recommendations:
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
In case if you want to just build project, run next command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./gradlew clean build
|
||||||
|
```
|
||||||
|
|
||||||
|
On windows:
|
||||||
|
|
||||||
|
```
|
||||||
|
gradlew.bat clean build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing for work with your version locally
|
||||||
|
|
||||||
|
In case, if you want to work in your other projects using your modification (or some state) of this library,
|
||||||
|
you can use next code:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./gradlew clean build publishToMavenLocal
|
||||||
|
```
|
||||||
|
|
||||||
|
On windows:
|
||||||
|
|
||||||
|
```
|
||||||
|
gradlew.bat clean build publishToMavenLocal
|
||||||
|
```
|
||||||
|
|
||||||
|
But you must remember, that in this case your local maven repo must be the first one from
|
||||||
|
your project retrieving libraries:
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
repositories {
|
||||||
|
mavenLocal() // that must be the first one
|
||||||
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Besides, for your own version you can change variable `library_version` in the file [gradle.properties](./gradle.properties).
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
125
TelegramBotAPI.minder
Normal file
125
TelegramBotAPI.minder
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<minder version="1.11.1">
|
||||||
|
<theme name="default" label="Default" index="-1"/>
|
||||||
|
<styles>
|
||||||
|
<style level="0" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="1" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="2" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="3" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="4" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="5" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="6" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="7" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="8" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="9" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<style level="10" isset="true" branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="200" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true" connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
</styles>
|
||||||
|
<drawarea x="-320.56697591145837" y="-10.028254191080691" scale="0.75"/>
|
||||||
|
<images/>
|
||||||
|
<nodes>
|
||||||
|
<node id="0" posx="748.88964843749955" posy="119.42341613769531" width="472" height="168" side="top" fold="false" treesize="603" layout="Downwards" group="false">
|
||||||
|
<style branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="439" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true"/>
|
||||||
|
<nodename posx="764.88964843749955" posy="135.42341613769531" maxwidth="488.96484375">
|
||||||
|
<text data="tgbotapi.core Root project with API. It is not recommended to use its requests directly and better to use at least tgbotapi.extensions.api"/>
|
||||||
|
</nodename>
|
||||||
|
<nodenote></nodenote>
|
||||||
|
<nodes>
|
||||||
|
<node id="1" posx="781.88964843749955" posy="387.42341613769531" width="406" height="145" side="bottom" fold="false" treesize="603" color="#68b723" colorroot="true" layout="Downwards" group="false">
|
||||||
|
<style branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="none" nodewidth="394" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true"/>
|
||||||
|
<nodename posx="797.88964843749955" posy="403.42341613769531" maxwidth="419.451171875">
|
||||||
|
<text data="TelegramBotAPI extensions Family of projects which are fully based on TelegramBotAPI and extend its functionality"/>
|
||||||
|
</nodename>
|
||||||
|
<nodenote></nodenote>
|
||||||
|
<nodes>
|
||||||
|
<node id="2" posx="683.38964843749955" posy="632.42341613769531" width="296" height="191" side="bottom" fold="false" treesize="296" color="#68b723" colorroot="true" layout="Downwards" group="false">
|
||||||
|
<style branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="203" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true"/>
|
||||||
|
<nodename posx="699.38964843749955" posy="648.42341613769531" maxwidth="295.90315755208337">
|
||||||
|
<text data="tgbotapi.extensions.api Extensions project for make requests more look like in the Telegram Bot API and give opportunity to use it's easier"/>
|
||||||
|
</nodename>
|
||||||
|
<nodenote></nodenote>
|
||||||
|
</node>
|
||||||
|
<node id="3" posx="979.38964843749955" posy="632.42341613769531" width="307" height="168" side="bottom" fold="false" treesize="307" color="#68b723" colorroot="true" layout="Downwards" group="false">
|
||||||
|
<style branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="286" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true"/>
|
||||||
|
<nodename posx="995.38964843749955" posy="648.42341613769531" maxwidth="299.252197265625">
|
||||||
|
<text data="tgbotapi.extensions.utils Extensions project with utils things which will make easier different operations"/>
|
||||||
|
</nodename>
|
||||||
|
<nodenote></nodenote>
|
||||||
|
</node>
|
||||||
|
</nodes>
|
||||||
|
</node>
|
||||||
|
</nodes>
|
||||||
|
</node>
|
||||||
|
<node id="4" posx="815.52319335937455" posy="948.04447937011719" width="329" height="213" side="top" fold="false" treesize="329" layout="Downwards" group="false">
|
||||||
|
<style branchmargin="100" linktype="curved" linkwidth="5" linkarrow="true" linkdash="solid" nodeborder="bracket" nodewidth="388" nodeborderwidth="3" nodefill="false" nodemargin="11" nodepadding="5" nodefont="Roboto Mono 14" nodemarkup="true"/>
|
||||||
|
<nodename posx="831.52319335937455" posy="964.04447937011719" maxwidth="394.3671875">
|
||||||
|
<text data="tgbotapi Here included all available TelegramBotAPI libraries: * tgbotapi.core * tgbotapi.extensions.api * tgbotapi.extensions.utils">
|
||||||
|
<color>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="67" end="68" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="84" end="85" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
<range start="111" end="112" extra="rgb(255,0,0)"/>
|
||||||
|
</color>
|
||||||
|
</text>
|
||||||
|
</nodename>
|
||||||
|
<nodenote></nodenote>
|
||||||
|
</node>
|
||||||
|
</nodes>
|
||||||
|
<groups/>
|
||||||
|
<connections>
|
||||||
|
<connection from_id="2" to_id="4" drag_x="905.70642089843705" drag_y="891.23394775390625" color="#777777">
|
||||||
|
<style connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<title></title>
|
||||||
|
<note></note>
|
||||||
|
</connection>
|
||||||
|
<connection from_id="3" to_id="4" drag_x="1056.456420898437" drag_y="885.48394775390625" color="#777777">
|
||||||
|
<style connectiondash="dotted" connectionlwidth="2" connectionarrow="fromto" connectionpadding="3" connectionfont="Sans 10" connectiontwidth="100"/>
|
||||||
|
<title></title>
|
||||||
|
<note></note>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<stickers/>
|
||||||
|
</minder>
|
||||||
20
badges/chat.svg
Normal file
20
badges/chat.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="104" height="20">
|
||||||
|
<linearGradient id="b" x2="0" y2="100%">
|
||||||
|
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
||||||
|
<stop offset="1" stop-opacity=".1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<clipPath id="a">
|
||||||
|
<rect width="104" height="20" rx="3" fill="#fff"/>
|
||||||
|
</clipPath>
|
||||||
|
<g clip-path="url(#a)">
|
||||||
|
<path fill="#555" d="M0 0h65v20H0z"/>
|
||||||
|
<path fill="#007ec6" d="M35 0h69v20H35z"/>
|
||||||
|
<path fill="url(#b)" d="M0 0h104v20H0z"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110">
|
||||||
|
<text x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)">Talk</text>
|
||||||
|
<text x="175" y="140" transform="scale(.1)">Talk</text>
|
||||||
|
<text x="690" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)">Telegram</text>
|
||||||
|
<text x="690" y="140" transform="scale(.1)">Telegram</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1018 B |
20
badges/kdocs.svg
Normal file
20
badges/kdocs.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="104" height="20">
|
||||||
|
<linearGradient id="b" x2="0" y2="100%">
|
||||||
|
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
||||||
|
<stop offset="1" stop-opacity=".1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<clipPath id="a">
|
||||||
|
<rect width="104" height="20" rx="3" fill="#fff"/>
|
||||||
|
</clipPath>
|
||||||
|
<g clip-path="url(#a)">
|
||||||
|
<path fill="#555" d="M0 0h65v20H0z"/>
|
||||||
|
<path fill="#007ec6" d="M45 0h69v20H45z"/>
|
||||||
|
<path fill="url(#b)" d="M0 0h104v20H0z"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110">
|
||||||
|
<text x="225" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)">Open</text>
|
||||||
|
<text x="225" y="140" transform="scale(.1)">Open</text>
|
||||||
|
<text x="740" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)">KDocs</text>
|
||||||
|
<text x="740" y="140" transform="scale(.1)">KDocs</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1012 B |
76
build.gradle
76
build.gradle
@@ -1,58 +1,24 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
jcenter()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven { url "https://plugins.gradle.org/m2/" }
|
maven { url "https://plugins.gradle.org/m2/" }
|
||||||
mavenLocal()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath libs.kotlin.gradle.plugin
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath libs.kotlin.ksp.plugin
|
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
||||||
classpath libs.kotlin.serialization.plugin
|
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version"
|
||||||
classpath libs.kotlin.dokka.plugin
|
classpath "com.github.breadmoirai:github-release:$github_release_plugin_version"
|
||||||
classpath libs.github.release.plugin
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlin.dokka)
|
id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version" apply false
|
||||||
alias(libs.plugins.versions)
|
id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version" apply false
|
||||||
alias(libs.plugins.validator)
|
|
||||||
alias(libs.plugins.nmcp.aggregation)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
|
|
||||||
nmcpAggregation {
|
|
||||||
centralPortal {
|
|
||||||
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
|
||||||
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
|
||||||
validationTimeout = Duration.ofSeconds(0)
|
|
||||||
publishingType = System.getenv('PUBLISHING_TYPE') != "" ? System.getenv('PUBLISHING_TYPE') : "USER_MANAGED"
|
|
||||||
}
|
|
||||||
|
|
||||||
publishAllProjectsProbablyBreakingProjectIsolation()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// temporal crutch until legacy tests will be stabled or legacy target will be removed
|
|
||||||
allprojects {
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
google()
|
|
||||||
maven { url "https://nexus.inmo.dev/repository/maven-releases/" }
|
|
||||||
mavenLocal()
|
|
||||||
}
|
|
||||||
if (it != rootProject.findProject("docs")) {
|
|
||||||
tasks.whenTaskAdded { task ->
|
|
||||||
if(task.name == "jsLegacyBrowserTest" || task.name == "jsLegacyNodeTest") {
|
|
||||||
task.enabled = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
apply from: "./extensions.gradle"
|
|
||||||
|
|
||||||
private String getCurrentVersionChangelog() {
|
private String getCurrentVersionChangelog() {
|
||||||
OutputStream changelogDataOS = new ByteArrayOutputStream()
|
OutputStream changelogDataOS = new ByteArrayOutputStream()
|
||||||
exec {
|
exec {
|
||||||
@@ -63,28 +29,20 @@ private String getCurrentVersionChangelog() {
|
|||||||
return changelogDataOS.toString().trim()
|
return changelogDataOS.toString().trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (new File(projectDir, "secret.gradle").exists()) {
|
||||||
def githubTokenVariableName = "GITHUB_RELEASE_TOKEN"
|
apply from: './secret.gradle'
|
||||||
def githubTokenVariableFromEnv = System.getenv(githubTokenVariableName)
|
|
||||||
|
|
||||||
def secretFile = new File(projectDir, "secret.gradle")
|
|
||||||
if (secretFile.exists() || project.hasProperty(githubTokenVariableName) || (githubTokenVariableFromEnv != "" && githubTokenVariableFromEnv != null)) {
|
|
||||||
if (secretFile.exists()) {
|
|
||||||
apply from: './secret.gradle'
|
|
||||||
}
|
|
||||||
apply plugin: "com.github.breadmoirai.github-release"
|
apply plugin: "com.github.breadmoirai.github-release"
|
||||||
def githubReleaseToken = project.hasProperty(githubTokenVariableName) ? project.property(githubTokenVariableName).toString() : githubTokenVariableFromEnv
|
|
||||||
|
|
||||||
githubRelease {
|
githubRelease {
|
||||||
token githubReleaseToken
|
token "${project.property('GITHUB_RELEASE_TOKEN')}"
|
||||||
|
|
||||||
owner = "InsanusMokrassar"
|
owner "InsanusMokrassar"
|
||||||
repo = "TelegramBotAPI"
|
repo "TelegramBotAPI"
|
||||||
|
|
||||||
tagName = "v$library_version"
|
tagName "$library_version"
|
||||||
releaseName = "$library_version"
|
releaseName "$library_version"
|
||||||
targetCommitish = "$library_version"
|
targetCommitish "$library_version"
|
||||||
|
|
||||||
body = getCurrentVersionChangelog()
|
body getCurrentVersionChangelog()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +1,74 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
||||||
|
classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "org.jetbrains.kotlin.multiplatform"
|
id "org.jetbrains.kotlin.multiplatform"
|
||||||
id "org.jetbrains.kotlin.plugin.serialization"
|
id "org.jetbrains.kotlin.plugin.serialization"
|
||||||
id "org.jetbrains.dokka"
|
id "org.jetbrains.dokka" version "$dokka_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
project.description = "Full collection of all built-in tgbotapi tools"
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
apply from: "$mppProjectWithSerialization"
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
jvm()
|
||||||
|
js(BOTH) {
|
||||||
|
browser()
|
||||||
|
nodejs()
|
||||||
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(":tgbotapi.core")
|
implementation kotlin('stdlib')
|
||||||
api project(":tgbotapi.api")
|
|
||||||
api project(":tgbotapi.utils")
|
project.parent.subprojects.forEach {
|
||||||
api project(":tgbotapi.behaviour_builder")
|
if (it != project) {
|
||||||
api project(":tgbotapi.behaviour_builder.fsm")
|
api it
|
||||||
api project(":tgbotapi")
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
jsMain {
|
|
||||||
dependencies {
|
|
||||||
api project(":tgbotapi.webapps")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SourceDirectorySet> findSourcesWithName(String... approximateNames) {
|
private Closure includeSourcesInDokka(String... approximateNames) {
|
||||||
return parent.subprojects
|
return {
|
||||||
.findAll { it != project && it.hasProperty("kotlin") }
|
parent.subprojects.forEach {
|
||||||
.collectMany { it.kotlin.sourceSets }
|
if (it != project) {
|
||||||
.findAll { sourceSet ->
|
File srcDir = new File(it.projectDir.absolutePath, "src")
|
||||||
approximateNames.any { nameToFilter ->
|
if (srcDir.exists() && srcDir.isDirectory()) {
|
||||||
sourceSet.name.contains(nameToFilter)
|
srcDir.eachFile { file ->
|
||||||
|
if (approximateNames.any { file.name.contains(it) } && file.isDirectory()) {
|
||||||
|
String pathToSrc = file.absolutePath
|
||||||
|
sourceRoot {
|
||||||
|
path = pathToSrc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.collect { it.kotlin }
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Object callback = {
|
dokka {
|
||||||
|
outputFormat = 'html'
|
||||||
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case project.hasProperty("DOKKA_PATH"):
|
case project.hasProperty("DOKKA_PATH"):
|
||||||
outputDirectory = project.property("DOKKA_PATH").toString()
|
outputDirectory = project.property("DOKKA_PATH").toString()
|
||||||
@@ -49,30 +78,19 @@ Object callback = {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
dokkaSourceSets {
|
multiplatform {
|
||||||
configureEach {
|
global {
|
||||||
skipDeprecated.set(true)
|
skipDeprecated = true
|
||||||
|
|
||||||
sourceLink {
|
sourceLink {
|
||||||
localDirectory.set(file("../"))
|
path = "./"
|
||||||
remoteUrl.set(new URL("https://github.com/InsanusMokrassar/ktgbotapi"))
|
url = "https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/"
|
||||||
remoteLineSuffix.set("#L")
|
lineSuffix = "#L"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
named("commonMain") {
|
common(includeSourcesInDokka("commonMain"))
|
||||||
sourceRoots.setFrom(findSourcesWithName("commonMain"))
|
js(includeSourcesInDokka("jsMain"/*, "commonMain"*/))
|
||||||
}
|
jvm(includeSourcesInDokka("jvmMain"/*, "commonMain"*/))
|
||||||
|
|
||||||
named("jsMain") {
|
|
||||||
sourceRoots.setFrom(findSourcesWithName("jsMain"))
|
|
||||||
}
|
|
||||||
|
|
||||||
named("jvmMain") {
|
|
||||||
sourceRoots.setFrom(findSourcesWithName("jvmMain"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.dokkaGfm(callback)
|
|
||||||
tasks.dokkaHtml(callback)
|
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
|
dokka_version=0.10.1
|
||||||
|
|
||||||
org.gradle.jvmargs=-Xmx1024m
|
org.gradle.jvmargs=-Xmx1024m
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
File templatesFolder = new File("$rootProject.projectDir.absolutePath${File.separatorChar}gradle${File.separatorChar}templates")
|
|
||||||
|
|
||||||
Map properties = new HashMap<String, String>()
|
|
||||||
|
|
||||||
if (templatesFolder.exists() && templatesFolder.isDirectory()) {
|
|
||||||
templatesFolder.listFiles().each {
|
|
||||||
properties[it.name - ".gradle"] = it.absolutePath
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
|
||||||
ext {
|
|
||||||
properties.forEach { k, v ->
|
|
||||||
it[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("getPublishableModules") {
|
|
||||||
doLast {
|
|
||||||
rootProject.subprojects.each { project ->
|
|
||||||
if (project.plugins.hasPlugin('maven-publish')) {
|
|
||||||
println(":${project.name}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,21 @@
|
|||||||
org.gradle.jvmargs=-Xmx2048m
|
org.gradle.jvmargs=-Xmx1024m
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
kotlin.js.generate.externals=true
|
kotlin.js.generate.externals=true
|
||||||
kotlin.incremental=true
|
kotlin.incremental=true
|
||||||
kotlin.incremental.js=true
|
kotlin.incremental.js=true
|
||||||
|
|
||||||
# https://github.com/google/ksp/issues/2491
|
kotlin_version=1.4.10
|
||||||
ksp.useKSP2=false
|
kotlin_coroutines_version=1.3.9
|
||||||
|
kotlin_serialisation_runtime_version=1.0.0
|
||||||
|
klock_version=1.12.1
|
||||||
|
uuid_version=0.2.2
|
||||||
|
ktor_version=1.4.1
|
||||||
|
|
||||||
|
javax_activation_version=1.1.1
|
||||||
|
|
||||||
library_group=dev.inmo
|
library_group=dev.inmo
|
||||||
library_version=29.0.1
|
library_version=0.29.1
|
||||||
|
|
||||||
|
gradle_bintray_plugin_version=1.8.5
|
||||||
|
github_release_plugin_version=2.2.12
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
[versions]
|
|
||||||
|
|
||||||
kotlin = "2.2.10"
|
|
||||||
kotlin-serialization = "1.9.0"
|
|
||||||
kotlin-coroutines = "1.10.2"
|
|
||||||
|
|
||||||
javax-activation = "1.1.1"
|
|
||||||
|
|
||||||
korlibs = "5.4.0"
|
|
||||||
uuid = "0.8.4"
|
|
||||||
ktor = "3.2.3"
|
|
||||||
|
|
||||||
ksp = "2.2.10-2.0.2"
|
|
||||||
kotlin-poet = "2.2.0"
|
|
||||||
|
|
||||||
microutils = "0.26.3"
|
|
||||||
kslog = "1.5.0"
|
|
||||||
|
|
||||||
versions = "0.52.0"
|
|
||||||
|
|
||||||
github-release-plugin = "2.5.2"
|
|
||||||
dokka = "2.0.0"
|
|
||||||
|
|
||||||
validator = "0.18.1"
|
|
||||||
nmcp = "1.1.0"
|
|
||||||
|
|
||||||
[libraries]
|
|
||||||
|
|
||||||
kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
|
|
||||||
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" }
|
|
||||||
kotlin-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization" }
|
|
||||||
kotlin-serialization-properties = { module = "org.jetbrains.kotlinx:kotlinx-serialization-properties", version.ref = "kotlin-serialization" }
|
|
||||||
kotlin-test-common = { module = "org.jetbrains.kotlin:kotlin-test-common", version.ref = "kotlin" }
|
|
||||||
kotlin-test-annotations-common = { module = "org.jetbrains.kotlin:kotlin-test-annotations-common", version.ref = "kotlin" }
|
|
||||||
kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
|
|
||||||
kotlin-test-js = { module = "org.jetbrains.kotlin:kotlin-test-js", version.ref = "kotlin" }
|
|
||||||
|
|
||||||
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
|
||||||
ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" }
|
|
||||||
ktor-client-java = { module = "io.ktor:ktor-client-java", version.ref = "ktor" }
|
|
||||||
ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" }
|
|
||||||
ktor-client-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor" }
|
|
||||||
ktor-client-winhttp = { module = "io.ktor:ktor-client-winhttp", version.ref = "ktor" }
|
|
||||||
ktor-server = { module = "io.ktor:ktor-server", version.ref = "ktor" }
|
|
||||||
ktor-server-host-common = { module = "io.ktor:ktor-server-host-common", version.ref = "ktor" }
|
|
||||||
|
|
||||||
javax-activation = { module = "javax.activation:activation", version.ref = "javax-activation" }
|
|
||||||
|
|
||||||
korlibs-klock = { module = "com.soywiz.korge:korlibs-time", version.ref = "korlibs" }
|
|
||||||
korlibs-krypto = { module = "com.soywiz.korge:korlibs-crypto", version.ref = "korlibs" }
|
|
||||||
|
|
||||||
uuid = { module = "com.benasher44:uuid", version.ref = "uuid" }
|
|
||||||
|
|
||||||
microutils-colors-common = { module = "dev.inmo:micro_utils.colors.common", version.ref = "microutils" }
|
|
||||||
microutils-coroutines = { module = "dev.inmo:micro_utils.coroutines", version.ref = "microutils" }
|
|
||||||
microutils-serialization-base64 = { module = "dev.inmo:micro_utils.serialization.base64", version.ref = "microutils" }
|
|
||||||
microutils-serialization-encapsulator = { module = "dev.inmo:micro_utils.serialization.encapsulator", version.ref = "microutils" }
|
|
||||||
microutils-serialization-typedSerializer = { module = "dev.inmo:micro_utils.serialization.typed_serializer", version.ref = "microutils" }
|
|
||||||
microutils-serialization-mapper = { module = "dev.inmo:micro_utils.serialization.mapper", version.ref = "microutils" }
|
|
||||||
microutils-languageCodes = { module = "dev.inmo:micro_utils.language_codes", version.ref = "microutils" }
|
|
||||||
microutils-ktor-common = { module = "dev.inmo:micro_utils.ktor.common", version.ref = "microutils" }
|
|
||||||
microutils-fsm-common = { module = "dev.inmo:micro_utils.fsm.common", version.ref = "microutils" }
|
|
||||||
microutils-ksp-generator = { module = "dev.inmo:micro_utils.ksp.generator", version.ref = "microutils" }
|
|
||||||
microutils-ksp-sealed = { module = "dev.inmo:micro_utils.ksp.sealed", version.ref = "microutils" }
|
|
||||||
microutils-ksp-sealed-generator = { module = "dev.inmo:micro_utils.ksp.sealed.generator", version.ref = "microutils" }
|
|
||||||
microutils-ksp-variations = { module = "dev.inmo:micro_utils.ksp.variations", version.ref = "microutils" }
|
|
||||||
microutils-ksp-variations-generator = { module = "dev.inmo:micro_utils.ksp.variations.generator", version.ref = "microutils" }
|
|
||||||
|
|
||||||
kslog = { module = "dev.inmo:kslog", version.ref = "kslog" }
|
|
||||||
|
|
||||||
# ksp dependencies
|
|
||||||
|
|
||||||
kotlin-poet = { module = "com.squareup:kotlinpoet-ksp", version.ref = "kotlin-poet" }
|
|
||||||
ksp = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" }
|
|
||||||
|
|
||||||
# buildscript classpaths
|
|
||||||
|
|
||||||
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
|
|
||||||
kotlin-ksp-plugin = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" }
|
|
||||||
kotlin-serialization-plugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" }
|
|
||||||
kotlin-dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
|
|
||||||
github-release-plugin = { module = "com.github.breadmoirai:github-release", version.ref = "github-release-plugin" }
|
|
||||||
|
|
||||||
[plugins]
|
|
||||||
|
|
||||||
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
|
||||||
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
|
||||||
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
|
||||||
kotlin-dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
|
|
||||||
versions = { id = "com.github.ben-manes.versions", version.ref = "versions" }
|
|
||||||
validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "validator" }
|
|
||||||
nmcp-aggregation = { id = "com.gradleup.nmcp.aggregation", version.ref = "nmcp" }
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
project.version = "$version"
|
|
||||||
project.group = "$group"
|
|
||||||
|
|
||||||
apply from: "$mpp_publish"
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
compilerOptions {
|
|
||||||
freeCompilerArgs.add("-Xcontext-parameters")
|
|
||||||
}
|
|
||||||
js (IR) {
|
|
||||||
browser()
|
|
||||||
nodejs()
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
commonMain {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin
|
|
||||||
api libs.kotlin.serialization
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commonTest {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin.test.common
|
|
||||||
implementation libs.kotlin.test.annotations.common
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jsTest {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin.test.js
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
project.version = "$library_version"
|
|
||||||
project.group = "$library_group"
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
compilerOptions {
|
|
||||||
freeCompilerArgs.add("-Xcontext-parameters")
|
|
||||||
}
|
|
||||||
jvm {
|
|
||||||
compilations.main {
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "17"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
js (IR) {
|
|
||||||
browser()
|
|
||||||
nodejs()
|
|
||||||
}
|
|
||||||
linuxX64()
|
|
||||||
mingwX64()
|
|
||||||
linuxArm64()
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
commonMain {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin
|
|
||||||
api libs.kotlin.serialization
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commonTest {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin.test.common
|
|
||||||
implementation libs.kotlin.test.annotations.common
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jvmTest {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin.test.junit
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jsTest {
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kotlin.test.js
|
|
||||||
}
|
|
||||||
}
|
|
||||||
all {
|
|
||||||
languageSettings {
|
|
||||||
optIn('dev.inmo.tgbotapi.utils.RiskFeature')
|
|
||||||
optIn('dev.inmo.tgbotapi.utils.PreviewFeature')
|
|
||||||
optIn('dev.inmo.micro_utils.common.Warning')
|
|
||||||
optIn('dev.inmo.micro_utils.common.PreviewFeature')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_17
|
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
apply plugin: 'maven-publish'
|
|
||||||
|
|
||||||
task javadocsJar(type: Jar) {
|
|
||||||
archiveClassifier = 'javadoc'
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications.all {
|
|
||||||
artifact javadocsJar
|
|
||||||
|
|
||||||
pom {
|
|
||||||
description = "${project.description}"
|
|
||||||
name = "${project.name}"
|
|
||||||
url = "https://insanusmokrassar.github.io/TelegramBotAPI/TelegramBotAPI"
|
|
||||||
|
|
||||||
scm {
|
|
||||||
developerConnection = "scm:git:[fetch=]https://github.com/insanusmokrassar/TelegramBotAPI.git[push=]https://github.com/insanusmokrassar/TelegramBotAPI.git"
|
|
||||||
url = "https://github.com/insanusmokrassar/TelegramBotAPI.git"
|
|
||||||
}
|
|
||||||
|
|
||||||
developers {
|
|
||||||
developer {
|
|
||||||
id = "InsanusMokrassar"
|
|
||||||
name = "Ovsiannikov Aleksei"
|
|
||||||
email = "ovsyannikov.alexey95@gmail.com"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
|
||||||
license {
|
|
||||||
name = "Apache Software License 2.0"
|
|
||||||
url = "https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
repositories {
|
|
||||||
if ((project.hasProperty('GITHUB_USER') || System.getenv('GITHUB_USER') != null) && (project.hasProperty('GITHUB_TOKEN') || System.getenv('GITHUB_TOKEN') != null)) {
|
|
||||||
maven {
|
|
||||||
name = "GithubPackages"
|
|
||||||
url = uri("https://maven.pkg.github.com/InsanusMokrassar/ktgbotapi")
|
|
||||||
|
|
||||||
credentials {
|
|
||||||
username = project.hasProperty('GITHUB_USER') ? project.property('GITHUB_USER') : System.getenv('GITHUB_USER')
|
|
||||||
password = project.hasProperty('GITHUB_TOKEN') ? project.property('GITHUB_TOKEN') : System.getenv('GITHUB_TOKEN')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((project.hasProperty('INMONEXUS_USER') || System.getenv('INMONEXUS_USER') != null) && (project.hasProperty('INMONEXUS_PASSWORD') || System.getenv('INMONEXUS_PASSWORD') != null)) {
|
|
||||||
maven {
|
|
||||||
name = "InmoNexus"
|
|
||||||
url = uri("https://nexus.inmo.dev/repository/maven-releases/")
|
|
||||||
|
|
||||||
credentials {
|
|
||||||
username = project.hasProperty('INMONEXUS_USER') ? project.property('INMONEXUS_USER') : System.getenv('INMONEXUS_USER')
|
|
||||||
password = project.hasProperty('INMONEXUS_PASSWORD') ? project.property('INMONEXUS_PASSWORD') : System.getenv('INMONEXUS_PASSWORD')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
|
|
||||||
maven {
|
|
||||||
name = "sonatype"
|
|
||||||
url = uri("https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/")
|
|
||||||
|
|
||||||
credentials {
|
|
||||||
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
|
||||||
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (project.hasProperty("signing.gnupg.keyName")) {
|
|
||||||
apply plugin: 'signing'
|
|
||||||
|
|
||||||
signing {
|
|
||||||
useGpgCmd()
|
|
||||||
|
|
||||||
sign publishing.publications
|
|
||||||
}
|
|
||||||
|
|
||||||
task signAll {
|
|
||||||
tasks.withType(Sign).forEach {
|
|
||||||
dependsOn(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Workaround to make android sign operations depend on signing tasks
|
|
||||||
project.getTasks().withType(AbstractPublishToMaven.class).configureEach {
|
|
||||||
def signingTasks = project.getTasks().withType(Sign.class)
|
|
||||||
mustRunAfter(signingTasks)
|
|
||||||
}
|
|
||||||
// Workaround to make test tasks use sign
|
|
||||||
project.getTasks().withType(Sign.class).configureEach { signTask ->
|
|
||||||
def withoutSign = (signTask.name.startsWith("sign") ? signTask.name.minus("sign") : signTask.name)
|
|
||||||
def pubName = withoutSign.endsWith("Publication") ? withoutSign.substring(0, withoutSign.length() - "Publication".length()) : withoutSign
|
|
||||||
// These tasks only exist for native targets, hence findByName() to avoid trying to find them for other targets
|
|
||||||
|
|
||||||
// Task ':linkDebugTest<platform>' uses this output of task ':sign<platform>Publication' without declaring an explicit or implicit dependency
|
|
||||||
def debugTestTask = tasks.findByName("linkDebugTest$pubName")
|
|
||||||
if (debugTestTask != null) {
|
|
||||||
signTask.mustRunAfter(debugTestTask)
|
|
||||||
}
|
|
||||||
// Task ':compileTestKotlin<platform>' uses this output of task ':sign<platform>Publication' without declaring an explicit or implicit dependency
|
|
||||||
def testTask = tasks.findByName("compileTestKotlin$pubName")
|
|
||||||
if (testTask != null) {
|
|
||||||
signTask.mustRunAfter(testTask)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"${project.description}","url":"https://insanusmokrassar.github.io/TelegramBotAPI/TelegramBotAPI","vcsUrl":"https://github.com/insanusmokrassar/TelegramBotAPI.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/ktgbotapi","credsType":{"type":"dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository.CredentialsType.UsernameAndPassword","usernameProperty":"GITHUB_USER","passwordProperty":"GITHUB_TOKEN"}},{"name":"InmoNexus","url":"https://nexus.inmo.dev/repository/maven-releases/"},{"name":"sonatype","url":"https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"},"includeCentralSonatypeUploadingScript":false}}
|
|
||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
|
||||||
|
|||||||
@@ -1,97 +0,0 @@
|
|||||||
# Exceptions handling
|
|
||||||
|
|
||||||
Unfortunatelly, exceptions handling in this library is a bit difficult in some places, but that have at least two reasons: flexibility and usability.
|
|
||||||
|
|
||||||
## "In place" handling
|
|
||||||
|
|
||||||
In case you know, where exceptions are happening, you may use several tools for exceptions catching:
|
|
||||||
|
|
||||||
* Catching with result
|
|
||||||
* Catching with callback
|
|
||||||
|
|
||||||
### Catching with result
|
|
||||||
|
|
||||||
If you prefer to receive `Result` objects instead of some weird callbacks, you may use the next syntax:
|
|
||||||
|
|
||||||
```kotlin
|
|
||||||
safelyWithResult {
|
|
||||||
// do something
|
|
||||||
}.onSuccess { // will be called if everything is right
|
|
||||||
// handle success
|
|
||||||
}.onFailure { // will be called if something went wrong
|
|
||||||
// handle error
|
|
||||||
it.printStackTrace()
|
|
||||||
}.getOrThrow() // will return value or throw exception
|
|
||||||
```
|
|
||||||
|
|
||||||
### Catching with callback
|
|
||||||
|
|
||||||
Also there is more simple (in some cases) way to handle exceptions with callbacks:
|
|
||||||
|
|
||||||
```kotlin
|
|
||||||
safely(
|
|
||||||
{
|
|
||||||
// handle error
|
|
||||||
it.printStackTrace()
|
|
||||||
null // return value
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
// do something
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bonus: different types of handling
|
|
||||||
|
|
||||||
There are two types of handling:
|
|
||||||
|
|
||||||
* Just safely - when you are using something to obviously retrieve value or throw exception. When handling callback has been skipped, it will throw exception by default. For example:
|
|
||||||
```kotlin
|
|
||||||
safely(
|
|
||||||
{
|
|
||||||
it.printStackTrace()
|
|
||||||
"error"
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
error("Hi :)") // emulate exception throwing
|
|
||||||
"ok"
|
|
||||||
} // result will be with type String
|
|
||||||
```
|
|
||||||
* Safely without exceptions - almost the same as `safely`, but this type by default allow to return nullable value (when exception was thrown) instead of just throwing (as with `safely`):
|
|
||||||
```kotlin
|
|
||||||
safelyWithouExceptions {
|
|
||||||
// do something
|
|
||||||
} // will returns nullable result type
|
|
||||||
```
|
|
||||||
|
|
||||||
## Global exceptions handling
|
|
||||||
|
|
||||||
The most simple way to configure exceptions handling is to change `CoroutineContext` when you are creating your `CoroutineScope` for bot processing:
|
|
||||||
|
|
||||||
```kotlin
|
|
||||||
val bot = telegramBot("TOKEN")
|
|
||||||
|
|
||||||
bot.buildBehaviour (
|
|
||||||
scope = scope,
|
|
||||||
defaultExceptionsHandler = {
|
|
||||||
it.printStackTrace()
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
OR
|
|
||||||
|
|
||||||
```kotlin
|
|
||||||
val bot = telegramBotWithBehaviour (
|
|
||||||
"TOKEN",
|
|
||||||
scope = scope,
|
|
||||||
defaultExceptionsHandler = {
|
|
||||||
it.printStackTrace()
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Here we have used `ContextSafelyExceptionHandler` class. It will pass default handling of exceptions and will call the block in most cases when something inside of your bot logic has thrown exception.
|
|
||||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 80 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 448 KiB |
@@ -1,21 +1,5 @@
|
|||||||
pluginManagement {
|
|
||||||
resolutionStrategy {
|
|
||||||
eachPlugin {
|
|
||||||
if (requested.id.id == "org.jetbrains.dokka") {
|
|
||||||
useModule("org.jetbrains.dokka:dokka-gradle-plugin:${requested.version}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
repositories {
|
|
||||||
gradlePluginPortal()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
include ":tgbotapi.core"
|
include ":tgbotapi.core"
|
||||||
include ":tgbotapi.ksp"
|
include ":tgbotapi.extensions.api"
|
||||||
include ":tgbotapi.api"
|
include ":tgbotapi.extensions.utils"
|
||||||
include ":tgbotapi.utils"
|
|
||||||
include ":tgbotapi.behaviour_builder"
|
|
||||||
include ":tgbotapi.behaviour_builder.fsm"
|
|
||||||
include ":tgbotapi"
|
include ":tgbotapi"
|
||||||
include ":tgbotapi.webapps"
|
include ":docs"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,31 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id "org.jetbrains.kotlin.multiplatform"
|
|
||||||
id "org.jetbrains.kotlin.plugin.serialization"
|
|
||||||
id "org.jetbrains.dokka"
|
|
||||||
id "com.google.devtools.ksp"
|
|
||||||
}
|
|
||||||
|
|
||||||
project.description = "API extensions with \"Telegram Bot API\"-like extensions for TelegramBot and RequestsExecutor"
|
|
||||||
|
|
||||||
apply from: "$mppProjectWithSerialization"
|
|
||||||
apply from: "$mpp_publish"
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
sourceSets {
|
|
||||||
commonMain {
|
|
||||||
dependencies {
|
|
||||||
api project(":tgbotapi.core")
|
|
||||||
api libs.microutils.ksp.variations
|
|
||||||
}
|
|
||||||
}
|
|
||||||
configureEach {
|
|
||||||
languageSettings.optIn("kotlinx.serialization.ExperimentalSerializationApi")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
explicitApi()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
add("kspCommonMainMetadata", libs.microutils.ksp.variations.generator)
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
|
||||||
import dev.inmo.tgbotapi.utils.defaultKtorEngine
|
|
||||||
import dev.inmo.tgbotapi.utils.telegramBotAPIDefaultUrl
|
|
||||||
import io.ktor.client.HttpClient
|
|
||||||
import io.ktor.client.HttpClientConfig
|
|
||||||
import io.ktor.client.engine.*
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [urlsKeeper] and already prepared [client]
|
|
||||||
*/
|
|
||||||
public fun telegramBot(
|
|
||||||
urlsKeeper: TelegramAPIUrlsKeeper,
|
|
||||||
client: HttpClient = HttpClient(defaultKtorEngine)
|
|
||||||
): TelegramBot = telegramBot(urlsKeeper) {
|
|
||||||
this.client = client
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [urlsKeeper] and specify [HttpClientEngineFactory] by passing [clientFactory] param and optionally
|
|
||||||
* configure it with [clientConfig]
|
|
||||||
*/
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
public inline fun <T: HttpClientEngineConfig> telegramBot(
|
|
||||||
urlsKeeper: TelegramAPIUrlsKeeper,
|
|
||||||
clientFactory: HttpClientEngineFactory<T>,
|
|
||||||
noinline clientConfig: HttpClientConfig<T>.() -> Unit = {}
|
|
||||||
): TelegramBot = telegramBot(
|
|
||||||
urlsKeeper,
|
|
||||||
HttpClient(clientFactory, clientConfig)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [urlsKeeper] and specify [HttpClientEngine] by passing [clientEngine] param and optionally
|
|
||||||
* configure [HttpClient] using [clientConfig]
|
|
||||||
*/
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
public inline fun telegramBot(
|
|
||||||
urlsKeeper: TelegramAPIUrlsKeeper,
|
|
||||||
clientEngine: HttpClientEngine,
|
|
||||||
noinline clientConfig: HttpClientConfig<*>.() -> Unit = {}
|
|
||||||
): TelegramBot = telegramBot(
|
|
||||||
urlsKeeper,
|
|
||||||
HttpClient(clientEngine, clientConfig)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [urlsKeeper] and specify [HttpClientEngine] by configuring [HttpClient] using
|
|
||||||
* [clientConfig]
|
|
||||||
*/
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
public inline fun telegramBot(
|
|
||||||
urlsKeeper: TelegramAPIUrlsKeeper,
|
|
||||||
noinline clientConfig: HttpClientConfig<*>.() -> Unit
|
|
||||||
): TelegramBot = telegramBot(
|
|
||||||
urlsKeeper,
|
|
||||||
HttpClient(clientConfig)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [token], [apiUrl] (for custom api servers) and already prepared [client]
|
|
||||||
*/
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
public fun telegramBot(
|
|
||||||
token: String,
|
|
||||||
apiUrl: String = telegramBotAPIDefaultUrl,
|
|
||||||
testServer: Boolean = false,
|
|
||||||
fileLinkUrlMapper: TelegramAPIUrlsKeeper.(String) -> String = { "${fileBaseUrl}/$it" },
|
|
||||||
client: HttpClient = HttpClient(defaultKtorEngine)
|
|
||||||
): TelegramBot = telegramBot(TelegramAPIUrlsKeeper(token, testServer, apiUrl, fileLinkUrlMapper), client)
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
public fun <T: HttpClientEngineConfig> telegramBot(
|
|
||||||
token: String,
|
|
||||||
clientFactory: HttpClientEngineFactory<T>,
|
|
||||||
apiUrl: String = telegramBotAPIDefaultUrl,
|
|
||||||
testServer: Boolean = false,
|
|
||||||
fileLinkUrlMapper: TelegramAPIUrlsKeeper.(String) -> String = { "${fileBaseUrl}/$it" },
|
|
||||||
clientConfig: HttpClientConfig<T>.() -> Unit = {}
|
|
||||||
): TelegramBot = telegramBot(
|
|
||||||
TelegramAPIUrlsKeeper(token, testServer, apiUrl, fileLinkUrlMapper),
|
|
||||||
clientFactory,
|
|
||||||
clientConfig
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [token] and specify [HttpClientEngine] by passing [clientEngine] param and optionally
|
|
||||||
* configure [HttpClient] using [clientConfig]
|
|
||||||
*/
|
|
||||||
public fun telegramBot(
|
|
||||||
token: String,
|
|
||||||
clientEngine: HttpClientEngine,
|
|
||||||
apiUrl: String = telegramBotAPIDefaultUrl,
|
|
||||||
testServer: Boolean = false,
|
|
||||||
fileLinkUrlMapper: TelegramAPIUrlsKeeper.(String) -> String = { "${fileBaseUrl}/$it" },
|
|
||||||
clientConfig: HttpClientConfig<*>.() -> Unit = {}
|
|
||||||
): TelegramBot = telegramBot(
|
|
||||||
TelegramAPIUrlsKeeper(token, testServer, apiUrl, fileLinkUrlMapper),
|
|
||||||
clientEngine,
|
|
||||||
clientConfig
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows to create bot using bot [token] and [apiUrl] and specify [HttpClientEngine] by configuring [HttpClient] using
|
|
||||||
* [clientConfig]
|
|
||||||
*/
|
|
||||||
public fun telegramBot(
|
|
||||||
token: String,
|
|
||||||
apiUrl: String = telegramBotAPIDefaultUrl,
|
|
||||||
testServer: Boolean = false,
|
|
||||||
fileLinkUrlMapper: TelegramAPIUrlsKeeper.(String) -> String = { "${fileBaseUrl}/$it" },
|
|
||||||
clientConfig: HttpClientConfig<*>.() -> Unit
|
|
||||||
): TelegramBot = telegramBot(
|
|
||||||
TelegramAPIUrlsKeeper(token, testServer, apiUrl, fileLinkUrlMapper),
|
|
||||||
clientConfig
|
|
||||||
)
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.local.Close
|
|
||||||
|
|
||||||
public suspend inline fun TelegramBot.executeClose(): Boolean = execute(Close)
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.DeleteMessage
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.MessageId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupCollectionContent
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMessage(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageId: MessageId
|
|
||||||
): Boolean = execute(
|
|
||||||
DeleteMessage(chatId, messageId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMessage(
|
|
||||||
chat: Chat,
|
|
||||||
messageId: MessageId
|
|
||||||
): Boolean = deleteMessage(chat.id, messageId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMessage(
|
|
||||||
message: AccessibleMessage
|
|
||||||
): Boolean {
|
|
||||||
val mediaGroupContent = ((message as? ContentMessage<*>) ?.content as? MediaGroupCollectionContent<*>)
|
|
||||||
if (mediaGroupContent == null) {
|
|
||||||
return deleteMessage(message.chat, message.messageId)
|
|
||||||
} else {
|
|
||||||
return mediaGroupContent.group.map {
|
|
||||||
deleteMessage(it.sourceMessage)
|
|
||||||
}.all { it }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageId: MessageId
|
|
||||||
): Boolean = deleteMessage(chatId, messageId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
chat: Chat,
|
|
||||||
messageId: MessageId
|
|
||||||
): Boolean = deleteMessage(chat, messageId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
message: AccessibleMessage
|
|
||||||
): Boolean = deleteMessage(message)
|
|
||||||
|
|
||||||
public suspend fun AccessibleMessage.delete(
|
|
||||||
requestsExecutor: TelegramBot
|
|
||||||
): Boolean = requestsExecutor.deleteMessage(this)
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.DeleteMessages
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
|
||||||
import kotlin.jvm.JvmName
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMessages(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageIds: List<MessageId>
|
|
||||||
): Boolean = messageIds.chunked(deleteMessagesLimit.last).map {
|
|
||||||
execute(
|
|
||||||
DeleteMessages(
|
|
||||||
chatId = chatId,
|
|
||||||
messageIds = it
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}.all { it }
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMessages(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageIds: Array<MessageId>
|
|
||||||
): Boolean = deleteMessages(
|
|
||||||
chatId = chatId,
|
|
||||||
messageIds = messageIds.toList()
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMessages(
|
|
||||||
messagesMetas: List<Message.MetaInfo>
|
|
||||||
): Boolean = messagesMetas.groupBy { it.chatId }.map { (chatId, messages) ->
|
|
||||||
deleteMessages(
|
|
||||||
chatId = chatId,
|
|
||||||
messageIds = messages.map { it.messageId }
|
|
||||||
)
|
|
||||||
}.all { it }
|
|
||||||
|
|
||||||
@JvmName("deleteMessagesWithMessages")
|
|
||||||
public suspend fun TelegramBot.deleteMessages(
|
|
||||||
messages: List<AccessibleMessage>
|
|
||||||
): Boolean = deleteMessages(messages.map { it.metaInfo })
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageIds: List<MessageId>
|
|
||||||
): Boolean = deleteMessages(chatId = chatId, messageIds = messageIds)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageIds: Array<MessageId>
|
|
||||||
): Boolean = deleteMessages(chatId = chatId, messageIds = messageIds)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
messagesMetas: List<Message.MetaInfo>
|
|
||||||
): Boolean = deleteMessages(messagesMetas)
|
|
||||||
|
|
||||||
@JvmName("deleteWithMessages")
|
|
||||||
public suspend fun TelegramBot.delete(
|
|
||||||
messages: List<AccessibleMessage>
|
|
||||||
): Boolean = deleteMessages(messages)
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.ForwardMessage
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.MessageId
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.Seconds
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage
|
|
||||||
import dev.inmo.tgbotapi.types.directMessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.threadId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessage(
|
|
||||||
fromChatId: ChatIdentifier,
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
messageId: MessageId,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
startTimestamp: Seconds? = null,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false
|
|
||||||
): PossiblyForwardedMessage = execute(
|
|
||||||
ForwardMessage(fromChatId, toChatId, messageId, threadId, directMessageThreadId, startTimestamp, disableNotification, protectContent)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessage(
|
|
||||||
fromChat: Chat,
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
messageId: MessageId,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
startTimestamp: Seconds? = null,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false
|
|
||||||
): PossiblyForwardedMessage = forwardMessage(fromChat.id, toChatId, messageId, threadId, directMessageThreadId, startTimestamp, disableNotification, protectContent)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessage(
|
|
||||||
fromChatId: ChatIdentifier,
|
|
||||||
toChat: Chat,
|
|
||||||
messageId: MessageId,
|
|
||||||
threadId: MessageThreadId? = toChat.id.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChat.id.directMessageThreadId,
|
|
||||||
startTimestamp: Seconds? = null,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false
|
|
||||||
): PossiblyForwardedMessage = forwardMessage(fromChatId, toChat.id, messageId, threadId, directMessageThreadId, startTimestamp, disableNotification, protectContent)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessage(
|
|
||||||
fromChat: Chat,
|
|
||||||
toChat: Chat,
|
|
||||||
messageId: MessageId,
|
|
||||||
threadId: MessageThreadId? = toChat.id.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChat.id.directMessageThreadId,
|
|
||||||
startTimestamp: Seconds? = null,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false
|
|
||||||
): PossiblyForwardedMessage = forwardMessage(fromChat.id, toChat.id, messageId, threadId, directMessageThreadId, startTimestamp, disableNotification, protectContent)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessage(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
message: AccessibleMessage,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
startTimestamp: Seconds? = null,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false
|
|
||||||
): PossiblyForwardedMessage = forwardMessage(message.chat, toChatId, message.messageId, threadId, directMessageThreadId, startTimestamp, disableNotification, protectContent)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessage(
|
|
||||||
toChat: Chat,
|
|
||||||
message: AccessibleMessage,
|
|
||||||
threadId: MessageThreadId? = toChat.id.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChat.id.directMessageThreadId,
|
|
||||||
startTimestamp: Seconds? = null,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false
|
|
||||||
): PossiblyForwardedMessage = forwardMessage(message.chat, toChat, message.messageId, threadId, directMessageThreadId, startTimestamp, disableNotification, protectContent)
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.copyMessages
|
|
||||||
import dev.inmo.tgbotapi.requests.ForwardMessages
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
|
||||||
import kotlin.jvm.JvmName
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessages(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
fromChatId: ChatIdentifier,
|
|
||||||
messageIds: List<MessageId>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = messageIds.chunked(forwardMessagesLimit.last).flatMap {
|
|
||||||
execute(
|
|
||||||
ForwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
fromChatId = fromChatId,
|
|
||||||
messageIds = it,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessages(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
fromChatId: ChatIdentifier,
|
|
||||||
messageIds: Array<MessageId>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
fromChatId = fromChatId,
|
|
||||||
messageIds = messageIds.toList(),
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forwardMessages(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
messagesMetas: List<Message.MetaInfo>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = messagesMetas.groupBy { it.chatId }.flatMap { (chatId, messages) ->
|
|
||||||
forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
fromChatId = chatId,
|
|
||||||
messageIds = messages.map { it.messageId },
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@JvmName("forwardMessagesWithMessages")
|
|
||||||
public suspend fun TelegramBot.forwardMessages(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
messages: List<AccessibleMessage>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
messagesMetas = messages.map { it.metaInfo },
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forward(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
fromChatId: ChatIdentifier,
|
|
||||||
messageIds: List<MessageId>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
fromChatId = fromChatId,
|
|
||||||
messageIds = messageIds,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forward(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
fromChatId: ChatIdentifier,
|
|
||||||
messageIds: Array<MessageId>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
fromChatId = fromChatId,
|
|
||||||
messageIds = messageIds,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.forward(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
messagesMetas: List<Message.MetaInfo>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
messagesMetas = messagesMetas,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
|
|
||||||
@JvmName("forwardWithMessages")
|
|
||||||
public suspend fun TelegramBot.forward(
|
|
||||||
toChatId: ChatIdentifier,
|
|
||||||
messages: List<AccessibleMessage>,
|
|
||||||
threadId: MessageThreadId? = toChatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = toChatId.directMessageThreadId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
removeCaption: Boolean = false
|
|
||||||
): List<MessageId> = forwardMessages(
|
|
||||||
toChatId = toChatId,
|
|
||||||
messages = messages,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
removeCaption = removeCaption
|
|
||||||
)
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.GetUpdatesRaw
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
|
||||||
import kotlinx.serialization.json.JsonArray
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getRawUpdates(
|
|
||||||
offset: UpdateId? = null,
|
|
||||||
limit: Int = getUpdatesLimit.last,
|
|
||||||
timeout: Seconds? = null,
|
|
||||||
allowed_updates: List<String>? = ALL_UPDATES_LIST
|
|
||||||
): JsonArray = execute(
|
|
||||||
GetUpdatesRaw(
|
|
||||||
offset, limit, timeout, allowed_updates
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getRawUpdates(
|
|
||||||
lastUpdate: Update,
|
|
||||||
limit: Int = getUpdatesLimit.last,
|
|
||||||
timeout: Seconds? = null,
|
|
||||||
allowed_updates: List<String>? = ALL_UPDATES_LIST
|
|
||||||
): JsonArray = getRawUpdates(
|
|
||||||
lastUpdate.updateId + 1, limit, timeout, allowed_updates
|
|
||||||
)
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.InternalUtils
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.MediaGroupId
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
|
||||||
import dev.inmo.tgbotapi.types.update.*
|
|
||||||
import dev.inmo.tgbotapi.types.update.abstracts.*
|
|
||||||
import dev.inmo.tgbotapi.utils.extensions.asMediaGroupMessage
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will convert incoming list of updates to list with [MediaGroupUpdate]s
|
|
||||||
*/
|
|
||||||
internal fun List<Update>.convertWithMediaGroupUpdates(): List<Update> {
|
|
||||||
val resultUpdates = mutableListOf<Update>()
|
|
||||||
val mediaGroups = mutableMapOf<MediaGroupId, MutableList<Pair<BaseSentMessageUpdate, PossiblySentViaBotCommonMessage<MediaGroupPartContent>>>>()
|
|
||||||
|
|
||||||
for (update in this) {
|
|
||||||
val message = (update.data as? PossiblySentViaBotCommonMessage<*>) ?.let {
|
|
||||||
if (it.content is MediaGroupPartContent) {
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
it as PossiblySentViaBotCommonMessage<MediaGroupPartContent>
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val mediaGroupId = message ?.mediaGroupId
|
|
||||||
if (message == null || mediaGroupId == null) {
|
|
||||||
resultUpdates.add(update)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
when (update) {
|
|
||||||
is BaseSentMessageUpdate -> {
|
|
||||||
mediaGroups.getOrPut(mediaGroupId) {
|
|
||||||
mutableListOf()
|
|
||||||
}.add(update to message)
|
|
||||||
}
|
|
||||||
else -> resultUpdates.add(update)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaGroups.map { (_, updatesWithMessages) ->
|
|
||||||
val update = updatesWithMessages.maxBy { it.first.updateId }.first
|
|
||||||
resultUpdates.add(
|
|
||||||
update.copy(updatesWithMessages.map { it.second }.asMediaGroupMessage())
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
resultUpdates.sortBy { it.updateId }
|
|
||||||
return resultUpdates
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun BaseEditMessageUpdate.toEditMediaGroupUpdate(): BaseEditMessageUpdate = this
|
|
||||||
@@ -1,210 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.coroutines.LinkedSupervisorScope
|
|
||||||
import dev.inmo.tgbotapi.abstracts.Headed
|
|
||||||
import dev.inmo.tgbotapi.abstracts.HorizontallyAccured
|
|
||||||
import dev.inmo.tgbotapi.abstracts.Locationed
|
|
||||||
import dev.inmo.tgbotapi.abstracts.ProximityAlertable
|
|
||||||
import dev.inmo.tgbotapi.abstracts.types.WithReplyMarkup
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.edit.edit
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.send
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.sendLiveLocation
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
|
||||||
import dev.inmo.tgbotapi.types.location.LiveLocation
|
|
||||||
import dev.inmo.tgbotapi.types.location.Location
|
|
||||||
import dev.inmo.tgbotapi.types.message.SuggestedPostParameters
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.content.LiveLocationContent
|
|
||||||
import dev.inmo.tgbotapi.types.message.content.LocationContent
|
|
||||||
import dev.inmo.tgbotapi.utils.launchWithBotLogger
|
|
||||||
import kotlinx.coroutines.CoroutineStart
|
|
||||||
import kotlinx.coroutines.currentCoroutineContext
|
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.FlowCollector
|
|
||||||
import kotlinx.coroutines.flow.map
|
|
||||||
import kotlinx.coroutines.isActive
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import kotlin.js.JsName
|
|
||||||
import kotlin.jvm.JvmName
|
|
||||||
import kotlin.math.ceil
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
public data class EditLiveLocationInfo(
|
|
||||||
override val latitude: Double,
|
|
||||||
override val longitude: Double,
|
|
||||||
override val horizontalAccuracy: Meters? = null,
|
|
||||||
override val heading: Degrees? = null,
|
|
||||||
override val proximityAlertRadius: Meters? = null,
|
|
||||||
override val replyMarkup: InlineKeyboardMarkup? = null
|
|
||||||
) : Locationed, HorizontallyAccured, ProximityAlertable, Headed, WithReplyMarkup
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will [sendLiveLocation] with the first [EditLiveLocationInfo] data and update than. Each [liveTimeMillis] passing,
|
|
||||||
* the message will be sent again and new edits will be applied to the new message
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.handleLiveLocation(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
locationsFlow: Flow<EditLiveLocationInfo>,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
threadId: MessageThreadId? = chatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
sentMessageFlow: FlowCollector<ContentMessage<LiveLocationContent>>? = null
|
|
||||||
) {
|
|
||||||
var currentLiveLocationMessage: ContentMessage<LiveLocationContent>? = null
|
|
||||||
val updateMessageJob = if (liveTimeMillis == indefiniteLivePeriodDelayMillis) { // do not launch refreshing of message for indefinite live locations
|
|
||||||
null
|
|
||||||
} else {
|
|
||||||
val scope = currentCoroutineContext().LinkedSupervisorScope()
|
|
||||||
scope.launchWithBotLogger(start = CoroutineStart.LAZY) {
|
|
||||||
while (scope.isActive) {
|
|
||||||
delay(liveTimeMillis)
|
|
||||||
// Remove previous location message info to resend live location message
|
|
||||||
currentLiveLocationMessage = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
locationsFlow.collect {
|
|
||||||
val capturedLiveLocationMessage = currentLiveLocationMessage
|
|
||||||
if (capturedLiveLocationMessage == null) {
|
|
||||||
updateMessageJob ?.start()
|
|
||||||
currentLiveLocationMessage = send(
|
|
||||||
chatId = chatId,
|
|
||||||
latitude = it.latitude,
|
|
||||||
longitude = it.longitude,
|
|
||||||
livePeriod = if (liveTimeMillis == indefiniteLivePeriodDelayMillis) {
|
|
||||||
LiveLocation.INDEFINITE_LIVE_PERIOD
|
|
||||||
} else {
|
|
||||||
ceil(liveTimeMillis.toDouble() / 1000).toInt()
|
|
||||||
},
|
|
||||||
horizontalAccuracy = it.horizontalAccuracy,
|
|
||||||
heading = it.heading,
|
|
||||||
proximityAlertRadius = it.proximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
replyMarkup = it.replyMarkup
|
|
||||||
).also {
|
|
||||||
sentMessageFlow ?.emit(it)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
edit(
|
|
||||||
message = capturedLiveLocationMessage,
|
|
||||||
latitude = it.latitude,
|
|
||||||
longitude = it.longitude,
|
|
||||||
horizontalAccuracy = it.horizontalAccuracy,
|
|
||||||
heading = it.heading,
|
|
||||||
proximityAlertRadius = it.proximityAlertRadius,
|
|
||||||
replyMarkup = it.replyMarkup
|
|
||||||
).also {
|
|
||||||
sentMessageFlow ?.emit(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will apply [Flow.map] to the [locationsFlow] to create [EditLiveLocationInfo] and pass the result flow to the
|
|
||||||
* [handleLiveLocation] with [Flow] typed by [EditLiveLocationInfo]
|
|
||||||
*/
|
|
||||||
@JvmName("handleLiveLocationWithLocation")
|
|
||||||
@JsName("handleLiveLocationWithLocation")
|
|
||||||
public suspend fun TelegramBot.handleLiveLocation(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
locationsFlow: Flow<Location>,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
threadId: MessageThreadId? = chatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
sentMessageFlow: FlowCollector<ContentMessage<LiveLocationContent>>? = null
|
|
||||||
) {
|
|
||||||
handleLiveLocation(
|
|
||||||
chatId = chatId,
|
|
||||||
locationsFlow = locationsFlow.map {
|
|
||||||
EditLiveLocationInfo(
|
|
||||||
it.latitude,
|
|
||||||
it.longitude,
|
|
||||||
it.horizontalAccuracy,
|
|
||||||
(it as? LiveLocation) ?.heading,
|
|
||||||
(it as? LiveLocation) ?.proximityAlertRadius,
|
|
||||||
(it as? WithReplyMarkup) ?.replyMarkup as? InlineKeyboardMarkup
|
|
||||||
)
|
|
||||||
},
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
sentMessageFlow = sentMessageFlow
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will apply [Flow.map] to the [locationsFlow] to create [EditLiveLocationInfo] and pass the result flow to the
|
|
||||||
* [handleLiveLocation] with [Flow] typed by [EditLiveLocationInfo]
|
|
||||||
*/
|
|
||||||
@JvmName("handleLiveLocationWithLatLong")
|
|
||||||
@JsName("handleLiveLocationWithLatLong")
|
|
||||||
public suspend fun TelegramBot.handleLiveLocation(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
locationsFlow: Flow<Pair<Double, Double>>,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
threadId: MessageThreadId? = chatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
sentMessageFlow: FlowCollector<ContentMessage<LiveLocationContent>>? = null
|
|
||||||
) {
|
|
||||||
handleLiveLocation(
|
|
||||||
chatId = chatId,
|
|
||||||
locationsFlow = locationsFlow.map { (lat, long) ->
|
|
||||||
EditLiveLocationInfo(
|
|
||||||
lat,
|
|
||||||
long
|
|
||||||
)
|
|
||||||
},
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
sentMessageFlow = sentMessageFlow
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -1,358 +0,0 @@
|
|||||||
@file:Suppress("KDocUnresolvedReference")
|
|
||||||
|
|
||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import korlibs.time.DateTime
|
|
||||||
import korlibs.time.TimeSpan
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.edit.location.live.editLiveLocation
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.edit.location.live.stopLiveLocation
|
|
||||||
import dev.inmo.tgbotapi.requests.send.SendLiveLocation
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.message.SuggestedPostParameters
|
|
||||||
import dev.inmo.tgbotapi.types.location.LiveLocation
|
|
||||||
import dev.inmo.tgbotapi.types.location.StaticLocation
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.message.content.LocationContent
|
|
||||||
import dev.inmo.tgbotapi.utils.extensions.directMessageThreadIdOrNull
|
|
||||||
import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull
|
|
||||||
import io.ktor.utils.io.core.Closeable
|
|
||||||
import korlibs.time.millisecondsLong
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlin.math.ceil
|
|
||||||
|
|
||||||
public const val indefiniteLivePeriodDelayMillis: Long = LiveLocation.INDEFINITE_LIVE_PERIOD * 1000L
|
|
||||||
public const val defaultLivePeriodDelayMillis: Long = indefiniteLivePeriodDelayMillis
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see startLiveLocation
|
|
||||||
*/
|
|
||||||
public class LiveLocationProvider internal constructor(
|
|
||||||
private val requestsExecutor: TelegramBot,
|
|
||||||
scope: CoroutineScope,
|
|
||||||
autoCloseTimeDelay: Double,
|
|
||||||
initMessage: ContentMessage<LocationContent>
|
|
||||||
) : Closeable {
|
|
||||||
private val doWhenClose = {
|
|
||||||
scope.launch {
|
|
||||||
requestsExecutor.stopLiveLocation(message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private val autoCloseTime = DateTime.now() + TimeSpan(autoCloseTimeDelay)
|
|
||||||
public val leftUntilCloseMillis: TimeSpan
|
|
||||||
get() = autoCloseTime - DateTime.now()
|
|
||||||
|
|
||||||
public var isClosed: Boolean = false
|
|
||||||
private set
|
|
||||||
get() = field || leftUntilCloseMillis.millisecondsLong < 0L
|
|
||||||
|
|
||||||
public var message: ContentMessage<LocationContent> = initMessage
|
|
||||||
private set
|
|
||||||
public val lastLocation: LiveLocation
|
|
||||||
get() = message.content.location as LiveLocation
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
|
||||||
* as a builder for that
|
|
||||||
*/
|
|
||||||
public suspend fun updateLocation(
|
|
||||||
location: LiveLocation,
|
|
||||||
replyMarkup: InlineKeyboardMarkup? = null
|
|
||||||
): LiveLocation {
|
|
||||||
if (!isClosed) {
|
|
||||||
message = requestsExecutor.editLiveLocation(
|
|
||||||
message,
|
|
||||||
location,
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
return lastLocation
|
|
||||||
} else {
|
|
||||||
error("LiveLocation is closed")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
if (isClosed) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isClosed = true
|
|
||||||
doWhenClose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some of [KeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.replyKeyboard] or
|
|
||||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.startLiveLocation(
|
|
||||||
scope: CoroutineScope,
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
latitude: Double,
|
|
||||||
longitude: Double,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
initHorizontalAccuracy: Meters? = null,
|
|
||||||
initHeading: Degrees? = null,
|
|
||||||
initProximityAlertRadius: Meters? = null,
|
|
||||||
threadId: MessageThreadId? = chatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
replyMarkup: KeyboardMarkup? = null
|
|
||||||
): LiveLocationProvider {
|
|
||||||
val liveTimeAsDouble = liveTimeMillis.toDouble()
|
|
||||||
val locationMessage = execute(
|
|
||||||
SendLiveLocation(
|
|
||||||
chatId = chatId,
|
|
||||||
latitude = latitude,
|
|
||||||
longitude = longitude,
|
|
||||||
livePeriod = ceil(liveTimeAsDouble / 1000).toInt(),
|
|
||||||
horizontalAccuracy = initHorizontalAccuracy,
|
|
||||||
heading = initHeading,
|
|
||||||
proximityAlertRadius = initProximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return LiveLocationProvider(
|
|
||||||
this,
|
|
||||||
scope,
|
|
||||||
liveTimeAsDouble,
|
|
||||||
locationMessage
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some of [KeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.replyKeyboard] or
|
|
||||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.startLiveLocation(
|
|
||||||
scope: CoroutineScope,
|
|
||||||
chat: Chat,
|
|
||||||
latitude: Double,
|
|
||||||
longitude: Double,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
initHorizontalAccuracy: Meters? = null,
|
|
||||||
initHeading: Degrees? = null,
|
|
||||||
initProximityAlertRadius: Meters? = null,
|
|
||||||
threadId: MessageThreadId? = chat.id.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chat.id.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
replyMarkup: KeyboardMarkup? = null
|
|
||||||
): LiveLocationProvider = startLiveLocation(
|
|
||||||
scope = scope,
|
|
||||||
chatId = chat.id,
|
|
||||||
latitude = latitude,
|
|
||||||
longitude = longitude,
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
initHorizontalAccuracy = initHorizontalAccuracy,
|
|
||||||
initHeading = initHeading,
|
|
||||||
initProximityAlertRadius = initProximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some of [KeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.replyKeyboard] or
|
|
||||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.startLiveLocation(
|
|
||||||
scope: CoroutineScope,
|
|
||||||
chatId: IdChatIdentifier,
|
|
||||||
location: StaticLocation,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
initHorizontalAccuracy: Meters? = null,
|
|
||||||
initHeading: Degrees? = null,
|
|
||||||
initProximityAlertRadius: Meters? = null,
|
|
||||||
threadId: MessageThreadId? = chatId.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
replyMarkup: KeyboardMarkup? = null
|
|
||||||
): LiveLocationProvider = startLiveLocation(
|
|
||||||
scope = scope,
|
|
||||||
chatId = chatId,
|
|
||||||
latitude = location.latitude,
|
|
||||||
longitude = location.longitude,
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
initHorizontalAccuracy = initHorizontalAccuracy,
|
|
||||||
initHeading = initHeading,
|
|
||||||
initProximityAlertRadius = initProximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some of [KeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.replyKeyboard] or
|
|
||||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.startLiveLocation(
|
|
||||||
scope: CoroutineScope,
|
|
||||||
chat: Chat,
|
|
||||||
location: StaticLocation,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
initHorizontalAccuracy: Meters? = null,
|
|
||||||
initHeading: Degrees? = null,
|
|
||||||
initProximityAlertRadius: Meters? = null,
|
|
||||||
threadId: MessageThreadId? = chat.id.threadId,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chat.id.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
replyParameters: ReplyParameters? = null,
|
|
||||||
replyMarkup: KeyboardMarkup? = null
|
|
||||||
): LiveLocationProvider = startLiveLocation(
|
|
||||||
scope = scope,
|
|
||||||
chatId = chat.id,
|
|
||||||
latitude = location.latitude,
|
|
||||||
longitude = location.longitude,
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
initHorizontalAccuracy = initHorizontalAccuracy,
|
|
||||||
initHeading = initHeading,
|
|
||||||
initProximityAlertRadius = initProximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = replyParameters,
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some of [KeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.replyKeyboard] or
|
|
||||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
|
||||||
*/
|
|
||||||
public suspend inline fun TelegramBot.replyWithLiveLocation(
|
|
||||||
to: AccessibleMessage,
|
|
||||||
scope: CoroutineScope,
|
|
||||||
latitude: Double,
|
|
||||||
longitude: Double,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
initHorizontalAccuracy: Meters? = null,
|
|
||||||
initHeading: Degrees? = null,
|
|
||||||
initProximityAlertRadius: Meters? = null,
|
|
||||||
threadId: MessageThreadId? = to.threadIdOrNull,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = to.directMessageThreadIdOrNull,
|
|
||||||
businessConnectionId: BusinessConnectionId? = to.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
allowSendingWithoutReply: Boolean? = null,
|
|
||||||
replyMarkup: KeyboardMarkup? = null
|
|
||||||
): LiveLocationProvider = startLiveLocation(
|
|
||||||
scope = scope,
|
|
||||||
chat = to.chat,
|
|
||||||
latitude = latitude,
|
|
||||||
longitude = longitude,
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
initHorizontalAccuracy = initHorizontalAccuracy,
|
|
||||||
initHeading = initHeading,
|
|
||||||
initProximityAlertRadius = initProximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = ReplyParameters(to.metaInfo, allowSendingWithoutReply = allowSendingWithoutReply),
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some of [KeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.replyKeyboard] or
|
|
||||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
|
||||||
*/
|
|
||||||
public suspend inline fun TelegramBot.replyWithLiveLocation(
|
|
||||||
to: AccessibleMessage,
|
|
||||||
scope: CoroutineScope,
|
|
||||||
location: StaticLocation,
|
|
||||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
|
||||||
initHorizontalAccuracy: Meters? = null,
|
|
||||||
initHeading: Degrees? = null,
|
|
||||||
initProximityAlertRadius: Meters? = null,
|
|
||||||
threadId: MessageThreadId? = to.threadIdOrNull,
|
|
||||||
directMessageThreadId: DirectMessageThreadId? = to.directMessageThreadIdOrNull,
|
|
||||||
businessConnectionId: BusinessConnectionId? = to.businessConnectionId,
|
|
||||||
disableNotification: Boolean = false,
|
|
||||||
protectContent: Boolean = false,
|
|
||||||
allowPaidBroadcast: Boolean = false,
|
|
||||||
effectId: EffectId? = null,
|
|
||||||
suggestedPostParameters: SuggestedPostParameters? = null,
|
|
||||||
allowSendingWithoutReply: Boolean? = null,
|
|
||||||
replyMarkup: KeyboardMarkup? = null
|
|
||||||
): LiveLocationProvider = startLiveLocation(
|
|
||||||
scope = scope,
|
|
||||||
chat = to.chat,
|
|
||||||
location = location,
|
|
||||||
liveTimeMillis = liveTimeMillis,
|
|
||||||
initHorizontalAccuracy = initHorizontalAccuracy,
|
|
||||||
initHeading = initHeading,
|
|
||||||
initProximityAlertRadius = initProximityAlertRadius,
|
|
||||||
threadId = threadId,
|
|
||||||
directMessageThreadId = directMessageThreadId,
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
disableNotification = disableNotification,
|
|
||||||
protectContent = protectContent,
|
|
||||||
allowPaidBroadcast = allowPaidBroadcast,
|
|
||||||
effectId = effectId,
|
|
||||||
suggestedPostParameters = suggestedPostParameters,
|
|
||||||
replyParameters = ReplyParameters(to.metaInfo, allowSendingWithoutReply = allowSendingWithoutReply),
|
|
||||||
replyMarkup = replyMarkup
|
|
||||||
)
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.local.LogOut
|
|
||||||
|
|
||||||
public suspend inline fun TelegramBot.logOut(): Boolean = execute(LogOut)
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.StopPoll
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.polls.Poll
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
|
||||||
* as a builder for that
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.stopPoll(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageId: MessageId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
replyMarkup: InlineKeyboardMarkup? = null
|
|
||||||
): Poll = execute(
|
|
||||||
StopPoll(chatId, messageId, businessConnectionId, replyMarkup)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
|
||||||
* as a builder for that
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.stopPoll(
|
|
||||||
chat: Chat,
|
|
||||||
messageId: MessageId,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chat.id.businessConnectionId,
|
|
||||||
replyMarkup: InlineKeyboardMarkup? = null
|
|
||||||
): Poll = stopPoll(chat.id, messageId, businessConnectionId, replyMarkup)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
|
||||||
* as a builder for that
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.stopPoll(
|
|
||||||
chatId: IdChatIdentifier,
|
|
||||||
message: AccessibleMessage,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
|
||||||
replyMarkup: InlineKeyboardMarkup? = null
|
|
||||||
): Poll = stopPoll(chatId, message.messageId, businessConnectionId, replyMarkup)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
|
||||||
* as a builder for that
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.stopPoll(
|
|
||||||
chat: Chat,
|
|
||||||
message: AccessibleMessage,
|
|
||||||
businessConnectionId: BusinessConnectionId? = chat.id.businessConnectionId,
|
|
||||||
replyMarkup: InlineKeyboardMarkup? = null
|
|
||||||
): Poll = stopPoll(chat.id, message.messageId, businessConnectionId, replyMarkup)
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.answers
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.answers.AnswerCallbackQuery
|
|
||||||
import dev.inmo.tgbotapi.types.queries.callback.CallbackQuery
|
|
||||||
import dev.inmo.tgbotapi.types.CallbackQueryId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerCallbackQuery(
|
|
||||||
callbackQueryId: CallbackQueryId,
|
|
||||||
text: String? = null,
|
|
||||||
showAlert: Boolean? = null,
|
|
||||||
url: String? = null,
|
|
||||||
cachedTimeSeconds: Int? = null
|
|
||||||
): Boolean = execute(AnswerCallbackQuery(callbackQueryId, text, showAlert, url, cachedTimeSeconds))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerCallbackQuery(
|
|
||||||
callbackQuery: CallbackQuery,
|
|
||||||
text: String? = null,
|
|
||||||
showAlert: Boolean? = null,
|
|
||||||
url: String? = null,
|
|
||||||
cachedTimeSeconds: Int? = null
|
|
||||||
): Boolean = answerCallbackQuery(callbackQuery.id, text, showAlert, url, cachedTimeSeconds)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answer(
|
|
||||||
callbackQuery: CallbackQuery,
|
|
||||||
text: String? = null,
|
|
||||||
showAlert: Boolean? = null,
|
|
||||||
url: String? = null,
|
|
||||||
cachedTimeSeconds: Int? = null
|
|
||||||
): Boolean = answerCallbackQuery(callbackQuery.id, text, showAlert, url, cachedTimeSeconds)
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.answers
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.answers.AnswerInlineQuery
|
|
||||||
import dev.inmo.tgbotapi.requests.answers.InlineQueryResultsButton
|
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.InlineQueryResult
|
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery
|
|
||||||
import dev.inmo.tgbotapi.types.InlineQueryId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerInlineQuery(
|
|
||||||
inlineQueryID: InlineQueryId,
|
|
||||||
results: List<InlineQueryResult> = emptyList(),
|
|
||||||
cachedTime: Int? = null,
|
|
||||||
isPersonal: Boolean? = null,
|
|
||||||
nextOffset: String? = null,
|
|
||||||
button: InlineQueryResultsButton? = null
|
|
||||||
): Boolean = execute(
|
|
||||||
AnswerInlineQuery(inlineQueryID, results, cachedTime, isPersonal, nextOffset, button)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerInlineQuery(
|
|
||||||
inlineQuery: InlineQuery,
|
|
||||||
results: List<InlineQueryResult> = emptyList(),
|
|
||||||
cachedTime: Int? = null,
|
|
||||||
isPersonal: Boolean? = null,
|
|
||||||
nextOffset: String? = null,
|
|
||||||
button: InlineQueryResultsButton? = null
|
|
||||||
): Boolean = answerInlineQuery(inlineQuery.id, results, cachedTime, isPersonal, nextOffset, button)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answer(
|
|
||||||
inlineQuery: InlineQuery,
|
|
||||||
results: List<InlineQueryResult> = emptyList(),
|
|
||||||
cachedTime: Int? = null,
|
|
||||||
isPersonal: Boolean? = null,
|
|
||||||
nextOffset: String? = null,
|
|
||||||
button: InlineQueryResultsButton? = null
|
|
||||||
): Boolean = answerInlineQuery(inlineQuery.id, results, cachedTime, isPersonal, nextOffset, button)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerInlineQuery(
|
|
||||||
inlineQueryID: InlineQueryId,
|
|
||||||
results: List<InlineQueryResult> = emptyList(),
|
|
||||||
cachedTime: Int? = null,
|
|
||||||
isPersonal: Boolean? = null,
|
|
||||||
nextOffset: String? = null,
|
|
||||||
switchPmText: String?,
|
|
||||||
switchPmParameter: String?
|
|
||||||
): Boolean = execute(
|
|
||||||
AnswerInlineQuery(inlineQueryID, results, cachedTime, isPersonal, nextOffset, switchPmText, switchPmParameter)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerInlineQuery(
|
|
||||||
inlineQuery: InlineQuery,
|
|
||||||
results: List<InlineQueryResult> = emptyList(),
|
|
||||||
cachedTime: Int? = null,
|
|
||||||
isPersonal: Boolean? = null,
|
|
||||||
nextOffset: String? = null,
|
|
||||||
switchPmText: String?,
|
|
||||||
switchPmParameter: String?
|
|
||||||
): Boolean = answerInlineQuery(inlineQuery.id, results, cachedTime, isPersonal, nextOffset, switchPmText, switchPmParameter)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answer(
|
|
||||||
inlineQuery: InlineQuery,
|
|
||||||
results: List<InlineQueryResult> = emptyList(),
|
|
||||||
cachedTime: Int? = null,
|
|
||||||
isPersonal: Boolean? = null,
|
|
||||||
nextOffset: String? = null,
|
|
||||||
switchPmText: String?,
|
|
||||||
switchPmParameter: String?
|
|
||||||
): Boolean = answerInlineQuery(inlineQuery.id, results, cachedTime, isPersonal, nextOffset, switchPmText, switchPmParameter)
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.answers
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.answers.AnswerWebAppQuery
|
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.InlineQueryResult
|
|
||||||
import dev.inmo.tgbotapi.types.WebAppQueryId
|
|
||||||
import dev.inmo.tgbotapi.types.webapps.query.SentWebAppMessage
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerWebAppQuery(
|
|
||||||
webAppQueryId: WebAppQueryId,
|
|
||||||
result: InlineQueryResult
|
|
||||||
): SentWebAppMessage = execute(AnswerWebAppQuery(webAppQueryId, result))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answer(
|
|
||||||
webAppQueryId: WebAppQueryId,
|
|
||||||
result: InlineQueryResult
|
|
||||||
): SentWebAppMessage = execute(AnswerWebAppQuery(webAppQueryId, result))
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.answers.payments
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.answers.payments.AnswerShippingQueryError
|
|
||||||
import dev.inmo.tgbotapi.requests.answers.payments.AnswerShippingQueryOk
|
|
||||||
import dev.inmo.tgbotapi.types.ShippingQueryId
|
|
||||||
import dev.inmo.tgbotapi.types.payments.ShippingOption
|
|
||||||
import dev.inmo.tgbotapi.types.payments.ShippingQuery
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerShippingQueryOk(
|
|
||||||
id: ShippingQueryId,
|
|
||||||
shippingOptions: List<ShippingOption>
|
|
||||||
): Boolean = execute(AnswerShippingQueryOk(id, shippingOptions))
|
|
||||||
public suspend fun TelegramBot.answerShippingQueryOk(
|
|
||||||
shippingQuery: ShippingQuery,
|
|
||||||
shippingOptions: List<ShippingOption>
|
|
||||||
): Boolean = answerShippingQueryOk(shippingQuery.id, shippingOptions)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.answerShippingQueryError(
|
|
||||||
id: ShippingQueryId,
|
|
||||||
error: String
|
|
||||||
): Boolean = execute(AnswerShippingQueryError(id, error))
|
|
||||||
public suspend fun TelegramBot.answerShippingQueryError(
|
|
||||||
shippingQuery: ShippingQuery,
|
|
||||||
error: String
|
|
||||||
): Boolean = answerShippingQueryError(shippingQuery.id, error)
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.ClearMyDefaultAdministratorRights
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.clearMyDefaultAdministratorRights(
|
|
||||||
forChannels: Boolean? = null
|
|
||||||
): Boolean = execute(ClearMyDefaultAdministratorRights(forChannels))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.clearMyDefaultAdministratorRightsForChannels(): Boolean = clearMyDefaultAdministratorRights(forChannels = true)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.clearMyDefaultAdministratorRightsForGroupsAndSupergroups(): Boolean = clearMyDefaultAdministratorRights(forChannels = false)
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.DeleteMyCommands
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScopeDefault
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMyCommands(
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: IetfLang?
|
|
||||||
): Boolean = execute(DeleteMyCommands(scope, languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteMyCommands(
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: String? = null
|
|
||||||
): Boolean = deleteMyCommands(scope, languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyCommands
|
|
||||||
import dev.inmo.tgbotapi.types.BotCommand
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScopeDefault
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyCommands(
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): List<BotCommand> = execute(GetMyCommands(scope, languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyCommands(
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: String?
|
|
||||||
): List<BotCommand> = getMyCommands(scope, languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyDefaultAdministratorRights
|
|
||||||
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyDefaultAdministratorRights(
|
|
||||||
forChannels: Boolean? = null
|
|
||||||
): AdministratorChatMember = execute(GetMyDefaultAdministratorRights(forChannels))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyDefaultAdministratorRightsForChannels(): AdministratorChatMember = getMyDefaultAdministratorRights(forChannels = true)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyDefaultAdministratorRightsForGroupsAndSupergroups(): AdministratorChatMember = getMyDefaultAdministratorRights(forChannels = false)
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyDescription
|
|
||||||
import dev.inmo.tgbotapi.types.BotDescription
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyDescription(
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): BotDescription = execute(GetMyDescription(languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyDescription(
|
|
||||||
languageCode: String?
|
|
||||||
): BotDescription = getMyDescription(languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyName
|
|
||||||
import dev.inmo.tgbotapi.types.BotName
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyName(
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): BotName = execute(GetMyName(languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyName(
|
|
||||||
languageCode: String?
|
|
||||||
): BotName = getMyName(languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyCommands
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyShortDescription
|
|
||||||
import dev.inmo.tgbotapi.types.BotShortDescription
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScopeDefault
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyShortDescription(
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): BotShortDescription = execute(GetMyShortDescription(languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyShortDescription(
|
|
||||||
languageCode: String?
|
|
||||||
): BotShortDescription = getMyShortDescription(languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMe
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyStarBalance
|
|
||||||
import dev.inmo.tgbotapi.types.chat.ExtendedBot
|
|
||||||
import dev.inmo.tgbotapi.types.payments.stars.StarAmount
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getMyStarBalance(): StarAmount = execute(GetMyStarBalance)
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.SetMyCommands
|
|
||||||
import dev.inmo.tgbotapi.types.BotCommand
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScopeDefault
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyCommands(
|
|
||||||
commands: List<BotCommand>,
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: IetfLang?
|
|
||||||
): Boolean = execute(SetMyCommands(commands, scope, languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyCommands(
|
|
||||||
vararg commands: BotCommand,
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: IetfLang?
|
|
||||||
): Boolean = setMyCommands(commands.toList(), scope, languageCode)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyCommands(
|
|
||||||
commands: List<BotCommand>,
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: String? = null
|
|
||||||
): Boolean = setMyCommands(commands, scope, languageCode ?.let(::IetfLang))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyCommands(
|
|
||||||
vararg commands: BotCommand,
|
|
||||||
scope: BotCommandScope = BotCommandScopeDefault,
|
|
||||||
languageCode: String? = null
|
|
||||||
): Boolean = setMyCommands(commands.toList(), scope, languageCode)
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.SetMyDefaultAdministratorRights
|
|
||||||
import dev.inmo.tgbotapi.types.chat.member.ChatCommonAdministratorRights
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyDefaultAdministratorRights(
|
|
||||||
rights: ChatCommonAdministratorRights,
|
|
||||||
forChannels: Boolean? = null
|
|
||||||
): Boolean = execute(SetMyDefaultAdministratorRights(rights, forChannels))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyDefaultAdministratorRightsForChannels(
|
|
||||||
rights: ChatCommonAdministratorRights
|
|
||||||
): Boolean = setMyDefaultAdministratorRights(rights, forChannels = true)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyDefaultAdministratorRightsForGroupsAndSupergroups(
|
|
||||||
rights: ChatCommonAdministratorRights
|
|
||||||
): Boolean = setMyDefaultAdministratorRights(rights, forChannels = false)
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyCommands
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyDescription
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.SetMyDescription
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScopeDefault
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyDescription(
|
|
||||||
description: String? = null,
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): Boolean = execute(SetMyDescription(description, languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyDescription(
|
|
||||||
description: String?,
|
|
||||||
languageCode: String?
|
|
||||||
): Boolean = setMyDescription(description, languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyCommands
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.GetMyName
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.SetMyName
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
|
||||||
import dev.inmo.tgbotapi.types.commands.BotCommandScopeDefault
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyName(
|
|
||||||
name: String? = null,
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): Boolean = execute(SetMyName(name, languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyName(
|
|
||||||
name: String?,
|
|
||||||
languageCode: String?
|
|
||||||
): Boolean = setMyName(name, languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.bot
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.bot.SetMyShortDescription
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyShortDescription(
|
|
||||||
shortDescription: String? = null,
|
|
||||||
languageCode: IetfLang? = null
|
|
||||||
): Boolean = execute(SetMyShortDescription(shortDescription, languageCode))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setMyShortDescription(
|
|
||||||
shortDescription: String?,
|
|
||||||
languageCode: String?
|
|
||||||
): Boolean = setMyShortDescription(shortDescription, languageCode ?.let(::IetfLang))
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerateVariations
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerationVariant
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.ConvertGiftToStars
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.GiftId
|
|
||||||
import dev.inmo.tgbotapi.types.gifts.Gift
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.convertGiftToStars(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
ownedGiftId: GiftId
|
|
||||||
): Boolean = execute(
|
|
||||||
ConvertGiftToStars(businessConnectionId, ownedGiftId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.convertGiftToStars(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
gift: Gift.Regular
|
|
||||||
): Boolean = convertGiftToStars(
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
ownedGiftId = with(gift) {id}
|
|
||||||
)
|
|
||||||
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerateVariations
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerationVariant
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.DeleteBusinessMessages
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.ChatId
|
|
||||||
import dev.inmo.tgbotapi.types.MessageId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
|
|
||||||
@GenerateVariations
|
|
||||||
public suspend fun TelegramBot.deleteBusinessMessages(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
@GenerationVariant(List::class, "messages.map { it.messageId }", "messages", AccessibleMessage::class)
|
|
||||||
messageIds: List<MessageId>
|
|
||||||
): Boolean = execute(
|
|
||||||
DeleteBusinessMessages(businessConnectionId, messageIds)
|
|
||||||
)
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY
|
|
||||||
// TO REGENERATE IT JUST DELETE FILE
|
|
||||||
// ORIGINAL FILE: DeleteBusinessMessages.kt
|
|
||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import kotlin.Boolean
|
|
||||||
import kotlin.collections.List
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteBusinessMessages(businessConnectionId: BusinessConnectionId,
|
|
||||||
messages: List<AccessibleMessage>): Boolean = deleteBusinessMessages(
|
|
||||||
businessConnectionId = businessConnectionId, messageIds = with(messages) {messages.map {
|
|
||||||
it.messageId }}
|
|
||||||
)
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.GetBusinessAccountGifts
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.OwnedGifts
|
|
||||||
import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.flow
|
|
||||||
import kotlin.runCatching
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getBusinessAccountGifts(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
excludeUnsaved: Boolean = false,
|
|
||||||
excludeSaved: Boolean = false,
|
|
||||||
excludeUnlimited: Boolean = false,
|
|
||||||
excludeLimited: Boolean = false,
|
|
||||||
excludeUnique: Boolean = false,
|
|
||||||
sortByPrice: Boolean = false,
|
|
||||||
offset: String? = null,
|
|
||||||
limit: Int? = null
|
|
||||||
): OwnedGifts<GiftSentOrReceived.ReceivedInBusinessAccount> = execute(
|
|
||||||
GetBusinessAccountGifts(
|
|
||||||
businessConnectionId,
|
|
||||||
excludeUnsaved,
|
|
||||||
excludeSaved,
|
|
||||||
excludeUnlimited,
|
|
||||||
excludeLimited,
|
|
||||||
excludeUnique,
|
|
||||||
sortByPrice,
|
|
||||||
offset,
|
|
||||||
limit
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a flow that emits business account gifts in a paginated manner.
|
|
||||||
*
|
|
||||||
* This function will automatically handle pagination by using the `nextOffset` from each response
|
|
||||||
* to fetch the next page of gifts until there are no more gifts to fetch.
|
|
||||||
*
|
|
||||||
* @param businessConnectionId The ID of the business connection
|
|
||||||
* @param excludeUnsaved Whether to exclude unsaved gifts
|
|
||||||
* @param excludeSaved Whether to exclude saved gifts
|
|
||||||
* @param excludeUnlimited Whether to exclude unlimited gifts
|
|
||||||
* @param excludeLimited Whether to exclude limited gifts
|
|
||||||
* @param excludeUnique Whether to exclude unique gifts
|
|
||||||
* @param sortByPrice Whether to sort gifts by price
|
|
||||||
* @param initialOffset The initial offset to start fetching from. If null, starts from the beginning
|
|
||||||
* @param limit The maximum number of gifts to fetch per request
|
|
||||||
* @param onErrorContinueChecker A function that determines whether to continue fetching on error.
|
|
||||||
* Returns true to continue, false to stop. Default is to stop on any error.
|
|
||||||
* @return A flow that emits [OwnedGifts] containing the fetched gifts
|
|
||||||
*/
|
|
||||||
public fun TelegramBot.getBusinessAccountGiftsFlow(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
excludeUnsaved: Boolean = false,
|
|
||||||
excludeSaved: Boolean = false,
|
|
||||||
excludeUnlimited: Boolean = false,
|
|
||||||
excludeLimited: Boolean = false,
|
|
||||||
excludeUnique: Boolean = false,
|
|
||||||
sortByPrice: Boolean = false,
|
|
||||||
initialOffset: String? = null,
|
|
||||||
limit: Int? = null,
|
|
||||||
onErrorContinueChecker: suspend (Throwable?) -> Boolean = { false }
|
|
||||||
): Flow<OwnedGifts<GiftSentOrReceived.ReceivedInBusinessAccount>> = flow {
|
|
||||||
var currentOffset = initialOffset
|
|
||||||
do {
|
|
||||||
val response = runCatching {
|
|
||||||
getBusinessAccountGifts(
|
|
||||||
businessConnectionId,
|
|
||||||
excludeUnsaved,
|
|
||||||
excludeSaved,
|
|
||||||
excludeUnlimited,
|
|
||||||
excludeLimited,
|
|
||||||
excludeUnique,
|
|
||||||
sortByPrice,
|
|
||||||
currentOffset,
|
|
||||||
limit
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (response.isSuccess) {
|
|
||||||
val result = response.getOrThrow()
|
|
||||||
emit(result)
|
|
||||||
currentOffset = result.nextOffset
|
|
||||||
} else {
|
|
||||||
if (onErrorContinueChecker(response.exceptionOrNull())) {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (currentOffset != null)
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.GetBusinessAccountStarBalance
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.payments.stars.StarAmount
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getBusinessAccountStarBalance(
|
|
||||||
businessConnectionId: BusinessConnectionId
|
|
||||||
): StarAmount = execute(
|
|
||||||
GetBusinessAccountStarBalance(businessConnectionId)
|
|
||||||
)
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerateVariations
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerationVariant
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.ReadBusinessMessage
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.ChatId
|
|
||||||
import dev.inmo.tgbotapi.types.MessageId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
|
||||||
import dev.inmo.tgbotapi.types.toChatId
|
|
||||||
|
|
||||||
@GenerateVariations
|
|
||||||
public suspend fun TelegramBot.readBusinessMessage(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
@GenerationVariant(Chat::class, "chat.id.toChatId()", "chat")
|
|
||||||
chatId: ChatId,
|
|
||||||
messageId: MessageId
|
|
||||||
): Boolean = execute(
|
|
||||||
ReadBusinessMessage(businessConnectionId, chatId, messageId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.readBusinessMessage(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
message: AccessibleMessage
|
|
||||||
): Boolean = readBusinessMessage(businessConnectionId, message.chat.id.toChatId(), message.messageId)
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY
|
|
||||||
// TO REGENERATE IT JUST DELETE FILE
|
|
||||||
// ORIGINAL FILE: ReadBusinessMessage.kt
|
|
||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.types.MessageId
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.types.toChatId
|
|
||||||
import kotlin.Boolean
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.readBusinessMessage(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
chat: Chat,
|
|
||||||
messageId: MessageId,
|
|
||||||
): Boolean = readBusinessMessage(
|
|
||||||
businessConnectionId = businessConnectionId, chatId = with(chat) {chat.id.toChatId()}, messageId
|
|
||||||
= messageId
|
|
||||||
)
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.RemoveBusinessAccountProfilePhoto
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.removeBusinessAccountProfilePhoto(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
isPublic: Boolean = false
|
|
||||||
): Boolean = execute(
|
|
||||||
RemoveBusinessAccountProfilePhoto(businessConnectionId = businessConnectionId, isPublic = isPublic)
|
|
||||||
)
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountBio
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setBusinessAccountBio(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
bio: String
|
|
||||||
): Boolean = execute(
|
|
||||||
SetBusinessAccountBio(businessConnectionId, bio)
|
|
||||||
)
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountGiftSettings
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.gifts.AcceptedGiftTypes
|
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.BusinessContentMessage
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the gift settings for a business account
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.setBusinessAccountGiftSettings(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
showGiftButton: Boolean,
|
|
||||||
acceptedGiftTypes: AcceptedGiftTypes
|
|
||||||
): Boolean = execute(
|
|
||||||
SetBusinessAccountGiftSettings(
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
showGiftButton = showGiftButton,
|
|
||||||
acceptedGiftTypes = acceptedGiftTypes
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the gift settings for a business account using business message context
|
|
||||||
*/
|
|
||||||
public suspend fun TelegramBot.setBusinessAccountGiftSettings(
|
|
||||||
message: BusinessContentMessage<*>,
|
|
||||||
showGiftButton: Boolean,
|
|
||||||
acceptedGiftTypes: AcceptedGiftTypes
|
|
||||||
): Boolean = setBusinessAccountGiftSettings(
|
|
||||||
businessConnectionId = message.businessConnectionId,
|
|
||||||
showGiftButton = showGiftButton,
|
|
||||||
acceptedGiftTypes = acceptedGiftTypes
|
|
||||||
)
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountName
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setBusinessAccountName(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
firstName: String,
|
|
||||||
lastName: String? = null
|
|
||||||
): Boolean = execute(
|
|
||||||
SetBusinessAccountName(businessConnectionId, firstName, lastName)
|
|
||||||
)
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.InputProfilePhoto
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountProfilePhoto
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.setBusinessAccountProfilePhoto(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
photo: InputProfilePhoto,
|
|
||||||
isPublic: Boolean = false
|
|
||||||
): Boolean = execute(
|
|
||||||
SetBusinessAccountProfilePhoto(businessConnectionId, photo, isPublic)
|
|
||||||
)
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerateVariations
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerationVariant
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountUsername
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.Username
|
|
||||||
|
|
||||||
@GenerateVariations
|
|
||||||
public suspend fun TelegramBot.setBusinessAccountUsername(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
@GenerationVariant(String::class, "Username(username)", "username")
|
|
||||||
username: Username
|
|
||||||
): Boolean = execute(
|
|
||||||
SetBusinessAccountUsername(businessConnectionId, username)
|
|
||||||
)
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY
|
|
||||||
// TO REGENERATE IT JUST DELETE FILE
|
|
||||||
// ORIGINAL FILE: SetBusinessAccountUsername.kt
|
|
||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.types.Username
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import kotlin.Boolean
|
|
||||||
import kotlin.String
|
|
||||||
|
|
||||||
public suspend
|
|
||||||
fun TelegramBot.setBusinessAccountUsername(businessConnectionId: BusinessConnectionId,
|
|
||||||
username: String): Boolean = setBusinessAccountUsername(
|
|
||||||
businessConnectionId = businessConnectionId, username = with(username) { Username.prepare(username) }
|
|
||||||
)
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.TransferBusinessAccountStars
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.transferBusinessAccountStars(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
amount: Int
|
|
||||||
): Boolean = execute(
|
|
||||||
TransferBusinessAccountStars(businessConnectionId, amount)
|
|
||||||
)
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerateVariations
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerationVariant
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.ConvertGiftToStars
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.TransferGift
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.UpgradeGift
|
|
||||||
import dev.inmo.tgbotapi.types.ChatId
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.GiftId
|
|
||||||
import dev.inmo.tgbotapi.types.businessConnectionIdField
|
|
||||||
import dev.inmo.tgbotapi.types.gifts.Gift
|
|
||||||
import dev.inmo.tgbotapi.types.keepOriginalDetailsField
|
|
||||||
import dev.inmo.tgbotapi.types.ownedGiftIdField
|
|
||||||
import dev.inmo.tgbotapi.types.starCountField
|
|
||||||
import kotlinx.serialization.SerialName
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.transferGift(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
ownedGiftId: GiftId,
|
|
||||||
newOwnerChatId: ChatId,
|
|
||||||
transferPaymentStarCount: Int? = null,
|
|
||||||
): Boolean = execute(
|
|
||||||
TransferGift(
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
ownedGiftId = ownedGiftId,
|
|
||||||
newOwnerChatId = newOwnerChatId,
|
|
||||||
transferPaymentStarCount = transferPaymentStarCount
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.transferGift(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
gift: Gift.Regular,
|
|
||||||
newOwnerChatId: ChatId,
|
|
||||||
transferPaymentStarCount: Int? = null,
|
|
||||||
): Boolean = transferGift(
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
ownedGiftId = gift.id,
|
|
||||||
newOwnerChatId = newOwnerChatId,
|
|
||||||
transferPaymentStarCount = transferPaymentStarCount
|
|
||||||
)
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.business
|
|
||||||
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerateVariations
|
|
||||||
import dev.inmo.micro_utils.ksp.variations.GenerationVariant
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.ConvertGiftToStars
|
|
||||||
import dev.inmo.tgbotapi.requests.business_connection.UpgradeGift
|
|
||||||
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
|
||||||
import dev.inmo.tgbotapi.types.GiftId
|
|
||||||
import dev.inmo.tgbotapi.types.businessConnectionIdField
|
|
||||||
import dev.inmo.tgbotapi.types.gifts.Gift
|
|
||||||
import dev.inmo.tgbotapi.types.keepOriginalDetailsField
|
|
||||||
import dev.inmo.tgbotapi.types.ownedGiftIdField
|
|
||||||
import dev.inmo.tgbotapi.types.starCountField
|
|
||||||
import kotlinx.serialization.SerialName
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.convertGiftToStars(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
ownedGiftId: GiftId,
|
|
||||||
keepOriginalDetails: Boolean = false,
|
|
||||||
starCount: Int? = null
|
|
||||||
): Boolean = execute(
|
|
||||||
UpgradeGift(
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
ownedGiftId = ownedGiftId,
|
|
||||||
keepOriginalDetails = keepOriginalDetails,
|
|
||||||
starCount = starCount
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.convertGiftToStars(
|
|
||||||
businessConnectionId: BusinessConnectionId,
|
|
||||||
gift: Gift.Regular,
|
|
||||||
keepOriginalDetails: Boolean = false,
|
|
||||||
): Boolean = execute(
|
|
||||||
UpgradeGift(
|
|
||||||
businessConnectionId = businessConnectionId,
|
|
||||||
ownedGiftId = gift.id,
|
|
||||||
keepOriginalDetails = keepOriginalDetails,
|
|
||||||
starCount = gift.upgradeStarCount
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.ExportChatInviteLink
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.exportChatInviteLink(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): String = execute(ExportChatInviteLink(chatId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.exportChatInviteLink(
|
|
||||||
chat: PublicChat
|
|
||||||
): String = exportChatInviteLink(chat.id)
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.closeForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = execute(
|
|
||||||
CloseForumTopic(
|
|
||||||
chatId,
|
|
||||||
messageThreadId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.closeForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = closeForumTopic(chat.id, messageThreadId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.closeForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
forumTopic: ForumTopic
|
|
||||||
): Boolean = closeForumTopic(chat.id, forumTopic.messageThreadId)
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.closeGeneralForumTopic(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): Boolean = execute(
|
|
||||||
CloseGeneralForumTopic(chatId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.closeGeneralForumTopic(
|
|
||||||
chat: Chat
|
|
||||||
): Boolean = closeGeneralForumTopic(chat.id)
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CreateForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.CustomEmojiId
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
import dev.inmo.tgbotapi.utils.RGBColor
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
name: String,
|
|
||||||
color: RGBColor,
|
|
||||||
iconEmojiId: CustomEmojiId? = null
|
|
||||||
): ForumTopic = execute(
|
|
||||||
CreateForumTopic(
|
|
||||||
chatId,
|
|
||||||
name,
|
|
||||||
color,
|
|
||||||
iconEmojiId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
name: String,
|
|
||||||
color: RGBColor,
|
|
||||||
iconEmojiId: CustomEmojiId? = null
|
|
||||||
): ForumTopic = createForumTopic(chat.id, name, color, iconEmojiId)
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.DeleteForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = execute(
|
|
||||||
DeleteForumTopic(
|
|
||||||
chatId,
|
|
||||||
messageThreadId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
forumTopic: ForumTopic
|
|
||||||
): Boolean = deleteForumTopic(chatId, forumTopic.messageThreadId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = deleteForumTopic(chat.id, messageThreadId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.deleteForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
forumTopic: ForumTopic
|
|
||||||
): Boolean = deleteForumTopic(chat.id, forumTopic.messageThreadId)
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.EditForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.CustomEmojiId
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.editForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageThreadId: MessageThreadId,
|
|
||||||
name: String? = null,
|
|
||||||
iconEmojiId: CustomEmojiId? = null
|
|
||||||
): Boolean = execute(
|
|
||||||
EditForumTopic(
|
|
||||||
chatId,
|
|
||||||
messageThreadId,
|
|
||||||
name,
|
|
||||||
iconEmojiId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.editForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
messageThreadId: MessageThreadId,
|
|
||||||
name: String? = null,
|
|
||||||
iconEmojiId: CustomEmojiId? = null
|
|
||||||
): Boolean = editForumTopic(chat.id, messageThreadId, name, iconEmojiId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.editForumTopic(
|
|
||||||
chatIdentifier: ChatIdentifier,
|
|
||||||
forumTopic: ForumTopic,
|
|
||||||
iconEmojiId: CustomEmojiId? = forumTopic.iconEmojiId
|
|
||||||
): Boolean = editForumTopic(chatIdentifier, forumTopic.messageThreadId, forumTopic.name, iconEmojiId)
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.EditForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.EditGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.CustomEmojiId
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.editGeneralForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
name: String
|
|
||||||
): Boolean = execute(
|
|
||||||
EditGeneralForumTopic(
|
|
||||||
chatId,
|
|
||||||
name
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.editGeneralForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
name: String
|
|
||||||
): Boolean = editGeneralForumTopic(chat.id, name)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.editGeneralForumTopic(
|
|
||||||
chatIdentifier: ChatIdentifier,
|
|
||||||
forumTopic: ForumTopic,
|
|
||||||
): Boolean = editGeneralForumTopic(chatIdentifier, forumTopic.name)
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.HideGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.hideGeneralForumTopic(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): Boolean = execute(
|
|
||||||
HideGeneralForumTopic(chatId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.hideGeneralForumTopic(
|
|
||||||
chat: Chat
|
|
||||||
): Boolean = hideGeneralForumTopic(chat.id)
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.ReopenForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.reopenForumTopic(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = execute(
|
|
||||||
ReopenForumTopic(
|
|
||||||
chatId,
|
|
||||||
messageThreadId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.reopenForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = reopenForumTopic(chat.id, messageThreadId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.reopenForumTopic(
|
|
||||||
chat: Chat,
|
|
||||||
forumTopic: ForumTopic
|
|
||||||
): Boolean = reopenForumTopic(chat.id, forumTopic.messageThreadId)
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.ReopenForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.ReopenGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.reopenGeneralForumTopic(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): Boolean = execute(
|
|
||||||
ReopenGeneralForumTopic(chatId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.reopenGeneralForumTopic(
|
|
||||||
chat: Chat
|
|
||||||
): Boolean = reopenGeneralForumTopic(chat.id)
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.CloseGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.HideGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.UnhideGeneralForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unhideGeneralForumTopic(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): Boolean = execute(
|
|
||||||
UnhideGeneralForumTopic(chatId)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unhideGeneralForumTopic(
|
|
||||||
chat: Chat
|
|
||||||
): Boolean = unhideGeneralForumTopic(chat.id)
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.UnpinAllForumTopicMessages
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unpinAllForumTopicMessages(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = execute(
|
|
||||||
UnpinAllForumTopicMessages(
|
|
||||||
chatId,
|
|
||||||
messageThreadId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unpinAllForumTopicMessages(
|
|
||||||
chat: Chat,
|
|
||||||
messageThreadId: MessageThreadId
|
|
||||||
): Boolean = unpinAllForumTopicMessages(chat.id, messageThreadId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unpinAllForumTopicMessages(
|
|
||||||
chat: Chat,
|
|
||||||
forumTopic: ForumTopic
|
|
||||||
): Boolean = unpinAllForumTopicMessages(chat.id, forumTopic.messageThreadId)
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.forum
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.UnpinAllForumTopicMessages
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.forum.UnpinAllGeneralForumTopicMessages
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.ForumTopic
|
|
||||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.Chat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unpinAllGeneralForumTopicMessages(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): Boolean = execute(
|
|
||||||
UnpinAllGeneralForumTopicMessages(
|
|
||||||
chatId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.unpinAllGeneralForumTopicMessages(
|
|
||||||
chat: Chat
|
|
||||||
): Boolean = unpinAllGeneralForumTopicMessages(chat.id)
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.get
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.get.GetChat
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.chat.*
|
|
||||||
import dev.inmo.tgbotapi.utils.PreviewFeature
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): ExtendedChat = execute(GetChat(chatId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: Chat
|
|
||||||
): ExtendedChat = getChat(chat.id)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedPublicChat] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: PublicChat
|
|
||||||
): ExtendedPublicChat = getChat(chat.id) as ExtendedPublicChat
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedChannelChat] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: ChannelChat
|
|
||||||
): ExtendedChannelChat = getChat(chat.id) as ExtendedChannelChat
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedChannelChatImpl] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: ChannelChatImpl
|
|
||||||
): ExtendedChannelChatImpl = getChat(chat.id) as ExtendedChannelChatImpl
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedGroupChat] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: GroupChat
|
|
||||||
): ExtendedGroupChat = getChat(chat.id) as ExtendedGroupChat
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedGroupChatImpl] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: GroupChatImpl
|
|
||||||
): ExtendedGroupChatImpl = getChat(chat.id) as ExtendedGroupChatImpl
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedSupergroupChat] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: SupergroupChat
|
|
||||||
): ExtendedSupergroupChat = getChat(chat.id) as ExtendedSupergroupChat
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedSupergroupChatImpl] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: SupergroupChatImpl
|
|
||||||
): ExtendedSupergroupChatImpl = getChat(chat.id) as ExtendedSupergroupChatImpl
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedPrivateChat] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: PrivateChat
|
|
||||||
): ExtendedPrivateChat = getChat(chat.id) as ExtendedPrivateChat
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedPrivateChatImpl] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: PrivateChatImpl
|
|
||||||
): ExtendedPrivateChatImpl = getChat(chat.id) as ExtendedPrivateChatImpl
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will cast incoming [dev.inmo.tgbotapi.types.chat.ExtendedChat] to a
|
|
||||||
* [ExtendedUser] with unsafe operator "as"
|
|
||||||
*
|
|
||||||
* @throws ClassCastException
|
|
||||||
*/
|
|
||||||
@PreviewFeature
|
|
||||||
public suspend fun TelegramBot.getChat(
|
|
||||||
chat: CommonUser
|
|
||||||
): ExtendedUser = getChat(chat.id) as ExtendedUser
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.get
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.get.GetChatAdministrators
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
|
||||||
import dev.inmo.tgbotapi.types.chat.member.AdministratorChatMember
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChatAdministrators(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): List<AdministratorChatMember> = execute(GetChatAdministrators(chatId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChatAdministrators(
|
|
||||||
chat: PublicChat
|
|
||||||
): List<AdministratorChatMember> = getChatAdministrators(chat.id)
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.get
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.get.GetChatMemberCount
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChatMemberCount(
|
|
||||||
chatId: ChatIdentifier
|
|
||||||
): Int = execute(GetChatMemberCount(chatId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChatMemberCount(
|
|
||||||
chat: PublicChat
|
|
||||||
): Int = getChatMemberCount(chat.id)
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.get
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.get.GetChatMenuButton
|
|
||||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.MenuButton
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PrivateChat
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChatMenuButton(
|
|
||||||
chatId: IdChatIdentifier
|
|
||||||
): MenuButton = execute(GetChatMenuButton(chatId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getChatMenuButton(
|
|
||||||
chat: PrivateChat
|
|
||||||
): MenuButton = getChatMenuButton(chat.id)
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.get
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.get.GetDefaultChatMenuButton
|
|
||||||
import dev.inmo.tgbotapi.types.MenuButton
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getDefaultChatMenuButton(): MenuButton = execute(GetDefaultChatMenuButton)
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.get
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.get.GetForumTopicIconStickers
|
|
||||||
import dev.inmo.tgbotapi.types.files.Sticker
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.getForumTopicIconStickers(): List<Sticker> = execute(GetForumTopicIconStickers)
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.invite_links
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.invite_links.ApproveChatJoinRequest
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.UserId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.ChatJoinRequest
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
|
||||||
import dev.inmo.tgbotapi.types.chat.User
|
|
||||||
import dev.inmo.tgbotapi.types.update.ChatJoinRequestUpdate
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approveChatJoinRequest(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
userId: UserId
|
|
||||||
): Boolean = execute(ApproveChatJoinRequest(chatId, userId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approveChatJoinRequest(
|
|
||||||
chat: PublicChat,
|
|
||||||
userId: UserId
|
|
||||||
): Boolean = approveChatJoinRequest(chat.id, userId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approveChatJoinRequest(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
user: User
|
|
||||||
): Boolean = approveChatJoinRequest(chatId, user.id)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approveChatJoinRequest(
|
|
||||||
chat: PublicChat,
|
|
||||||
user: User
|
|
||||||
): Boolean = approveChatJoinRequest(chat.id, user.id)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approveChatJoinRequest(
|
|
||||||
chatJoinRequest: ChatJoinRequest
|
|
||||||
): Boolean = approveChatJoinRequest(chatJoinRequest.chat, chatJoinRequest.user)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approve(
|
|
||||||
chatJoinRequest: ChatJoinRequest
|
|
||||||
): Boolean = approveChatJoinRequest(chatJoinRequest)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.approveChatJoinRequest(
|
|
||||||
chatJoinRequestUpdate: ChatJoinRequestUpdate
|
|
||||||
): Boolean = approveChatJoinRequest(chatJoinRequestUpdate.data)
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.invite_links
|
|
||||||
|
|
||||||
import korlibs.time.DateTime
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.invite_links.CreateChatInviteLink
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
|
||||||
import korlibs.time.TimeSpan
|
|
||||||
import korlibs.time.days
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkUnlimited(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
name: String? = null,
|
|
||||||
expiration: TelegramDate? = null
|
|
||||||
): ChatInviteLinkUnlimited = execute(CreateChatInviteLink.unlimited(chatId, name, expiration))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkUnlimited(
|
|
||||||
chat: PublicChat,
|
|
||||||
name: String? = null,
|
|
||||||
expiration: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkUnlimited = createChatInviteLinkUnlimited(chat.id, name, expiration)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkUnlimited(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
expiration: DateTime,
|
|
||||||
name: String? = null,
|
|
||||||
): ChatInviteLinkUnlimited = createChatInviteLinkUnlimited(chatId, name, expiration.toTelegramDate())
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkUnlimited(
|
|
||||||
chat: PublicChat,
|
|
||||||
expiration: DateTime,
|
|
||||||
name: String? = null
|
|
||||||
): ChatInviteLinkUnlimited = createChatInviteLinkUnlimited(chat.id, name, expiration.toTelegramDate())
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithLimitedMembers(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
membersLimit: MembersLimit,
|
|
||||||
name: String? = null,
|
|
||||||
expiration: TelegramDate? = null
|
|
||||||
): ChatInviteLinkWithLimitedMembers = execute(CreateChatInviteLink.withLimitedMembers(chatId, membersLimit, name, expiration))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithLimitedMembers(
|
|
||||||
chat: PublicChat,
|
|
||||||
membersLimit: MembersLimit,
|
|
||||||
name: String? = null,
|
|
||||||
expiration: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkWithLimitedMembers = createChatInviteLinkWithLimitedMembers(chat.id, membersLimit, name, expiration)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithLimitedMembers(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
membersLimit: MembersLimit,
|
|
||||||
expiration: DateTime,
|
|
||||||
name: String? = null,
|
|
||||||
): ChatInviteLinkWithLimitedMembers = createChatInviteLinkWithLimitedMembers(chatId, membersLimit, name, expiration.toTelegramDate())
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithLimitedMembers(
|
|
||||||
chat: PublicChat,
|
|
||||||
membersLimit: MembersLimit,
|
|
||||||
expiration: DateTime,
|
|
||||||
name: String? = null,
|
|
||||||
): ChatInviteLinkWithLimitedMembers = createChatInviteLinkWithLimitedMembers(chat.id, membersLimit, name, expiration.toTelegramDate())
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithJoinRequest(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
name: String? = null,
|
|
||||||
expiration: TelegramDate? = null
|
|
||||||
): ChatInviteLinkWithJoinRequest = execute(CreateChatInviteLink.withJoinRequest(chatId, name, expiration))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithJoinRequest(
|
|
||||||
chat: PublicChat,
|
|
||||||
name: String? = null,
|
|
||||||
expiration: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkWithJoinRequest = createChatInviteLinkWithJoinRequest(chat.id, name, expiration)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithJoinRequest(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
expiration: DateTime,
|
|
||||||
name: String? = null,
|
|
||||||
): ChatInviteLinkWithJoinRequest = createChatInviteLinkWithJoinRequest(chatId, name, expiration.toTelegramDate())
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatInviteLinkWithJoinRequest(
|
|
||||||
chat: PublicChat,
|
|
||||||
expiration: DateTime,
|
|
||||||
name: String? = null,
|
|
||||||
): ChatInviteLinkWithJoinRequest = createChatInviteLinkWithJoinRequest(chat.id, name, expiration.toTelegramDate())
|
|
||||||
|
|
||||||
|
|
||||||
// Subscriptions
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
subscriptionPrice: UInt,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkUnlimited = execute(CreateChatInviteLink.subscription(chatId, subscriptionPrice, subscriptionPeriod, name, expirationUnixTimeStamp))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chat: PublicChat,
|
|
||||||
subscriptionPrice: UInt,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chat.id, subscriptionPrice, subscriptionPeriod, name, expirationUnixTimeStamp)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
subscriptionPrice: UInt,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: DateTime,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chatId, subscriptionPrice, subscriptionPeriod, name, expirationUnixTimeStamp.toTelegramDate())
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chat: PublicChat,
|
|
||||||
subscriptionPrice: UInt,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: DateTime,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chat.id, subscriptionPrice, subscriptionPeriod, name, expirationUnixTimeStamp)
|
|
||||||
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
subscriptionPrice: Int,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chatId, subscriptionPrice.toUInt(), subscriptionPeriod, name, expirationUnixTimeStamp)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chat: PublicChat,
|
|
||||||
subscriptionPrice: Int,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: TelegramDate? = null,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chat, subscriptionPrice.toUInt(), subscriptionPeriod, name, expirationUnixTimeStamp)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
subscriptionPrice: Int,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: DateTime,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chatId, subscriptionPrice.toUInt(), subscriptionPeriod, name, expirationUnixTimeStamp)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.createChatSubscriptionInviteLink(
|
|
||||||
chat: PublicChat,
|
|
||||||
subscriptionPrice: Int,
|
|
||||||
subscriptionPeriod: TimeSpan = 30.days,
|
|
||||||
name: String? = null,
|
|
||||||
expirationUnixTimeStamp: DateTime,
|
|
||||||
): ChatInviteLinkUnlimited = createChatSubscriptionInviteLink(chat, subscriptionPrice.toUInt(), subscriptionPeriod, name, expirationUnixTimeStamp)
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.api.chat.invite_links
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
|
||||||
import dev.inmo.tgbotapi.requests.chat.invite_links.DeclineChatJoinRequest
|
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
|
||||||
import dev.inmo.tgbotapi.types.UserId
|
|
||||||
import dev.inmo.tgbotapi.types.chat.ChatJoinRequest
|
|
||||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
|
||||||
import dev.inmo.tgbotapi.types.chat.User
|
|
||||||
import dev.inmo.tgbotapi.types.update.ChatJoinRequestUpdate
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.declineChatJoinRequest(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
userId: UserId
|
|
||||||
): Boolean = execute(DeclineChatJoinRequest(chatId, userId))
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.declineChatJoinRequest(
|
|
||||||
chat: PublicChat,
|
|
||||||
userId: UserId
|
|
||||||
): Boolean = declineChatJoinRequest(chat.id, userId)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.declineChatJoinRequest(
|
|
||||||
chatId: ChatIdentifier,
|
|
||||||
user: User
|
|
||||||
): Boolean = declineChatJoinRequest(chatId, user.id)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.declineChatJoinRequest(
|
|
||||||
chat: PublicChat,
|
|
||||||
user: User
|
|
||||||
): Boolean = declineChatJoinRequest(chat.id, user.id)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.declineChatJoinRequest(
|
|
||||||
chatJoinRequest: ChatJoinRequest
|
|
||||||
): Boolean = declineChatJoinRequest(chatJoinRequest.chat, chatJoinRequest.user)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.decline(
|
|
||||||
chatJoinRequest: ChatJoinRequest
|
|
||||||
): Boolean = declineChatJoinRequest(chatJoinRequest)
|
|
||||||
|
|
||||||
public suspend fun TelegramBot.declineChatJoinRequest(
|
|
||||||
chatJoinRequestUpdate: ChatJoinRequestUpdate
|
|
||||||
): Boolean = declineChatJoinRequest(chatJoinRequestUpdate.data)
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user