-
Notifications
You must be signed in to change notification settings - Fork 15
Forum Tags #63
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Forum Tags #63
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,18 +8,23 @@ | |
| import com.denizenscript.denizencore.objects.*; | ||
| import com.denizenscript.denizencore.objects.core.ElementTag; | ||
| import com.denizenscript.denizencore.objects.core.ListTag; | ||
| import com.denizenscript.denizencore.tags.ObjectTagProcessor; | ||
| import com.denizenscript.denizencore.tags.Attribute; | ||
| import com.denizenscript.denizencore.tags.ObjectTagProcessor; | ||
| import com.denizenscript.denizencore.tags.TagContext; | ||
| import com.denizenscript.denizencore.utilities.CoreUtilities; | ||
| import com.denizenscript.denizencore.utilities.debugging.Debug; | ||
| import net.dv8tion.jda.api.entities.*; | ||
| import net.dv8tion.jda.api.entities.channel.Channel; | ||
| import net.dv8tion.jda.api.entities.channel.attribute.IThreadContainer; | ||
| import net.dv8tion.jda.api.entities.channel.concrete.ForumChannel; | ||
| import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; | ||
| import net.dv8tion.jda.api.entities.channel.forums.ForumTagSnowflake; | ||
| import net.dv8tion.jda.api.entities.channel.middleman.*; | ||
| import net.dv8tion.jda.api.entities.channel.unions.IThreadContainerUnion; | ||
|
|
||
| import java.util.ArrayList; | ||
| import java.util.Collection; | ||
|
|
||
| public class DiscordChannelTag implements ObjectTag, FlaggableObject, Adjustable { | ||
|
|
||
| // <--[ObjectType] | ||
|
|
@@ -434,6 +439,77 @@ public static void register() { | |
| return new ElementTag(((StandardGuildMessageChannel) object.getChannel()).getTopic()); | ||
| }); | ||
|
|
||
| // <--[tag] | ||
| // @attribute <DiscordChannelTag.forum_channel_tags> | ||
| // @returns ListTag | ||
| // @plugin dDiscordBot | ||
| // @description | ||
| // Returns the ids of possible tags for a forum post. | ||
| // Only applicable to forum channels. | ||
| // See also <@link tag DiscordChannelTag.forum_post_tags> and <@link mechanism DiscordChannelTag.forum_post_tags>. | ||
| // --> | ||
| tagProcessor.registerTag(ListTag.class, "forum_channel_tags", (attribute, object) -> { | ||
| if (!(object.getChannel() instanceof ForumChannel forumChannel)) { | ||
| attribute.echoError("Cannot get 'forum_channel_tags' tag: this is not a forum channel."); | ||
| return null; | ||
| } | ||
| return new ListTag(forumChannel.getAvailableTags(), tag -> new ElementTag(tag.getIdLong())); | ||
| }); | ||
|
|
||
| // <--[tag] | ||
| // @attribute <DiscordChannelTag.forum_post_tags> | ||
| // @returns ListTag | ||
| // @plugin dDiscordBot | ||
| // @mechanism DiscordChannelTag.forum_post_tags | ||
| // @description | ||
| // Returns the ids of tags on a forum post. | ||
| // See also <@link tag DiscordChannelTag.forum_channel_tags>. | ||
| // --> | ||
| tagProcessor.registerTag(ListTag.class, "forum_post_tags", (attribute, object) -> { | ||
| if (!(object.getChannel() instanceof ThreadChannel threadChannel)) { | ||
| attribute.echoError("Cannot get 'forum_post_tags' tag: this channel is not a forum post."); | ||
| return null; | ||
| } | ||
| return new ListTag(threadChannel.getAppliedTags(), tag -> new ElementTag(tag.getIdLong())); | ||
| }); | ||
|
|
||
| // <--[mechanism] | ||
| // @object DiscordChannelTag | ||
| // @name forum_post_tags | ||
| // @input ListTag | ||
| // @plugin dDiscordBot | ||
| // @description | ||
| // Sets the tags on a forum post. A post can have a maximum of 5 tags. | ||
| // Entries are the ids of the tags. Provide no input to remove all tags. | ||
| // @tags | ||
| // <DiscordChannelTag.forum_channel_tags> | ||
| // <DiscordChannelTag.forum_post_tags> | ||
| // --> | ||
| tagProcessor.registerMechanism("forum_post_tags", false, (object, mechanism) -> { | ||
| if (!(object.getChannel() instanceof ThreadChannel threadChannel)) { | ||
| mechanism.echoError("Cannot adjust 'forum_post_tags' tag: this channel is not a forum post."); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| return; | ||
| } | ||
| if (!mechanism.hasValue()) { | ||
| threadChannel.getManager().setAppliedTags().submit(); | ||
| return; | ||
| } | ||
| ListTag input = mechanism.valueAsType(ListTag.class); | ||
| int size; | ||
| if (input.size() > 5) { | ||
| mechanism.echoError("The 'DiscordChannelTag.forum_post_tags' mechanism has a maximum input of 5 tag ids."); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here, the mechanism name and everything is already automatically in the error message (or should be at least). |
||
| size = 5; | ||
| } | ||
| else { | ||
| size = input.size(); | ||
| } | ||
| Collection<ForumTagSnowflake> forumTags = new ArrayList<>(size); | ||
| for (int i = 0; i < size; i++) { | ||
| forumTags.add(ForumTagSnowflake.fromId(input.get(i))); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can check if there's precedence one way or the other in the rest of dDiscordBot, but might better if we handle the |
||
| } | ||
| threadChannel.getManager().setAppliedTags(forumTags).submit(); | ||
| }); | ||
|
|
||
| // <--[mechanism] | ||
| // @object DiscordChannelTag | ||
| // @name add_thread_member | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All of these would be
ListTag(Number)I believe?