- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 102
Implement Quotes Board #1029
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: develop
Are you sure you want to change the base?
Implement Quotes Board #1029
Conversation
        
          
                application/src/main/java/org/togetherjava/tjbot/features/Features.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
      4a68771    to
    bc3b7d6      
    Compare
  
    35ba891    to
    47cdcb2      
    Compare
  
    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.
add a message about config changes on main pr message, moderators said its hard to keep track of it otherwise
        
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
      47cdcb2    to
    6d86c8f      
    Compare
  
    ed3dbd5    to
    59dc245      
    Compare
  
    59dc245    to
    35abd02      
    Compare
  
    | maybe it makes more sense to implement this with the new forward feature in discord? | 
35abd02    to
    7b19538      
    Compare
  
    | 
 @SquidXTV This is now a feature! With the latest changes, we are now forwarding messages instead of embedding messages. Good suggestion :) | 
bbde421    to
    7d839d6      
    Compare
  
    | 
 Good job <3 | 
| 
 Thank you! I have updated the PR description. Thanks for pointing it out! | 
        
          
                application/src/main/java/org/togetherjava/tjbot/config/CoolMessagesBoardConfig.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                application/src/main/java/org/togetherjava/tjbot/features/basic/CoolMessagesBoardManager.java
              
                Outdated
          
            Show resolved
            Hide resolved
        
      9f303cd    to
    8407d3f      
    Compare
  
    | gonna help with this | 
For this feature, the version of JDA had to be bumped to 5.1.2
8407d3f    to
    fb4fb5d      
    Compare
  
    * minimumReactions-5, star symbol instead of encoding
* requests changes by zabuzard except for moving getBoardChannel down and markMessageAsProcessed
* Following JavaDocs guidelines of making the first letter capital
* code refactoring
* refactor: use correct method for reactionsCount
It turns out that for each event fired, every *single* damn time,
messageReaction.hasCount() would always return false. No matter what.
Terrible documentation from JDA's side. As a result, because of the
ternary operator:
    messageReaction.hasCount() ? messageReaction.getCount() + 1 : 1
the result of `reactionsCount` would always end up holding the value of
one.
In the following changes, we use `messageReaction.retrieveUsers()` to
get a list of the people reacted, get a `Stream<User>` from that and get
its count. Much more reliable this way and it also happens to be more
readable.
Signed-off-by: Chris Sdogkos <work@chris-sdogkos.com>
Co-authored-by: Chris Sdogkos <work@chris-sdogkos.com>
Co-authored-by: Surya Tejess <74978874+suryatejess@users.noreply.github.com>
    Since 1ade409 (refactor: code review addressed by Zabuzard, 2025-06-28) primarily contains a generaly vague JavaDoc describing what the `QuoteBoardForwarder.java` class is doing, a more descriptive one replaces it. Signed-off-by: Chris Sdogkos <work@chris-sdogkos.com>
| "fallbackChannelPattern": "java-news-and-changes", | ||
| "pollIntervalInMinutes": 10 | ||
| }, | ||
| "coolMessagesConfig": { | 
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.
please rename it here as well, thanks
| private final RSSFeedsConfig rssFeedsConfig; | ||
| private final String selectRolesChannelPattern; | ||
| private final String memberCountCategoryPattern; | ||
| private final QuoteBoardConfig coolMessagesConfig; | 
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.
rename here as well
| required = true) String selectRolesChannelPattern, | ||
| @JsonProperty(value = "coolMessagesConfig", | ||
| required = true) QuoteBoardConfig coolMessagesConfig) { | 
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.
rename here as well
| this.featureBlacklistConfig = Objects.requireNonNull(featureBlacklistConfig); | ||
| this.rssFeedsConfig = Objects.requireNonNull(rssFeedsConfig); | ||
| this.selectRolesChannelPattern = Objects.requireNonNull(selectRolesChannelPattern); | ||
| this.coolMessagesConfig = Objects.requireNonNull(coolMessagesConfig); | 
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.
rename here as well
| /** | ||
| * The configuration of the cool messages config. | ||
| * | ||
| * @return configuration of cool messages config | ||
| */ | ||
| public QuoteBoardConfig getCoolMessagesConfig() { | ||
| return coolMessagesConfig; | ||
| } | 
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.
rename here as well
id also appreciate if we add a second sentence to the javadoc here to summarize the feature quickly. perhaps:
The configuration of the quote board feature. Quotes user selected messages.
| * @param reactionEmoji the emoji with which users should react to | ||
| */ | ||
| public QuoteBoardConfig { | ||
| Objects.requireNonNull(boardChannelPattern); | 
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.
is that possibly missing checks on the other params as well?
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.
I feel like the checks for minimumReactions, and reactionEmoji is not required in the record constructor as they'd already be configured in the config template
But there is a possibility that there might not be a channel on the server with the name contained by theboardChannelPattern variable and hence we need it here.
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.
they are all (rightfully) marked as required though. so we need to check they are actually set to a non null value
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.
sounds fair
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.
since minimumReactions is an integer, i dont think we need to perform a check for it
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.
aye. but the other one is a string 👍
| import java.util.regex.Pattern; | ||
|  | ||
| /** | ||
| * Listens for reaction-add events and turns popular messages into “quotes”. | 
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.
no smart-quotes please. just "
| @Override | ||
| public void onMessageReactionAdd(MessageReactionAddEvent event) { | ||
| final MessageReaction messageReaction = event.getReaction(); | ||
| boolean isCoolEmoji = messageReaction.getEmoji().equals(triggerReaction); | 
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.
id rename that to sth like isTriggerEmoji
| } | ||
|  | ||
| final int reactionsCount = (int) messageReaction.retrieveUsers().stream().count(); | ||
| if (isCoolEmoji && reactionsCount >= config.minimumReactions()) { | 
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.
personally id favor early-return to reduce the nesting here.
| boolean isCoolEmoji = messageReaction.getEmoji().equals(triggerReaction); | ||
| long guildId = event.getGuild().getIdLong(); | ||
|  | ||
| if (hasAlreadyForwardedMessage(event.getJDA(), messageReaction)) { | ||
| return; | ||
| } | ||
|  | ||
| final int reactionsCount = (int) messageReaction.retrieveUsers().stream().count(); | ||
| if (isCoolEmoji && reactionsCount >= config.minimumReactions()) { | 
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.
there is no need to do the hasAlreadyForwardedMessage and the reactionsCount computation if (!isCoolEmoji). add an early-return.
c3c1579    to
    a6085db      
    Compare
  
    
Closes #1027.
Screenshots
Configuration changes
coolMessagesConfig.minimumReactionfor the target message to
be considered to the board channel.
coolMessagesConfig.boardChannelPatternthat should be quoted get posted to.
"quotes"coolMessagesConfig.reactionEmoji"U+2B50"