PlaguBot/plugin/src/main/kotlin/dev/inmo/plagubot/Plugin.kt

48 lines
1.6 KiB
Kotlin
Raw Normal View History

2020-11-08 13:23:01 +00:00
package dev.inmo.plagubot
2020-11-11 17:05:21 +00:00
import dev.inmo.tgbotapi.bot.TelegramBot
2021-01-10 09:21:31 +00:00
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
2020-11-11 17:05:21 +00:00
import dev.inmo.tgbotapi.types.BotCommand
import dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter
import kotlinx.coroutines.CoroutineScope
import kotlinx.serialization.Serializable
2020-11-11 17:05:21 +00:00
import org.jetbrains.exposed.sql.Database
2020-11-12 06:16:43 +00:00
/**
* Use this interface for your bot. It is possible to use [kotlinx.serialization.SerialName] annotations on your plugins
* to set up short name for your plugin. Besides, simple name of your class will be used as key for deserialization
* too.
*/
@Serializable(PluginSerializer::class)
2020-11-11 17:05:21 +00:00
interface Plugin {
2020-11-12 06:16:43 +00:00
/**
* In case you want to publish some processed by your plugin commands, you can provide it via this method
*
* @see BotCommand
*/
2020-11-11 17:05:21 +00:00
suspend fun getCommands(): List<BotCommand> = emptyList()
2020-11-12 06:16:43 +00:00
2021-01-10 09:21:31 +00:00
@Deprecated("Override other method with receiver BehaviourContext")
2020-11-11 17:05:21 +00:00
suspend operator fun invoke(
bot: TelegramBot,
database: Database,
updatesFilter: FlowsUpdatesFilter,
scope: CoroutineScope
2021-01-10 09:21:31 +00:00
) {}
/**
* This method (usually) will be invoked just one time in the whole application.
*/
suspend operator fun BehaviourContext.invoke(
database: Database
2021-02-16 19:21:41 +00:00
) = invoke(bot, database, flowsUpdatesFilter, scope)
/**
* This method (usually) will be invoked just one time in the whole application.
*/
suspend operator fun BehaviourContext.invoke(
database: Database,
params: Map<String, Any>
) = invoke(database)
2020-11-11 17:05:21 +00:00
}