Litemn / TamTamBotApiClientDsl

Kotlin DSL client for TamTam Bot API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TamTamBotApiClientDsl

Kotlin DSL для TamTam Bot API. С помощью этой библиотеки можно упростить работу с Bot API. С чем помогает эта библиотека:

  • Подписывается на updates с помощью LongPolling (WebHook будет позже)
  • Распределяет updates по определенным зонам ответственности, которые вы опишите. Все updates обрабатываются параллельно.
  • Парсит команды
  • Предоставляет удобный интерфейс для работы с запросами к Bot API

Документация по Bot API находится здесь.

Что необходимо, что бы начать

Для доступа к библиотеке необходимо добавить зависимость на jitpack

Gradle

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Maven

<repositories>
	<repository>
	    <id>jitpack.io</id>
	    <url>https://jitpack.io</url>
	</repository>
</repositories>

Также необходимо добавить зависимость

Gradle

dependencies {
    implementation 'com.github.Namazed:TamTamBotApiClientDsl:current_version'
}

Maven

<dependency>
	 <groupId>com.github.Namazed</groupId>
	 <artifactId>TamTamBotApiClientDsl</artifactId>
	 <version>Tag</version>
</dependency>

Примеры

Scopes

Ниже пример того, как начать процесс longPolling:

fun main() {
  longPolling("BOT_TOKEN") {

  }
}

Все остальные методы вызываются из longPolling scope (lambda). Для того что бы подписаться на запуск бота, достаточно вызвать метод:

onStartBot { startedBotState ->
    //some actions
}

Если вы хотите подписаться на какую то определенную команду (например, /actions):

commands {

    onCommand("/actions") { commandState ->
        //some actions
    }

    onUnknownCommand { commandState ->
        //some actions
    }

}

Для работы с Callbacks (т.е. когда пользователь нажал на кнопку в клавиатуре, которую ваш бот ему отправил), необходимо создать scope callbacks:

callbacks {

    defaultAnswer { callbackState ->
        //some actions
    }

    answerOnCallback(Payload("test_button_one")) { callbackState ->
        //some actions
    }

    answerOnCallback(Payload("test_button_two")) { callbackState ->
        //some actions
    }
}

Payload - это inline class, который содержит в себе payload кнопки, update о нажатии на которую будет попадать в эту lambda.

И последний из основных scopes это scope обработки новых сообщений от пользователя (которые не содержат команду):

messages {

    answerOnMessage { messageState ->
        //some actions
    }

}

Также есть такие методы как:

  • onAddBotToChat
  • onRemoveBotFromChat
  • Users scope, в котором есть необходимые методы для обработки updates связанными с добавлением пользователя в чат или удалением его

Во всех lambdas, которые были выше указаны есть параметр State, который содержит всю необходимую информацию о текущем update. Например CommandState содержит timestamp, когда событие это произошло (т.е. пользователь прислал вам команду) и класс Command.

Requests

Запросы можно слать в большинстве случаев с помощью удобного DSL, либо напрямую вызывая методы у класса RequestsManager, который доступен во всех Scopes. Например, если вам необходимо послать какой то текст пользователю, достаточно вызвать метод sendFor или sendText:

Через DSL

"Two bananas" sendFor UserId(commandState.command.message.sender.userId)

Пока есть необходимость оборачивать в inline class UserId или ChatId, в будущем эти действия будут не нужны. Через RequestsManager

requestsManager.sendText(UserId(commandState.command.message.sender.userId), "Two bananas")

Для создания InlineKeyboard, можно воспользоваться keyboard DSL, ниже пример с созданием InlineKeyboard тремя способами с помощью: operator unaryPlus, через infix function add, либо просто вызвать function add. buttonRow создает строку с кнопками.

keyboard {
    +buttonRow {
        +Button(
            ButtonType.CALLBACK.value,
            "Create dreams",
            payload = "DREAMS"
        )
        +Button(
            ButtonType.CALLBACK.value,
            "Imagine that you are Dragon",
            payload = "DRAGON"
        )
    }

    this add buttonRow {
        this add Button(
            ButtonType.LINK.value,
            "Find new dreams"
        )
    }

    add(buttonRow {
        add(
            Button(
                ButtonType.LINK.value,
                "Find new dreams"
            )
        )
    })
}

Contributing

Pull requests приветствуются. Если нашли какие то bugs или есть отличная идея прошу создать для этого issue

License

Эта библиотека использует лицензию Apache 2.0.

About

Kotlin DSL client for TamTam Bot API

License:Apache License 2.0


Languages

Language:Kotlin 100.0%