This commit is contained in:
InsanusMokrassar 2021-11-13 20:01:20 +06:00
parent f4019f67e2
commit 867a2b6fe5
3 changed files with 41 additions and 22 deletions

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -15,7 +15,6 @@ import dev.inmo.tgbotapi.extensions.api.chat.members.*
import dev.inmo.tgbotapi.extensions.api.deleteMessage import dev.inmo.tgbotapi.extensions.api.deleteMessage
import dev.inmo.tgbotapi.extensions.api.edit.ReplyMarkup.editMessageReplyMarkup import dev.inmo.tgbotapi.extensions.api.edit.ReplyMarkup.editMessageReplyMarkup
import dev.inmo.tgbotapi.extensions.api.send.* import dev.inmo.tgbotapi.extensions.api.send.*
import dev.inmo.tgbotapi.extensions.api.send.media.reply
import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.behaviour_builder.*
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitBaseInlineQuery import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitBaseInlineQuery
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitDataCallbackQuery import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitDataCallbackQuery
@ -24,6 +23,7 @@ import dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onNewChatMembers import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onNewChatMembers
import dev.inmo.tgbotapi.extensions.utils.* import dev.inmo.tgbotapi.extensions.utils.*
import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithParams import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithParams
import dev.inmo.tgbotapi.extensions.utils.extensions.sourceChat
import dev.inmo.tgbotapi.extensions.utils.formatting.buildEntities import dev.inmo.tgbotapi.extensions.utils.formatting.buildEntities
import dev.inmo.tgbotapi.extensions.utils.formatting.regular import dev.inmo.tgbotapi.extensions.utils.formatting.regular
import dev.inmo.tgbotapi.extensions.utils.shortcuts.executeUnsafe import dev.inmo.tgbotapi.extensions.utils.shortcuts.executeUnsafe
@ -90,10 +90,10 @@ class CaptchaBotPlugin : Plugin {
suspend fun Chat.settings() = repo.getById(id) ?: repo.create(ChatSettings(id)).first() suspend fun Chat.settings() = repo.getById(id) ?: repo.create(ChatSettings(id)).first()
onNewChatMembers( onNewChatMembers(
additionalFilter = { initialFilter = {
it.chat.asPublicChat() != null it.chat.asPublicChat() != null
}, },
includeFilterByChatInBehaviourSubContext = false subcontextUpdatesFilter = { m, u -> u.sourceChat() == m.chat },
) { ) {
launchSafelyWithoutExceptions { launchSafelyWithoutExceptions {
safelyWithoutExceptions { deleteMessage(it) } safelyWithoutExceptions { deleteMessage(it) }

View File

@ -3,11 +3,12 @@ package dev.inmo.plagubot.plugins.captcha.provider
import com.benasher44.uuid.uuid4 import com.benasher44.uuid.uuid4
import com.soywiz.klock.DateTime import com.soywiz.klock.DateTime
import com.soywiz.klock.seconds import com.soywiz.klock.seconds
import dev.inmo.micro_utils.common.joinTo
import dev.inmo.micro_utils.coroutines.safelyWithResult
import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions
import dev.inmo.plagubot.plugins.captcha.slotMachineReplyMarkup import dev.inmo.plagubot.plugins.captcha.slotMachineReplyMarkup
import dev.inmo.tgbotapi.extensions.api.answers.answerCallbackQuery import dev.inmo.tgbotapi.extensions.api.answers.answerCallbackQuery
import dev.inmo.tgbotapi.extensions.api.chat.members.kickChatMember import dev.inmo.tgbotapi.extensions.api.chat.members.*
import dev.inmo.tgbotapi.extensions.api.chat.members.restrictChatMember
import dev.inmo.tgbotapi.extensions.api.deleteMessage import dev.inmo.tgbotapi.extensions.api.deleteMessage
import dev.inmo.tgbotapi.extensions.api.edit.ReplyMarkup.editMessageReplyMarkup import dev.inmo.tgbotapi.extensions.api.edit.ReplyMarkup.editMessageReplyMarkup
import dev.inmo.tgbotapi.extensions.api.send.sendDice import dev.inmo.tgbotapi.extensions.api.send.sendDice
@ -20,12 +21,12 @@ import dev.inmo.tgbotapi.extensions.utils.formatting.*
import dev.inmo.tgbotapi.extensions.utils.shortcuts.executeUnsafe import dev.inmo.tgbotapi.extensions.utils.shortcuts.executeUnsafe
import dev.inmo.tgbotapi.extensions.utils.types.buttons.InlineKeyboardMarkup import dev.inmo.tgbotapi.extensions.utils.types.buttons.InlineKeyboardMarkup
import dev.inmo.tgbotapi.requests.DeleteMessage import dev.inmo.tgbotapi.requests.DeleteMessage
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.MessageEntity.textsources.mention import dev.inmo.tgbotapi.types.MessageEntity.textsources.mention
import dev.inmo.tgbotapi.types.Seconds import dev.inmo.tgbotapi.types.MessageEntity.textsources.plus
import dev.inmo.tgbotapi.types.User
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CallbackDataInlineKeyboardButton
import dev.inmo.tgbotapi.types.chat.LeftRestrictionsChatPermissions import dev.inmo.tgbotapi.types.chat.LeftRestrictionsChatPermissions
import dev.inmo.tgbotapi.types.chat.abstracts.GroupChat import dev.inmo.tgbotapi.types.chat.abstracts.*
import dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType import dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType
import dev.inmo.tgbotapi.types.message.abstracts.Message import dev.inmo.tgbotapi.types.message.abstracts.Message
import kotlinx.coroutines.* import kotlinx.coroutines.*
@ -46,6 +47,33 @@ sealed class CaptchaProvider {
) )
} }
private suspend fun BehaviourContext.banUser(
chat: PublicChat,
user: User,
onFailure: suspend BehaviourContext.(Throwable) -> Unit = {
safelyWithResult {
sendTextMessage(
chat,
buildEntities(" ") {
user.mention(
listOfNotNull(
user.lastName.takeIf { it.isNotBlank() }, user.firstName.takeIf { it.isNotBlank() }
).takeIf {
it.isNotEmpty()
} ?.joinToString(" ") ?: "User"
)
+"failed captcha"
}
)
}
}
): Result<Boolean> = safelyWithResult {
restrictChatMember(chat, user, permissions = LeftRestrictionsChatPermissions)
banChatMember(chat, user)
}.onFailure {
onFailure(it)
}
@Serializable @Serializable
data class SlotMachineCaptchaProvider( data class SlotMachineCaptchaProvider(
val checkTimeSeconds: Seconds = 300, val checkTimeSeconds: Seconds = 300,
@ -121,10 +149,7 @@ data class SlotMachineCaptchaProvider(
if (user !in authorizedUsers) { if (user !in authorizedUsers) {
context.stop() context.stop()
if (kick) { if (kick) {
safelyWithoutExceptions { banUser(chat, user)
restrictChatMember(chat, user, permissions = LeftRestrictionsChatPermissions)
kickChatMember(chat, user)
}
} }
} }
} }
@ -192,10 +217,7 @@ data class SimpleCaptchaProvider(
if (job.isActive) { if (job.isActive) {
job.cancel() job.cancel()
if (kick) { if (kick) {
safelyWithoutExceptions { banUser(chat, it)
restrictChatMember(chat, it, permissions = LeftRestrictionsChatPermissions)
kickChatMember(chat, it)
}
} }
} }
stop() stop()
@ -249,7 +271,7 @@ private object ExpressionBuilder {
@Serializable @Serializable
data class ExpressionCaptchaProvider( data class ExpressionCaptchaProvider(
val checkTimeSeconds: Seconds = 60, val checkTimeSeconds: Seconds = 60,
val captchaText: String = "solve next captcha:", val captchaText: String = "Solve next captcha:",
val leftRetriesText: String = "Nope, left retries: ", val leftRetriesText: String = "Nope, left retries: ",
val maxPerNumber: Int = 10, val maxPerNumber: Int = 10,
val operations: Int = 2, val operations: Int = 2,
@ -311,10 +333,7 @@ data class ExpressionCaptchaProvider(
safelyWithoutExceptions { restrictChatMember(chat, user, permissions = LeftRestrictionsChatPermissions) } safelyWithoutExceptions { restrictChatMember(chat, user, permissions = LeftRestrictionsChatPermissions) }
} else { } else {
if (kick) { if (kick) {
safelyWithoutExceptions { banUser(chat, user)
restrictChatMember(chat, user, permissions = LeftRestrictionsChatPermissions)
kickChatMember(chat, user)
}
} }
} }
} }