Skip to content

Commit

Permalink
image sending
Browse files Browse the repository at this point in the history
  • Loading branch information
MeiNanziiii committed Jan 15, 2025
1 parent 1e8e186 commit 11923a1
Show file tree
Hide file tree
Showing 28 changed files with 252 additions and 230 deletions.
2 changes: 2 additions & 0 deletions libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ placeholder-api="2.5.1+1.21.3"
luckperms="5.4"
permissions="0.3.3"

thumbnailator = "0.4.20"

[libraries]

minecraft = { module = "net.minecraft:minecraft", version.ref = "minecraft" }
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/ua/mei/minekord/mixin/PlayerManagerMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package ua.mei.minekord.mixin;

import com.mojang.authlib.GameProfile;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.PlayerManager;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ua.mei.minekord.cache.IPCache;
import ua.mei.minekord.config.MinekordConfig;
import ua.mei.minekord.event.IPCheckEvent;

import java.net.SocketAddress;

@Mixin(PlayerManager.class)
public abstract class PlayerManagerMixin {
@Shadow
@Final
private MinecraftServer server;

@Inject(method = "checkCanJoin", at = @At("RETURN"), cancellable = true)
public void minekord$checkCanJoin(SocketAddress socketAddress, GameProfile gameProfile, CallbackInfoReturnable<Text> cir) {
if (cir.getReturnValue() == null) {
if (MinekordConfig.Auth.INSTANCE.getIpBasedLogin() && !IPCache.INSTANCE.containsInCache(socketAddress, gameProfile) && !server.getPlayerManager().getIpBanList().isBanned(socketAddress)) {
if (!IPCache.INSTANCE.isRequested(socketAddress, gameProfile)) {
IPCheckEvent.Companion.getEVENT().invoker().check(socketAddress, gameProfile);
}
cir.setReturnValue(Text.literal(MinekordConfig.Messages.INSTANCE.getIpKickMessage()));
}
}
}
}

This file was deleted.

15 changes: 10 additions & 5 deletions src/main/kotlin/ua/mei/minekord/Minekord.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import ua.mei.minekord.config.MinekordConfig.CONFIG_PATH
import ua.mei.minekord.config.MinekordConfig.Chat
import ua.mei.minekord.config.MinekordConfig.Commands
import ua.mei.minekord.event.ChatMessageEvent
import ua.mei.minekord.utils.MessageSender
import ua.mei.minekord.utils.avatarUrl
import ua.mei.minekord.util.MessageSender
import ua.mei.minekord.util.avatarUrl
import java.nio.file.Files

object Minekord : ModInitializer {
Expand Down Expand Up @@ -53,13 +53,18 @@ object Minekord : ModInitializer {
}

ServerMessageEvents.CHAT_MESSAGE.register { message, sender, type ->
ChatMessageEvent.EVENT.invoker().message(message.content, MessageSender(sender.gameProfile.name, sender.avatarUrl))
ChatMessageEvent.EVENT.invoker()
.message(message.content, MessageSender(sender.gameProfile.name, sender.avatarUrl))
}
ServerMessageEvents.COMMAND_MESSAGE.register { message, source, parameters ->
if (source.isExecutedByPlayer) {
ChatMessageEvent.EVENT.invoker().message(message.content, MessageSender(source.player!!.gameProfile.name, source.player!!.avatarUrl))
ChatMessageEvent.EVENT.invoker().message(
message.content,
MessageSender(source.player!!.gameProfile.name, source.player!!.avatarUrl)
)
} else {
ChatMessageEvent.EVENT.invoker().message(message.content, MessageSender(Chat.Webhook.webhookName, Chat.Webhook.webhookAvatar))
ChatMessageEvent.EVENT.invoker()
.message(message.content, MessageSender(Chat.Webhook.webhookName, Chat.Webhook.webhookAvatar))
}
}
ServerLifecycleEvents.SERVER_STARTING.register(IPCache)
Expand Down
6 changes: 5 additions & 1 deletion src/main/kotlin/ua/mei/minekord/MinekordCommands.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ import net.minecraft.text.Text
import ua.mei.minekord.config.MinekordConfig

object MinekordCommands : CommandRegistrationCallback {
override fun register(dispatcher: CommandDispatcher<ServerCommandSource>, access: CommandRegistryAccess, environment: CommandManager.RegistrationEnvironment) {
override fun register(
dispatcher: CommandDispatcher<ServerCommandSource>,
access: CommandRegistryAccess,
environment: CommandManager.RegistrationEnvironment
) {
dispatcher.register(
literal<ServerCommandSource>("minekord")
.requires(Permissions.require("minekord.main", 4))
Expand Down
6 changes: 5 additions & 1 deletion src/main/kotlin/ua/mei/minekord/bot/MinekordBot.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,13 @@ import ua.mei.minekord.Minekord
import ua.mei.minekord.config.MinekordConfig.Chat
import ua.mei.minekord.config.MinekordConfig.Main
import ua.mei.minekord.config.MinekordConfig.Presence
import ua.mei.minekord.config.MinekordConfig.Presence.MinekordActivityType
import ua.mei.minekord.event.AdvancementGrantEvent
import ua.mei.minekord.event.ChatMessageEvent
import ua.mei.minekord.utils.*
import ua.mei.minekord.util.MinekordMinecraftRenderer
import ua.mei.minekord.util.SerializerUtils
import ua.mei.minekord.util.asSnowflake
import ua.mei.minekord.util.toText
import kotlin.coroutines.CoroutineContext
import kotlin.reflect.KCallable

Expand Down
2 changes: 1 addition & 1 deletion src/main/kotlin/ua/mei/minekord/bot/MinekordExtension.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.text.Text
import org.koin.core.component.inject
import ua.mei.minekord.config.MinekordConfig.Chat
import ua.mei.minekord.utils.MessageSender
import ua.mei.minekord.util.MessageSender

abstract class MinekordExtension : Extension() {
abstract override val name: String
Expand Down
18 changes: 11 additions & 7 deletions src/main/kotlin/ua/mei/minekord/bot/extension/IPCheckExtension.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,24 @@ import dev.kordex.core.components.ComponentContainer
import dev.kordex.core.components.components
import dev.kordex.core.components.disabledButton
import dev.kordex.core.components.publicButton
import dev.kordex.core.extensions.Extension
import dev.kordex.core.i18n.toKey
import dev.kordex.core.time.TimestampType
import dev.kordex.core.time.toDiscord
import io.ktor.util.network.*
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import kotlinx.datetime.Clock
import net.minecraft.server.BannedIpEntry
import ua.mei.minekord.Minekord
import ua.mei.minekord.bot.MinekordBot
import ua.mei.minekord.bot.MinekordExtension
import ua.mei.minekord.cache.IPCache
import ua.mei.minekord.config.MinekordConfig.Auth
import ua.mei.minekord.config.MinekordConfig.Messages
import ua.mei.minekord.event.IPCheckEvent
import ua.mei.minekord.utils.AuthUtils
import java.net.SocketAddress

class IPCheckExtension : Extension() {
class IPCheckExtension : MinekordExtension() {
override val name: String = "minekord.ipcheck"

override suspend fun setup() {
Expand All @@ -35,9 +36,11 @@ class IPCheckExtension : Extension() {

MinekordBot.launch {
try {
val member: Member? = AuthUtils.findMember(profile.name)
val member: Member = MinekordBot.guild.members.firstOrNull {
it.effectiveName == name && it.roleIds.map { it.value }.containsAll(Auth.requiredRoles)
} ?: return@launch

member?.getDmChannelOrNull()?.createMessage {
member.getDmChannelOrNull()?.createMessage {
embed {
title = Messages.embedTitle
addIpField(socketAddress)
Expand Down Expand Up @@ -97,7 +100,7 @@ class IPCheckExtension : Extension() {
style = ButtonStyle.Danger

action {
IPCache.blockedIps += socketAddress.address
server.playerManager.ipBanList.add(BannedIpEntry(socketAddress.address))

edit {
embed {
Expand All @@ -119,7 +122,8 @@ class IPCheckExtension : Extension() {
style = ButtonStyle.Danger

action {
IPCache.blockedIps.removeAll { it == socketAddress.address }
server.playerManager.ipBanList.remove(socketAddress.address)

IPCache.alreadyRequestedIps[profile.name]?.removeAll { it == socketAddress.address }

edit {
Expand Down
31 changes: 25 additions & 6 deletions src/main/kotlin/ua/mei/minekord/bot/extension/MessagesExtension.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import ua.mei.minekord.config.MinekordConfig
import ua.mei.minekord.config.MinekordConfig.Chat
import ua.mei.minekord.config.MinekordConfig.Colors
import ua.mei.minekord.config.MinekordConfig.Main
import ua.mei.minekord.utils.*
import ua.mei.minekord.util.*
import kotlin.jvm.optionals.getOrNull

class MessagesExtension : MinekordExtension() {
Expand All @@ -38,16 +38,21 @@ class MessagesExtension : MinekordExtension() {
val sender: Member = event.member ?: return@action

var content: Text = if (Chat.convertMarkdown) {
MinecraftSerializer.INSTANCE.serialize(message.content, MinekordBot.minecraftOptions).native(server.registryManager)
MinecraftSerializer.INSTANCE.serialize(message.content, MinekordBot.minecraftOptions)
.native(server.registryManager)
} else {
message.content.literal()
}

if (message.referencedMessage != null) {
val replyContent: Text = MinecraftSerializer.INSTANCE.serialize(message.referencedMessage!!.content, MinekordBot.minecraftOptions).native(server.registryManager)
val replyContent: Text = MinecraftSerializer.INSTANCE.serialize(
message.referencedMessage!!.content,
MinekordBot.minecraftOptions
).native(server.registryManager)

val reply: Text = Chat.Minecraft.replyFormat.toText(server) {
"sender" to (message.referencedMessage!!.author?.effectiveName ?: message.referencedMessage!!.data.author.username).literal()
"sender" to (message.referencedMessage!!.author?.effectiveName
?: message.referencedMessage!!.data.author.username).literal()
"message" to replyContent
"summary" to replyContent.string.summary().literal()
}
Expand All @@ -56,12 +61,23 @@ class MessagesExtension : MinekordExtension() {
}

content = Chat.Minecraft.messageFormat.toText(server) {
"prefix" to MinekordConfig.parser.parseText(LuckPermsUtils.prefixByNickname(sender.effectiveName, server), PlaceholderContext.of(server).asParserContext())
"prefix" to MinekordConfig.parser.parseText(
LuckPermsUtils.prefixByNickname(
sender.effectiveName,
server
), PlaceholderContext.of(server).asParserContext()
)
"sender" to sender.effectiveName.literal()
"message" to content
}

val attachments: List<Text> = ImageUtils.attachmentsToText(message)

server.playerManager.broadcast(content, false)

attachments.forEach {
server.playerManager.broadcast(it, false)
}
}
}
}
Expand All @@ -71,7 +87,10 @@ class MessagesExtension : MinekordExtension() {
username = sender.name
avatarUrl = sender.avatarUrl

content = DiscordSerializer.INSTANCE.serialize(message.adventure(server.registryManager), MinekordBot.discordOptions).let {
content = DiscordSerializer.INSTANCE.serialize(
message.adventure(server.registryManager),
MinekordBot.discordOptions
).let {
if (Chat.convertMentions) {
SerializerUtils.convertMentions(it)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import ua.mei.minekord.bot.MinekordExtension
import ua.mei.minekord.config.MinekordConfig.Colors
import ua.mei.minekord.config.MinekordConfig.Commands
import ua.mei.minekord.config.MinekordConfig.Main
import ua.mei.minekord.utils.asSnowflake
import ua.mei.minekord.utils.toText
import ua.mei.minekord.util.asSnowflake
import ua.mei.minekord.util.toText

class PlayerListExtension : MinekordExtension() {
override val name: String = "minekord.playerlist"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import dev.kord.core.event.guild.MemberUpdateEvent
import dev.kordex.core.extensions.event
import net.minecraft.server.network.ServerPlayerEntity
import ua.mei.minekord.bot.MinekordExtension
import ua.mei.minekord.utils.LuckPermsUtils
import ua.mei.minekord.util.LuckPermsUtils

class RoleSyncExtension : MinekordExtension() {
override val name: String = "minekord.rolesync"
Expand Down
Loading

0 comments on commit 11923a1

Please sign in to comment.