Skip to content

Commit

Permalink
🚀 More elements are now async changeable
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsTheSky committed Sep 17, 2024
1 parent 9486483 commit f2faf93
Show file tree
Hide file tree
Showing 14 changed files with 124 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
import info.itsthesky.disky.api.changers.MultipleChangeablePropertyExpression;
import info.itsthesky.disky.api.skript.EasyElement;
import info.itsthesky.disky.core.Bot;
import info.itsthesky.disky.elements.changers.IAsyncChangeableExpression;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.requests.RestAction;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;

Expand All @@ -22,7 +24,8 @@
@Examples({"add role with id \"000\" to roles of event-member",
"remove event-role from roles of event-member",
"reply with \"Amount of roles in the guild: %size of roles of event-guild%\""})
public class DiscordRoles extends MultipleChangeablePropertyExpression<Object, Role> {
public class DiscordRoles extends MultipleChangeablePropertyExpression<Object, Role>
implements IAsyncChangeableExpression {

static {
register(
Expand All @@ -35,17 +38,7 @@ public class DiscordRoles extends MultipleChangeablePropertyExpression<Object, R

@Override
public void change(Event e, @NotNull Object[] delta, Bot bot, Changer.ChangeMode mode) {
final Role role = bot.getInstance().getRoleById(((Role) delta[0]).getId());
final Object entity = getExpr().getSingle(e);
if (EasyElement.anyNull(this, role, entity))
return;

if (!(entity instanceof Member))
return;
if (mode == Changer.ChangeMode.ADD)
((Member) entity).getGuild().addRoleToMember((Member) entity, role).queue();
else
((Member) entity).getGuild().removeRoleFromMember((Member) entity, role).queue();
change(e, delta, mode, false);
}

@Override
Expand Down Expand Up @@ -73,4 +66,27 @@ protected Role[] convert(Object entity) {
protected String getPropertyName() {
return "roles";
}

@Override
public void changeAsync(Event e, Object[] delta, Changer.ChangeMode mode) {
change(e, delta, mode, true);
}

private void change(Event e, Object[] delta, Changer.ChangeMode mode, boolean async) {
final Role role = ((Role) delta[0]);
final Object entity = getExpr().getSingle(e);
if (EasyElement.anyNull(this, role, entity))
return;

if (!(entity instanceof Member))
return;
RestAction<?> action;
if (mode == Changer.ChangeMode.ADD)
action = ((Member) entity).getGuild().addRoleToMember((Member) entity, role);
else
action = ((Member) entity).getGuild().removeRoleFromMember((Member) entity, role);

if (async) action.complete();
else action.queue();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, Number value) {
((AudioChannel) role).getManager().setBitrate(value.intValue()).queue();
public void change(GuildChannel role, Number value, boolean async) {
var action = ((AudioChannel) role).getManager().setBitrate(value.intValue());

if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -37,7 +40,7 @@ public ChannelAction change(ChannelAction action, Number value) {
}

@Override
public Number get(GuildChannel role) {
public Number get(GuildChannel role, boolean async) {
return ((AudioChannel) role).getBitrate();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, Number value) {
((VoiceChannel) role).getManager().setUserLimit(value.intValue()).queue();
public void change(GuildChannel role, Number value, boolean async) {
var action = ((VoiceChannel) role).getManager().setUserLimit(value.intValue());

if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -37,7 +40,7 @@ public ChannelAction change(ChannelAction action, Number value) {
}

@Override
public Number get(GuildChannel role) {
public Number get(GuildChannel role, boolean async) {
return ((VoiceChannel) role).getUserLimit();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, Boolean value) {
((StandardGuildMessageChannel) role).getManager().setNSFW(value).queue();
public void change(GuildChannel role, Boolean value, boolean async) {
var action = ((StandardGuildMessageChannel) role).getManager().setNSFW(value);

if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -37,7 +40,7 @@ public ChannelAction change(ChannelAction action, Boolean value) {
}

@Override
public Boolean get(GuildChannel role) {
public Boolean get(GuildChannel role, boolean async) {
return ((StandardGuildMessageChannel) role).isNSFW();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, String value) {
role.getManager().setName(value).queue();
public void change(GuildChannel role, String value, boolean async) {
var action = role.getManager().setName(value);
if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -36,7 +38,7 @@ public ChannelAction change(ChannelAction action, String value) {
}

@Override
public String get(GuildChannel role) {
public String get(GuildChannel role, boolean async) {
return role.getName();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,11 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, Category value) {
((ICategorizableChannel) role).getManager().setParent(value).queue();
public void change(GuildChannel role, Category value, boolean async) {
var action = ((ICategorizableChannel) role).getManager().setParent(value);

if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -38,7 +41,7 @@ public ChannelAction change(ChannelAction action, Category value) {
}

@Override
public Category get(GuildChannel role) {
public Category get(GuildChannel role, boolean async) {
return ((ICategorizableChannel) role).getParentCategory();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,20 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, Region value) {
((AudioChannel) role).getManager().setRegion(value).queue();
public void change(GuildChannel role, Region value, boolean async) {
var action = ((AudioChannel) role).getManager().setRegion(value);

if (async) action.complete();
else action.queue();
}

@Override
public ChannelAction change(ChannelAction action, Region value) {
Skript.warning("You cannot change the voice channel region before its discord creation!");
return action;
return action.setRegion(value);
}

@Override
public Region get(GuildChannel role) {
public Region get(GuildChannel role, boolean async) {
return ((AudioChannel) role).getRegion();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel role, Number value) {
((TextChannel) role).getManager().setSlowmode(value.intValue()).queue();
public void change(GuildChannel role, Number value, boolean async) {
var action = ((TextChannel) role).getManager().setSlowmode(value.intValue());

if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -37,7 +40,7 @@ public ChannelAction change(ChannelAction action, Number value) {
}

@Override
public Number get(GuildChannel role) {
public Number get(GuildChannel role, boolean async) {
return ((TextChannel) role).getSlowmode();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import info.itsthesky.disky.DiSky;
import info.itsthesky.disky.api.skript.action.ActionProperty;
import info.itsthesky.disky.elements.properties.bot.SelfMember;
import info.itsthesky.disky.elements.sections.handler.DiSkyRuntimeHandler;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.attribute.IVoiceStatusChannel;
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
import net.dv8tion.jda.api.exceptions.InsufficientPermissionException;
import net.dv8tion.jda.api.requests.restaction.ChannelAction;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
Expand All @@ -34,25 +36,21 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel channel, String value) {
public void change(GuildChannel channel, String value, boolean async) {
if (!(channel instanceof IVoiceStatusChannel)) {
Skript.error("The channel status can only be applied on voice channel!");
return;
}

if (value.length() >= 500) {
DiSky.runtimeError("The channel status cannot be more than 500 characters long!",
"Channel Status", value,
"Length", value.length() + " characters");
DiSkyRuntimeHandler.error(new IllegalArgumentException("The channel status cannot be more than 500 characters long! (got " +value.length()+ " characters)"), node);
return;
}
final Member selfMember = channel.getGuild().getSelfMember();

if (channel.getGuild().getAudioManager().getConnectedChannel() == null
&& !selfMember.hasPermission(Permission.MANAGE_SERVER)) {
DiSky.runtimeError("DiSky cannot set the channel status without the MANAGE_SERVER permission (or without being connected to a voice channel)!",
"Target Channel", channel.getName() + " [" + channel.getId() + "]",
"Permission Required", "MANAGE_SERVER");
DiSkyRuntimeHandler.error(new InsufficientPermissionException(channel, Permission.MANAGE_SERVER), node);
return;
}

Expand All @@ -72,12 +70,12 @@ public void change(GuildChannel channel, String value) {

@Override
public ChannelAction change(ChannelAction action, String value) {
DiSky.getInstance().getLogger().warning("Cannot change the status of a voice channel before its creation.");
DiSkyRuntimeHandler.error(new IllegalStateException("Cannot change the status of a voice channel before its creation."), node);
return action;
}

@Override
public String get(GuildChannel role) {
public String get(GuildChannel role, boolean async) {
return ((VoiceChannel) role).getStatus();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,13 @@ public Class<?>[] acceptChange(Changer.ChangeMode mode) {
}

@Override
public void change(GuildChannel channel, String value) {
public void change(GuildChannel channel, String value, boolean async) {
if (channel == null || channel instanceof ForumChannel)
return;

((StandardGuildMessageChannel) channel).getManager().setTopic(value).queue();
var action = ((StandardGuildMessageChannel) channel).getManager().setTopic(value);
if (async) action.complete();
else action.queue();
}

@Override
Expand All @@ -41,7 +43,7 @@ public ChannelAction change(ChannelAction action, String value) {
}

@Override
public String get(GuildChannel channel) {
public String get(GuildChannel channel, boolean async) {
if (channel instanceof ForumChannel)
return ((ForumChannel) channel).getTopic();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import info.itsthesky.disky.api.changers.ChangeableSimplePropertyExpression;
import info.itsthesky.disky.api.emojis.Emote;
import info.itsthesky.disky.core.Bot;
import info.itsthesky.disky.elements.changers.IAsyncChangeableExpression;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand All @@ -21,7 +22,8 @@
})
@Examples({"emote name of event-emote",
"set emote name of reaction \"disky\" to \"disky2\" # Will now be 'reaction \"disky2\"' to get it back"})
public class EmoteName extends ChangeableSimplePropertyExpression<Emote, String> {
public class EmoteName extends ChangeableSimplePropertyExpression<Emote, String>
implements IAsyncChangeableExpression {

static {
register(
Expand Down Expand Up @@ -50,6 +52,15 @@ public class EmoteName extends ChangeableSimplePropertyExpression<Emote, String>

@Override
public void change(Event e, Object[] delta, Bot bot, Changer.ChangeMode mode) {
change(e, delta, mode, false);
}

@Override
public void changeAsync(Event e, Object[] delta, Changer.ChangeMode mode) {
change(e, delta, mode, true);
}

private void change(Event e, Object[] delta, Changer.ChangeMode mode, boolean async) {
final @Nullable Emote emote = getExpr().getSingle(e);
if (emote == null || delta == null || delta.length == 0 || delta[0] == null)
return;
Expand All @@ -59,9 +70,12 @@ public void change(Event e, Object[] delta, Bot bot, Changer.ChangeMode mode) {
if (!emote.isCustom())
return;

emote.getEmote().getManager().setName(newName).queue(null);
var action = emote.getEmote().getManager().setName(newName);
if (async) action.complete();
else action.queue();
}


@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
return super.init(exprs, matchedPattern, isDelayed, parseResult);
Expand Down
Loading

0 comments on commit f2faf93

Please sign in to comment.