90 lines
2.9 KiB
Kotlin
90 lines
2.9 KiB
Kotlin
|
package com.cubetiqs.messaging.client.telegram
|
||
|
|
||
|
import com.cubetiqs.messaging.client.webclient.WebClientUtils
|
||
|
import okhttp3.*
|
||
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||
|
import okhttp3.RequestBody.Companion.asRequestBody
|
||
|
import java.nio.file.Files
|
||
|
|
||
|
object TelegramBotUtils {
|
||
|
private fun getBotUrl(endpoint: String, token: String = ""): String {
|
||
|
return "${TelegramConfig.TELEGRAM_API}/bot${token.removePrefix("bot")}/${endpoint.removePrefix("/")}"
|
||
|
}
|
||
|
|
||
|
private fun makeRequest(
|
||
|
request: Request,
|
||
|
): Response? {
|
||
|
println(javaClass.canonicalName + " => Start send message via telegram bot...")
|
||
|
return try {
|
||
|
WebClientUtils.makeRequest(request)
|
||
|
} catch (ex: Exception) {
|
||
|
ex.printStackTrace()
|
||
|
println("Make request error @${ex.message}")
|
||
|
null
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@JvmStatic
|
||
|
fun sendMessage(
|
||
|
// usually chat id from chat group
|
||
|
chatId: String,
|
||
|
// message to send
|
||
|
text: String,
|
||
|
// config prefix for custom token
|
||
|
token: String = "",
|
||
|
): Any? {
|
||
|
val requestBody = MultipartBody.Builder()
|
||
|
.addFormDataPart("text", text)
|
||
|
.addFormDataPart("chat_id", chatId)
|
||
|
.setType(MultipartBody.FORM)
|
||
|
.build()
|
||
|
|
||
|
val url = getBotUrl(TelegramConfig.SEND_MESSAGE, token)
|
||
|
val request = Request.Builder()
|
||
|
.url(url)
|
||
|
.post(requestBody)
|
||
|
.build()
|
||
|
|
||
|
val result = makeRequest(request)
|
||
|
println(javaClass.canonicalName + " => Complete sent message to $chatId...")
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
@JvmStatic
|
||
|
fun sendDocument(
|
||
|
// usually chat id from chat group
|
||
|
chatId: String,
|
||
|
// message to send
|
||
|
text: String,
|
||
|
// document extension (example: my_file.pdf, my_file.docx, etc)
|
||
|
filename: String,
|
||
|
// document in byte array
|
||
|
document: ByteArray,
|
||
|
// config prefix for custom token
|
||
|
token: String = "",
|
||
|
): Any? {
|
||
|
val ext = filename.split(".").lastOrNull() ?: "dat"
|
||
|
val tempFile = Files.createTempFile(filename.removeSuffix(ext), ".$ext")
|
||
|
Files.write(tempFile, document)
|
||
|
|
||
|
val requestBody = MultipartBody.Builder()
|
||
|
.addFormDataPart(
|
||
|
"document", filename,
|
||
|
tempFile.toFile().asRequestBody("application/octet-stream".toMediaTypeOrNull())
|
||
|
)
|
||
|
.addFormDataPart("caption", text)
|
||
|
.addFormDataPart("chat_id", chatId)
|
||
|
.setType(MultipartBody.FORM)
|
||
|
.build()
|
||
|
|
||
|
val url = getBotUrl(TelegramConfig.SEND_DOCUMENT, token)
|
||
|
val request = Request.Builder()
|
||
|
.url(url)
|
||
|
.post(requestBody)
|
||
|
.build()
|
||
|
|
||
|
val result = makeRequest(request)
|
||
|
println(javaClass.canonicalName + " => Complete sent document to $chatId...")
|
||
|
return result
|
||
|
}
|
||
|
}
|