Created basic project
This commit is contained in:
commit
7eddd696a2
14 changed files with 543 additions and 0 deletions
73
src/main/kotlin/me/theentropyshard/kvinchik/Kvinchik.kt
Normal file
73
src/main/kotlin/me/theentropyshard/kvinchik/Kvinchik.kt
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
14
src/main/kotlin/me/theentropyshard/kvinchik/Main.kt
Normal file
14
src/main/kotlin/me/theentropyshard/kvinchik/Main.kt
Normal 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()
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
)
|
|
@ -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
|
||||
}
|
Loading…
Add table
Reference in a new issue