Created basic project

This commit is contained in:
Yuri Torlopov 2024-06-16 22:30:39 +03:00
commit 7eddd696a2
14 changed files with 543 additions and 0 deletions

View file

@ -0,0 +1,73 @@
package me.theentropyshard.kvinchik
import me.theentropyshard.kvinchik.database.Database
import me.theentropyshard.kvinchik.database.impl.RuntimeDatabase
import org.telegram.telegrambots.client.okhttp.OkHttpTelegramClient
import org.telegram.telegrambots.longpolling.util.LongPollingSingleThreadUpdateConsumer
import org.telegram.telegrambots.meta.api.methods.send.SendMessage
import org.telegram.telegrambots.meta.api.objects.Update
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardRow
import org.telegram.telegrambots.meta.exceptions.TelegramApiException
import org.telegram.telegrambots.meta.generics.TelegramClient
class Kvinchik(token: String) : LongPollingSingleThreadUpdateConsumer {
private val database: Database
private val client: TelegramClient
init {
this.database = RuntimeDatabase()
this.client = OkHttpTelegramClient(token)
}
override fun consume(update: Update) {
if (update.hasMessage()) {
if (update.message.hasText()) {
this.handleTextMessage(update)
}
}
}
private fun handleTextMessage(update: Update) {
when (update.message.text) {
"/start" -> {
this.handleStart(update)
}
else -> {}
}
}
private fun handleStart(update: Update) {
if (!this.database.userExists(update.message.from.id)) {
this.askUserToCreateProfile(update.message.chatId.toString(), update.message.from.userName)
} else {
}
}
private fun askUserToCreateProfile(chatId: String, currentUserName: String) {
val askNameMessage = SendMessage.builder()
.chatId(chatId)
.text("How should I call you?")
.replyMarkup(
InlineKeyboardMarkup.builder()
.keyboardRow(
InlineKeyboardRow(
InlineKeyboardButton.builder()
.text(currentUserName)
.callbackData("name_stage")
.build()
)
).build()
).build()
try {
this.client.execute(askNameMessage)
} catch (e: TelegramApiException) {
e.printStackTrace()
}
}
}

View file

@ -0,0 +1,14 @@
package me.theentropyshard.kvinchik
import org.telegram.telegrambots.longpolling.TelegramBotsLongPollingApplication
import org.telegram.telegrambots.meta.exceptions.TelegramApiException
fun main() {
try {
val token = System.getenv("BOT_TOKEN")
val application = TelegramBotsLongPollingApplication()
application.registerBot(token, Kvinchik(token))
} catch (e: TelegramApiException) {
e.printStackTrace()
}
}

View file

@ -0,0 +1,11 @@
package me.theentropyshard.kvinchik.database
import me.theentropyshard.kvinchik.entity.KvinchikUser
interface Database {
fun userExists(id: Long): Boolean
fun saveUser(user: KvinchikUser)
fun getUsers(): List<KvinchikUser>
}

View file

@ -0,0 +1,27 @@
package me.theentropyshard.kvinchik.database.impl
import me.theentropyshard.kvinchik.database.Database
import me.theentropyshard.kvinchik.entity.KvinchikUser
import me.theentropyshard.kvinchik.util.search
class RuntimeDatabase : Database {
private val users: MutableList<KvinchikUser>
init {
this.users = ArrayList()
}
override fun userExists(id: Long): Boolean = users.search { it.id == id } != null
override fun saveUser(user: KvinchikUser) {
if (this.userExists(user.id)) {
return
}
this.users.add(user)
}
override fun getUsers(): List<KvinchikUser> {
return this.users
}
}

View file

@ -0,0 +1,9 @@
package me.theentropyshard.kvinchik.entity
data class KvinchikUser(
val id: Long,
val name: String,
val age: Int,
val city: String,
val description: String
)

View file

@ -0,0 +1,11 @@
package me.theentropyshard.kvinchik.util
fun <E> List<E>.search(predicate: (element: E) -> Boolean): E? {
for (element in this) {
if (predicate(element)) {
return element
}
}
return null
}