messaging-client/src/main/kotlin/com/cubetiqs/messaging/client/telegram/TelegramProvider.kt

137 lines
3.9 KiB
Kotlin

package com.cubetiqs.messaging.client.telegram
import com.cubetiqs.messaging.client.provider.MessageProvider
import com.cubetiqs.messaging.client.util.Loggable
import java.io.File
import java.nio.file.Files
import java.util.*
import kotlin.IllegalArgumentException
/**
* Telegram Provider
*
* @author sombochea
* @since 1.0
*/
class TelegramProvider : MessageProvider, Loggable {
private var _token: String = ""
private var _chatId: String = ""
private var _message: TelegramMessage? = null
private var _file: File? = null
private var _filename: String? = null
fun sendToChatId(chatId: String) = apply {
this._chatId = chatId
}
@JvmOverloads
fun setMessage(message: String, parseMode: TelegramParseMode? = null) = apply {
this._message = object : TelegramMessage {
override fun getText(): String {
return message
}
override fun getParseMode(): TelegramParseMode? {
return parseMode
}
}
}
fun setMessageToSend(message: TelegramMessage?) = apply {
this._message = message
}
fun setBotToken(token: String) = apply {
this._token = token
}
fun setFile(file: File?) = apply {
this._file = file
}
fun setFilename(filename: String?) = apply {
this._filename = filename
}
private fun send(
chatId: String,
message: TelegramMessage,
): TelegramResponse? {
if (_token.isEmpty() || _token.isBlank()) {
throw IllegalArgumentException("token must be provide for send message!")
}
if (this._message == null) {
this._message = message
}
if (_file == null) {
if (_message?.getText().isNullOrEmpty()) return null
}
return try {
val response = if (_file != null) {
TelegramBotUtils.sendDocument(
chatId = chatId,
token = this._token,
text = this._message?.getText() ?: "",
filename = (_filename ?: _file?.name) ?: Date().time.toString(),
document = Files.readAllBytes(_file!!.toPath()),
parseMode = this._message!!.getParseMode(),
)
} else {
TelegramBotUtils.sendMessage(
chatId = chatId,
token = this._token,
text = this._message!!.getText(),
parseMode = this._message!!.getParseMode(),
)
}
if (response != null) {
TelegramResponse(
response = response,
)
} else {
null
}
} catch (ex: Exception) {
log.error("[Telegram] Message send error: ${ex.message}!")
null
}
}
override fun send(): Any? {
if (this._file == null) {
if (this._message?.getText().isNullOrEmpty()) {
throw IllegalArgumentException("message must be non-null or non-empty!")
}
} else {
if (this._message == null) {
this._message = TelegramMessage { "" }
}
}
return send(this._chatId, this._message!!)
}
override fun toString(): String {
return "TelegramProvider(_token='$_token', _chatId='$_chatId', _message=$_message, _filename=$_filename, _file=$_file)"
}
companion object {
@JvmStatic
fun init(token: String): TelegramProvider {
return TelegramProvider()
.setBotToken(token)
}
@JvmStatic
fun sendMessage(token: String, chatId: String, text: String): Any? {
return init(token)
.sendToChatId(chatId)
.setMessageToSend(TelegramChatMessage(text))
.send()
}
}
}