Skip to content
This repository was archived by the owner on Aug 21, 2025. It is now read-only.

Commit eb7b6df

Browse files
committed
improved exp
1 parent 040d26d commit eb7b6df

3 files changed

Lines changed: 53 additions & 28 deletions

File tree

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
package fr.funixgaming.funixbot.twitch.commands;
22

3-
import fr.funixgaming.api.client.funixbot.clients.FunixBotUserExperienceClient;
43
import fr.funixgaming.api.client.funixbot.dtos.FunixBotUserExperienceDTO;
54
import fr.funixgaming.funixbot.core.commands.entities.BotCommand;
5+
import fr.funixgaming.funixbot.core.exceptions.FunixBotException;
66
import fr.funixgaming.funixbot.twitch.FunixBot;
7+
import fr.funixgaming.funixbot.twitch.modules.ChatExperience;
78
import fr.funixgaming.funixbot.twitch.utils.TwitchEmotes;
89
import fr.funixgaming.twitch.api.chatbot_irc.entities.ChatMember;
910
import lombok.NonNull;
11+
import lombok.extern.slf4j.Slf4j;
1012
import org.jetbrains.annotations.NotNull;
1113

12-
import java.util.List;
13-
14+
@Slf4j
1415
public class LevelCommand extends BotCommand {
1516
private final FunixBot funixBot;
1617

17-
private final FunixBotUserExperienceClient userExperienceClient;
18-
1918
public LevelCommand(final FunixBot bot) {
2019
super("level", "lvl", "lv");
2120
this.funixBot = bot;
22-
23-
this.userExperienceClient = bot.getFunixBotUserExperienceClient();
2421
}
2522

2623
@Override
2724
public void onUserCommand(@NonNull ChatMember user, @NonNull String command, @NotNull @NonNull String[] args) {
28-
final String channel = user.getChannelName();
29-
final List<FunixBotUserExperienceDTO> experience = userExperienceClient.search(String.format("twitchUserId:%d", user.getUserId()), "0", "1");
30-
31-
if (experience.isEmpty()) {
32-
funixBot.sendChatMessage(channel, String.format("%s n'a pas encore de niveau sur ce stream.", user.getDisplayName()));
33-
} else {
34-
final FunixBotUserExperienceDTO userExperience = experience.get(0);
35-
funixBot.sendChatMessage(channel, String.format(
36-
"%s %s niveau %d (%d/%d)",
37-
TwitchEmotes.TWITCH_LOGO,
38-
user.getDisplayName(),
39-
userExperience.getLevel(),
40-
userExperience.getXp(),
41-
userExperience.getXpNextLevel())
42-
);
25+
try {
26+
final String channel = user.getChannelName();
27+
final FunixBotUserExperienceDTO userExperience = ChatExperience.getInstance().findExpByUserId(Integer.toString(user.getUserId()));
28+
29+
if (userExperience == null) {
30+
funixBot.sendChatMessage(channel, String.format("%s n'a pas encore de niveau sur ce stream.", user.getDisplayName()));
31+
} else {
32+
funixBot.sendChatMessage(channel, String.format(
33+
"%s %s niveau %d (%d/%d)",
34+
TwitchEmotes.TWITCH_LOGO,
35+
user.getDisplayName(),
36+
userExperience.getLevel(),
37+
userExperience.getXp(),
38+
userExperience.getXpNextLevel())
39+
);
40+
}
41+
} catch (FunixBotException e) {
42+
log.error("Erreur !level command: {}", e.getMessage());
4343
}
4444
}
4545
}

FunixBot-Twitch/src/main/java/fr/funixgaming/funixbot/twitch/events/FunixBotEvents.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import fr.funixgaming.funixbot.core.exceptions.FunixBotException;
55
import fr.funixgaming.funixbot.twitch.FunixBot;
66
import fr.funixgaming.funixbot.twitch.modules.AutoMessages;
7-
import fr.funixgaming.funixbot.twitch.modules.ChatExpGain;
7+
import fr.funixgaming.funixbot.twitch.modules.ChatExperience;
88
import fr.funixgaming.twitch.api.chatbot_irc.TwitchEvents;
99
import fr.funixgaming.twitch.api.chatbot_irc.entities.ChatMember;
1010
import fr.funixgaming.twitch.api.chatbot_irc.entities.ChatMessage;
@@ -20,7 +20,7 @@ public class FunixBotEvents implements TwitchEvents {
2020

2121
private final CommandHandler commandHandler;
2222
private final AutoMessages autoMessages;
23-
private final ChatExpGain chatExpGain;
23+
private final ChatExperience chatExperience;
2424

2525
@Override
2626
public void onUserChat(UserChatEvent event) {
@@ -31,11 +31,11 @@ public void onUserChat(UserChatEvent event) {
3131
try {
3232
commandHandler.onNewChat(chatMember, message, FunixBot.getInstance(), chatMember.getChannelName());
3333
autoMessages.userMessage();
34-
chatExpGain.userChatExp(chatMember);
34+
chatExperience.userChatExp(chatMember);
3535

3636
log.info("[" + chatMember.getDisplayName() + "] " + message);
3737
} catch (FunixBotException e) {
38-
e.printStackTrace();
38+
log.error("Erreur chat event: {}", e.getMessage());
3939
}
4040
}
4141
}

FunixBot-Twitch/src/main/java/fr/funixgaming/funixbot/twitch/modules/ChatExpGain.java renamed to FunixBot-Twitch/src/main/java/fr/funixgaming/funixbot/twitch/modules/ChatExperience.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626

2727
@Slf4j
2828
@Component
29-
@RequiredArgsConstructor
30-
public class ChatExpGain {
29+
public class ChatExperience {
30+
private static volatile ChatExperience instance = null;
3131

3232
private final TwitchStreamStatus streamStatus;
3333
private final TwitchBotConfig twitchBotConfig;
@@ -36,6 +36,15 @@ public class ChatExpGain {
3636
private final TmiTwitchApi tmiTwitchApi = new TmiTwitchApi();
3737
private final Set<FunixBotUserExperienceDTO> userExperienceCache = new HashSet<>();
3838

39+
public ChatExperience(TwitchStreamStatus twitchStreamStatus,
40+
TwitchBotConfig twitchBotConfig,
41+
FunixBotUserExperienceClient funixBotUserExperienceClient) {
42+
this.streamStatus = twitchStreamStatus;
43+
this.twitchBotConfig = twitchBotConfig;
44+
this.funixBotUserExperienceClient = funixBotUserExperienceClient;
45+
instance = this;
46+
}
47+
3948
public void userChatExp(final ChatMember user) {
4049
if (user.getDisplayName().equalsIgnoreCase(twitchBotConfig.getStreamerUsername()) ||
4150
user.getDisplayName().equalsIgnoreCase(twitchBotConfig.getBotUsername())) {
@@ -62,6 +71,16 @@ public void userChatExp(final ChatMember user) {
6271
}
6372
}
6473

74+
public void giveUserExp(final String twitchUserId, final String userName, final int expToGive) throws FunixBotException {
75+
if (userName.equalsIgnoreCase(twitchBotConfig.getStreamerUsername()) ||
76+
userName.equalsIgnoreCase(twitchBotConfig.getBotUsername())) {
77+
return;
78+
}
79+
80+
final FunixBotUserExperienceDTO experienceDTO = findExpByUserId(twitchUserId);
81+
addExp(experienceDTO, userName, expToGive);
82+
}
83+
6584
@Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
6685
public void gainLurkExp() {
6786
try {
@@ -154,4 +173,10 @@ private void addExp(@Nullable final FunixBotUserExperienceDTO experience, final
154173
}
155174
}
156175

176+
public static ChatExperience getInstance() throws FunixBotException {
177+
if (instance == null) {
178+
throw new FunixBotException("Chat Experience pas chargé.");
179+
}
180+
return instance;
181+
}
157182
}

0 commit comments

Comments
 (0)