mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
synced 2026-06-11 22:06:34 +00:00
small improvement in chat management bot
This commit is contained in:
@@ -4,6 +4,7 @@ import dev.inmo.kslog.common.defaultMessageFormatter
|
|||||||
import dev.inmo.kslog.common.setDefaultKSLog
|
import dev.inmo.kslog.common.setDefaultKSLog
|
||||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
||||||
import dev.inmo.tgbotapi.extensions.api.chat.get.getChatAdministrators
|
import dev.inmo.tgbotapi.extensions.api.chat.get.getChatAdministrators
|
||||||
|
import dev.inmo.tgbotapi.extensions.api.chat.members.getChatMember
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.deleteAllUserMessageReactions
|
import dev.inmo.tgbotapi.extensions.api.send.deleteAllUserMessageReactions
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.deleteUserMessageReaction
|
import dev.inmo.tgbotapi.extensions.api.send.deleteUserMessageReaction
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||||
@@ -14,12 +15,12 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChatMe
|
|||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.plus
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.plus
|
||||||
import dev.inmo.tgbotapi.extensions.utils.chatContentMessageOrNull
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.contentMessageOrNull
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.fromUserChatMessageOrNull
|
import dev.inmo.tgbotapi.extensions.utils.fromUserChatMessageOrNull
|
||||||
import dev.inmo.tgbotapi.extensions.utils.fromUserMessageOrNull
|
import dev.inmo.tgbotapi.extensions.utils.fromUserMessageOrNull
|
||||||
import dev.inmo.tgbotapi.extensions.utils.publicChatOrNull
|
import dev.inmo.tgbotapi.extensions.utils.publicChatOrNull
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.requireRestrictedChatMember
|
||||||
import dev.inmo.tgbotapi.extensions.utils.restrictedMemberChatMemberOrNull
|
import dev.inmo.tgbotapi.extensions.utils.restrictedMemberChatMemberOrNull
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.specialRightsChatMemberOrNull
|
||||||
import dev.inmo.tgbotapi.types.chat.CommonBot
|
import dev.inmo.tgbotapi.types.chat.CommonBot
|
||||||
import dev.inmo.tgbotapi.types.chat.ChatPermissions
|
import dev.inmo.tgbotapi.types.chat.ChatPermissions
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -89,6 +90,23 @@ suspend fun main(vararg args: String) {
|
|||||||
println(" canReactToMessages (ChatPermissions): ${permissions.canReactToMessages}")
|
println(" canReactToMessages (ChatPermissions): ${permissions.canReactToMessages}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Feature 1: can_react_to_messages in ChatMemberRestricted and ChatPermissions
|
||||||
|
// RestrictedMemberChatMember implements ChatPermissions, so canReactToMessages
|
||||||
|
// appears in both types as required by the Telegram Bot API spec
|
||||||
|
onCommand(
|
||||||
|
"retrieveRights"
|
||||||
|
) { message ->
|
||||||
|
val replyMessage = message.replyTo ?.fromUserChatMessageOrNull() ?: run {
|
||||||
|
reply(message) { +"This command works only in groups/supergroups/channels" }
|
||||||
|
return@onCommand
|
||||||
|
}
|
||||||
|
val chatMember = getChatMember(message.chat.id, replyMessage.user.id)
|
||||||
|
val chatPermissions = chatMember.restrictedMemberChatMemberOrNull()
|
||||||
|
|
||||||
|
val canReactToMessages = chatPermissions ?.canReactToMessages
|
||||||
|
reply(message) { +"Can react to messages: $canReactToMessages" }
|
||||||
|
}
|
||||||
|
|
||||||
// Feature 2: return_bots parameter in getChatAdministrators
|
// Feature 2: return_bots parameter in getChatAdministrators
|
||||||
// retrieveOtherBots = true corresponds to return_bots = true in the Telegram API
|
// retrieveOtherBots = true corresponds to return_bots = true in the Telegram API
|
||||||
onCommand("admins") { message ->
|
onCommand("admins") { message ->
|
||||||
@@ -108,7 +126,7 @@ suspend fun main(vararg args: String) {
|
|||||||
|
|
||||||
// Feature 4: deleteMessageReaction
|
// Feature 4: deleteMessageReaction
|
||||||
// Deletes a specific reaction by the replied message's author on that message
|
// Deletes a specific reaction by the replied message's author on that message
|
||||||
onCommand("deletereaction") { message ->
|
onCommand("deleteReaction") { message ->
|
||||||
val replied = message.replyTo ?.fromUserChatMessageOrNull() ?: run {
|
val replied = message.replyTo ?.fromUserChatMessageOrNull() ?: run {
|
||||||
reply(message) { +"Reply to a message to remove that user's reaction from it" }
|
reply(message) { +"Reply to a message to remove that user's reaction from it" }
|
||||||
return@onCommand
|
return@onCommand
|
||||||
@@ -119,7 +137,7 @@ suspend fun main(vararg args: String) {
|
|||||||
|
|
||||||
// Feature 3: deleteAllMessageReactions
|
// Feature 3: deleteAllMessageReactions
|
||||||
// Deletes all reactions that the replied message's author has left in this chat
|
// Deletes all reactions that the replied message's author has left in this chat
|
||||||
onCommand("deleteallreactions") { message ->
|
onCommand("deleteAllReactions") { message ->
|
||||||
val replied = message.replyTo?.fromUserMessageOrNull() ?: run {
|
val replied = message.replyTo?.fromUserMessageOrNull() ?: run {
|
||||||
reply(message) { +"Reply to a message to clear all reactions of that user in this chat" }
|
reply(message) { +"Reply to a message to clear all reactions of that user in this chat" }
|
||||||
return@onCommand
|
return@onCommand
|
||||||
|
|||||||
Reference in New Issue
Block a user