/* * lilJudd * Copyright (C) 2023 moonleay * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package net.moonleay.lilJudd.buttons.matchplanner import dev.kord.common.entity.Snowflake import dev.kord.core.behavior.edit import dev.kord.core.behavior.interaction.response.PublicMessageInteractionResponseBehavior import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.rest.builder.message.EmbedBuilder import dev.kord.rest.builder.message.embed import net.moonleay.lilJudd.Bot import net.moonleay.lilJudd.buttons.component.IEditButton import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository import net.moonleay.lilJudd.util.EmbedUtil import net.moonleay.lilJudd.util.Logger import net.moonleay.lilJudd.util.MessageUtil class AcceptEditButton() : IEditButton { override val id: String = "public.edit.btn.matchmanagement.accept" override suspend fun onInteraction( interaction: ButtonInteraction, response: PublicMessageInteractionResponseBehavior, guild: Guild, user: User ) { val m = interaction.message val eb = MessageUtil.getAClonedEmbed(m.embeds[0]) var shouldEditButton = false val mpdd = MatchPlanningDataRepository.getFromMessageInChannelInServer( m.id.value.toLong(), interaction.channelId.value.toLong(), guild.id.value.toLong() ) if (mpdd == null) { Logger.out("mpdd is null") return } val role = guild.getRoleOrNull(Snowflake(mpdd.roleID)) if (role == null) { Logger.out("role is null") return } val member = interaction.user.asMember(guild.id) ?: return // do the checks and update if (m.embeds[0].fields[0].value.contains(user.id.value.toString())) { if (member.roleIds.contains(Snowflake(mpdd.roleID))) { Logger.out("Removing role from ${member.username}") member.removeRole(role.id) } // remove the user from the 1st list in the embed Logger.out("Removing ${user.username} from the 1st list in the embed") eb.fields = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", eb, 1).fields shouldEditButton = true } if (m.embeds[0].fields[1].value.contains(user.id.value.toString())) { Logger.out("Removing ${user.username} from the 2nd list in the embed") eb.fields = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", eb, 2).fields shouldEditButton = true } if (!m.embeds[0].fields[0].value.contains(user.id.value.toString())) { if (!member.roleIds.contains(Snowflake(mpdd.roleID))) { Logger.out("Adding role to ${member.username}") member.addRole(role.id) } //Add the user to the list in the embed Logger.out("Adding ${user.username} to the 1st list in the embed") eb.fields = EmbedUtil.addXToValuesAtTable(user.id.value.toString(), eb, 1).fields shouldEditButton = true } if (shouldEditButton) { // update the message Bot.bot.kordRef.getChannelOf(interaction.channelId)!!.getMessage(m.id).edit { this.embed(fun EmbedBuilder.() { color = eb.color title = eb.title description = eb.description fields = eb.fields footer = eb.footer }) } } } }