// Copyright (c) 2015 Christopher "BlayTheNinth" Baker
package net.blay09.mods.eirairc.handler;
import net.blay09.mods.eirairc.ConnectionManager;
import net.blay09.mods.eirairc.EiraIRC;
import net.blay09.mods.eirairc.api.EiraIRCAPI;
import net.blay09.mods.eirairc.api.IRCReplyCodes;
import net.blay09.mods.eirairc.api.event.*;
import net.blay09.mods.eirairc.api.irc.*;
import net.blay09.mods.eirairc.bot.IRCBotImpl;
import net.blay09.mods.eirairc.config.*;
import net.blay09.mods.eirairc.config.settings.BotSettings;
import net.blay09.mods.eirairc.config.settings.GeneralSettings;
import net.blay09.mods.eirairc.config.settings.ThemeSettings;
import net.blay09.mods.eirairc.irc.IRCChannelUserMode;
import net.blay09.mods.eirairc.irc.IRCConnectionImpl;
import net.blay09.mods.eirairc.irc.IRCUserImpl;
import net.blay09.mods.eirairc.util.*;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Loader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class IRCEventHandler {
private static final Logger logger = LogManager.getLogger();
public static void fireNickChangeEvent(IRCConnectionImpl connection, IRCMessage msg, IRCUser user, String oldNick, String newNick) {
// Go back to default nick once it's available
if (user == connection.getBotUser()) {
connection.setSilentNickFailure(false);
}
if (user != connection.getBotUser() && oldNick.equals(connection.getServerConfig().getNick())) {
connection.nick(oldNick);
}
IRCUserNickChangeEvent event = new IRCUserNickChangeEvent(connection, msg, user, oldNick, newNick);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
if (ConfigHelper.getGeneralSettings(user).muted.get() || IgnoreList.isIgnored(user)) {
return;
}
if (SharedGlobalConfig.botSettings.relayNickChanges.get()) {
String format = ConfigHelper.getBotSettings(user).getMessageFormat().mcUserNickChange;
format = format.replace("{OLDNICK}", oldNick);
EiraIRCAPI.getChatHandler().addChatMessage(MessageFormat.formatChatComponent(format, connection, null, user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote), connection);
}
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireUserJoinEvent(IRCConnection connection, IRCMessage message, IRCChannel channel, IRCUser user) {
BotSettings botSettings = ConfigHelper.getBotSettings(channel);
if (botSettings.sendAutoWho.get()) {
Utils.sendPlayerList(user);
}
IRCUserJoinEvent event = new IRCUserJoinEvent(connection, message, channel, user);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
if (ConfigHelper.getGeneralSettings(channel).muted.get()) {
return;
}
if (botSettings.relayIRCJoinLeave.get()) {
String format = ConfigHelper.getBotSettings(channel).getMessageFormat().mcUserJoin;
EiraIRCAPI.getChatHandler().addChatMessage(MessageFormat.formatChatComponent(format, connection, channel, user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote), channel);
}
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
public static void fireUserLeaveEvent(IRCConnection connection, IRCMessage message, IRCChannel channel, IRCUser user, String quitMessage) {
IRCUserLeaveEvent event = new IRCUserLeaveEvent(connection, message, channel, user, quitMessage);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
if (ConfigHelper.getGeneralSettings(channel).muted.get()) {
return;
}
if (ConfigHelper.getBotSettings(channel).relayIRCJoinLeave.get()) {
String format = ConfigHelper.getBotSettings(channel).getMessageFormat().mcUserLeave;
EiraIRCAPI.getChatHandler().addChatMessage(MessageFormat.formatChatComponent(format, connection, channel, user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote), channel);
}
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
public static void fireUserQuitEvent(IRCConnectionImpl connection, IRCMessage message, IRCUser user, String quitMessage) {
// Go back to default nick once it's available
if (user != connection.getBotUser() && user.getName().equals(connection.getServerConfig().getNick())) {
connection.nick(user.getName());
}
IRCUserQuitEvent event = new IRCUserQuitEvent(connection, message, user, quitMessage);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
if (ConfigHelper.getGeneralSettings(user).muted.get()) {
return;
}
if (SharedGlobalConfig.botSettings.relayIRCJoinLeave.get()) {
String format = ConfigHelper.getBotSettings(user).getMessageFormat().mcUserQuit;
EiraIRCAPI.getChatHandler().addChatMessage(MessageFormat.formatChatComponent(format, connection, null, user, quitMessage, MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote), connection);
}
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void firePrivateChatEvent(IRCConnection connection, IRCUser sender, IRCMessage rawMessage, String message, boolean isEmote, boolean isNotice) {
if (sender != null) {
if (IgnoreList.isIgnored(sender)) {
logger.info("Ignored message by " + sender.getName() + ": " + message);
return;
}
if (!isNotice && connection.getBot().isServerSide()) {
if (!((IRCBotImpl) connection.getBot()).processCommand(null, sender, message)) {
sender.notice(I19n.format("eirairc:bot.unknownCommand"));
}
return;
}
if (sender.getName().equals("tmi.twitch.tv") && isNotice && connection.getHost().equals(Globals.TWITCH_SERVER) && message.equals("Login unsuccessful")) {
connection.disconnect("");
fireConnectionFailedEvent(connection, new RuntimeException("Wrong username or invalid oauth token."));
return;
}
}
IRCPrivateChatEvent event = new IRCPrivateChatEvent(connection, sender, rawMessage, message, isEmote, isNotice);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
BotSettings botSettings = ConfigHelper.getBotSettings(null);
if (ConfigHelper.getGeneralSettings(sender).muted.get()) {
return;
}
if (connection.isTwitch() && event.sender.getName().equals("jtv")) {
return;
}
if (!botSettings.allowPrivateMessages.get()) {
if (!isNotice && sender != null) {
sender.notice(I19n.format("eirairc:commands.msg.disabled"));
}
return;
}
if (botSettings.filterLinks.get()) {
message = MessageFormat.filterLinks(message);
}
String format;
if (connection.isTwitch() && sender != null && sender.getName().equals("twitchnotify")) {
format = "[{CHANNEL}] {MESSAGE}";
} else if (isNotice) {
format = botSettings.getMessageFormat().mcPrivateNotice;
} else if (isEmote) {
format = botSettings.getMessageFormat().mcPrivateEmote;
} else {
format = botSettings.getMessageFormat().mcPrivateMessage;
}
IChatComponent chatComponent = MessageFormat.formatChatComponent(format, connection, null, sender, message, MessageFormat.Target.Minecraft, (isEmote ? MessageFormat.Mode.Emote : MessageFormat.Mode.Message));
if (event.isNotice && botSettings.hideNotices.get()) {
logger.info(chatComponent.getUnformattedText());
return;
}
String notifyMsg = chatComponent.getUnformattedText();
if (notifyMsg.length() > 42) {
notifyMsg = notifyMsg.substring(0, 42) + "...";
}
if (!event.isNotice) {
EiraIRC.proxy.publishNotification(NotificationType.PrivateMessage, notifyMsg);
}
EiraIRC.instance.getChatSessionHandler().addTargetUser(sender);
ThemeSettings theme = ConfigHelper.getTheme(sender);
EnumChatFormatting emoteColor = theme.emoteTextColor.get();
EnumChatFormatting twitchNameColor = (sender != null && SharedGlobalConfig.twitchNameColors.get()) ? ((IRCUserImpl) sender).getNameColor() : null;
EnumChatFormatting noticeColor = theme.ircNoticeTextColor.get();
if (isEmote && (emoteColor != null || twitchNameColor != null)) {
chatComponent.getChatStyle().setColor(twitchNameColor != null ? twitchNameColor : emoteColor);
} else if (isNotice && noticeColor != null) {
chatComponent.getChatStyle().setColor(noticeColor);
}
EiraIRCAPI.getChatHandler().addChatMessage(chatComponent, sender);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, sender);
}
break;
}
}
public static void fireChannelChatEvent(IRCConnection connection, IRCChannel channel, IRCUser sender, IRCMessage rawMessage, String message, boolean isEmote, boolean isNotice) {
if (sender != null && IgnoreList.isIgnored(sender)) {
logger.info("Ignored message by " + sender.getName() + ": " + message);
return;
}
if (!isNotice && message.startsWith(SharedGlobalConfig.ircCommandPrefix.get()) && ((IRCBotImpl) connection.getBot()).processCommand(channel, sender, message.substring(SharedGlobalConfig.ircCommandPrefix.get().length()))) {
return;
}
if (connection.isTwitch()) {
IRCUserImpl user = (IRCUserImpl) sender;
if (user != null) {
String userColor = rawMessage.getTagByKey("color");
if (userColor != null && !userColor.isEmpty()) {
user.setNameColor(IRCFormatting.getColorFromTwitch(userColor));
}
String subscriber = rawMessage.getTagByKey("subscriber");
if (subscriber != null) {
user.setTwitchSubscriber(subscriber.equals("1"));
}
String turbo = rawMessage.getTagByKey("turbo");
if (turbo != null) {
user.setTwitchTurbo(turbo.equals("1"));
}
String userType = rawMessage.getTagByKey("user-type");
if (userType != null && !userType.isEmpty()) {
user.setChannelUserMode(channel, IRCChannelUserMode.OPER);
} else {
user.setChannelUserMode(channel, null);
}
String displayName = rawMessage.getTagByKey("display-name");
if (displayName != null && !displayName.isEmpty()) {
user.setDisplayName(displayName);
} else {
user.setDisplayName(null);
}
}
}
IRCChannelChatEvent event = new IRCChannelChatEvent(connection, channel, sender, rawMessage, message, isEmote, isNotice);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
GeneralSettings settings = ConfigHelper.getGeneralSettings(channel);
if (settings.muted.get()) {
return;
}
if(connection.isTwitch() && sender != null && settings.subOnly.get() && !((TwitchUser) sender).isTwitchSubscriber(channel)) {
return;
}
if (EiraIRC.proxy.checkClientBridge(event)) {
return;
}
if (sender != null && connection.isTwitch() && sender.getName().equals("jtv")) {
return;
}
BotSettings botSettings = ConfigHelper.getBotSettings(channel);
if (botSettings.filterLinks.get()) {
message = MessageFormat.filterLinks(message);
}
String format;
if (connection.isTwitch() && sender != null && sender.getName().equals("twitchnotify")) {
format = "[{CHANNEL}] {MESSAGE}";
} else if (isNotice) {
format = botSettings.getMessageFormat().mcChannelNotice;
} else if (isEmote) {
format = botSettings.getMessageFormat().mcChannelEmote;
} else {
format = botSettings.getMessageFormat().mcChannelMessage;
}
IChatComponent chatComponent = MessageFormat.formatChatComponent(format, connection, channel, sender, message, MessageFormat.Target.Minecraft, event.isEmote ? MessageFormat.Mode.Emote : MessageFormat.Mode.Message);
if (isNotice && botSettings.hideNotices.get()) {
logger.info(chatComponent.getUnformattedText());
return;
}
ThemeSettings theme = ConfigHelper.getTheme(event.channel);
EnumChatFormatting emoteColor = theme.emoteTextColor.get();
EnumChatFormatting twitchNameColor = (sender != null && SharedGlobalConfig.twitchNameColors.get()) ? ((IRCUserImpl) sender).getNameColor() : null;
EnumChatFormatting noticeColor = theme.ircNoticeTextColor.get();
if (isEmote && (emoteColor != null || twitchNameColor != null)) {
chatComponent.getChatStyle().setColor(twitchNameColor != null ? twitchNameColor : emoteColor);
} else if (isNotice && noticeColor != null) {
chatComponent.getChatStyle().setColor(noticeColor);
}
EiraIRCAPI.getChatHandler().addChatMessage(chatComponent, channel);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
public static void fireChannelTopicEvent(IRCConnection connection, IRCMessage message, IRCChannel channel, IRCUser user, String topic) {
IRCChannelTopicEvent event = new IRCChannelTopicEvent(connection, message, channel, user, topic);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
if (ConfigHelper.getGeneralSettings(channel).muted.get()) {
return;
}
if(channel.hasTopic()) {
if (user == null) {
IChatComponent chatComponent = MessageFormat.formatChatComponent(ConfigHelper.getBotSettings(channel).getMessageFormat().mcTopic, connection, channel, null, channel.getTopic(), MessageFormat.Target.Minecraft, MessageFormat.Mode.Message);
EiraIRCAPI.getChatHandler().addChatMessage(chatComponent, channel);
} else {
ChatComponentBuilder.create().color('e').lang("eirairc:general.topicChange", user.getName(), channel.getName()).color('f').text(channel.getTopic()).send(channel);
}
}
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
public static void fireConnectedEvent(IRCConnection connection, IRCMessage message) {
if (LocalConfig.disableModpackIRC.get()) {
// It seems like the user connected to IRC manually - so re-enable the IRC feature and give them another chance to decide on next startup.
LocalConfig.disableModpackConfirmation.set(false);
LocalConfig.disableModpackIRC.set(false);
LocalConfig.save();
}
ServerConfig serverConfig = ConfigHelper.getServerConfig(connection);
// If this is a Twitch connection, tell the server that we're a JTVCLIENT so we receive name colors.
if (connection.isTwitch()) {
connection.irc("CAP REQ :twitch.tv/tags");
connection.irc("CAP REQ :twitch.tv/membership");
}
((IRCConnectionImpl) connection).nickServIdentify();
for (ChannelConfig channelConfig : serverConfig.getChannelConfigs()) {
GeneralSettings generalSettings = channelConfig.getGeneralSettings();
if (generalSettings.autoJoin.get()) {
connection.join(channelConfig.getName(), AuthManager.getChannelPassword(channelConfig.getIdentifier()));
}
}
if (!SharedGlobalConfig.defaultChat.get().equals("Minecraft")) {
IRCContext chatTarget = EiraIRCAPI.parseContext(null, SharedGlobalConfig.defaultChat.get(), IRCContext.ContextType.IRCChannel);
if (chatTarget.getContextType() != IRCContext.ContextType.Error) {
EiraIRC.instance.getChatSessionHandler().setChatTarget(chatTarget);
}
}
IRCConnectEvent event = new IRCConnectEvent(connection, message);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
ChatComponentBuilder.create().lang("eirairc:general.connected", connection.getHost()).send(connection);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireConnectionFailedEvent(IRCConnection connection, Exception exception) {
if (ConnectionManager.isLatestConnection(connection)) {
for (IRCChannel channel : connection.getChannels()) {
EiraIRC.instance.getChatSessionHandler().removeTargetChannel(channel);
}
ConnectionManager.removeConnection(connection);
}
IRCConnectionFailedEvent event = new IRCConnectionFailedEvent(connection, exception);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
ChatComponentBuilder.create().color('c').lang("eirairc:error.couldNotConnect", connection.getHost(), exception).send(connection);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireReconnectEvent(IRCConnection connection, int waitingTime) {
IRCReconnectEvent event = new IRCReconnectEvent(connection, waitingTime);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
ChatComponentBuilder.create().lang("eirairc:general.reconnecting", connection.getHost(), waitingTime / 1000).send(connection);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireDisconnectEvent(IRCConnection connection) {
if (ConnectionManager.isLatestConnection(connection)) {
for (IRCChannel channel : connection.getChannels()) {
EiraIRC.instance.getChatSessionHandler().removeTargetChannel(channel);
}
ConnectionManager.removeConnection(connection);
}
IRCDisconnectEvent event = new IRCDisconnectEvent(connection);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
ChatComponentBuilder.create().lang("eirairc:general.disconnected", connection.getHost()).send(connection);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireIRCErrorEvent(IRCConnectionImpl connection, IRCMessage message, int numeric, String[] args) {
switch (numeric) {
case IRCReplyCodes.ERR_NICKNAMEINUSE:
case IRCReplyCodes.ERR_NICKCOLLISION:
String failNick = args[1];
String tryNick = failNick + "_";
if (!connection.isSilentNickFailure()) {
ChatComponentBuilder.create().color('c').lang("eirairc:error.nickInUse", failNick, tryNick).send(connection);
}
connection.setSilentNickFailure(false);
connection.fallbackNick(tryNick);
break;
case IRCReplyCodes.ERR_ERRONEUSNICKNAME:
ChatComponentBuilder.create().color('c').lang("eirairc:error.nickInvalid", args[1]).send(connection);
ServerConfig serverConfig = ConfigHelper.getServerConfig(connection);
if (serverConfig.getNick() != null) {
serverConfig.setNick(connection.getNick());
}
break;
case IRCReplyCodes.ERR_MODELESS:
AuthManager.NickServData nickServData = AuthManager.getNickServData(connection.getIdentifier());
if(nickServData == null) {
ChatComponentBuilder.create().color('c').lang("eirairc:error.notIdentified", args[1]).send(connection);
}
connection.joinAfterNickServ(args[1]);
break;
}
IRCErrorEvent event = new IRCErrorEvent(connection, message, numeric, args);
switch (event.getResult()) {
case DEFAULT:
switch (numeric) {
case IRCReplyCodes.ERR_NONICKCHANGE:
ChatComponentBuilder.create().color('c').lang("eirairc:error.noNickChange").send(connection);
break;
case IRCReplyCodes.ERR_SERVICESDOWN:
ChatComponentBuilder.create().color('c').lang("eirairc:error.servicesDown").send(connection);
break;
case IRCReplyCodes.ERR_TARGETTOOFAST:
ChatComponentBuilder.create().color('c').lang("eirairc:error.targetTooFast").send(connection);
break;
case IRCReplyCodes.ERR_CANNOTSENDTOCHAN:
case IRCReplyCodes.ERR_TOOMANYCHANNELS:
case IRCReplyCodes.ERR_TOOMANYTARGETS:
case IRCReplyCodes.ERR_UNKNOWNERROR:
case IRCReplyCodes.ERR_NOSUCHSERVER:
case IRCReplyCodes.ERR_NOSUCHSERVICE:
case IRCReplyCodes.ERR_NOTOPLEVEL:
case IRCReplyCodes.ERR_WILDTOPLEVEL:
case IRCReplyCodes.ERR_BADMASK:
case IRCReplyCodes.ERR_UNKNOWNCOMMAND:
case IRCReplyCodes.ERR_NOADMININFO:
case IRCReplyCodes.ERR_NOTONCHANNEL:
case IRCReplyCodes.ERR_WASNOSUCHNICK:
case IRCReplyCodes.ERR_NOSUCHNICK:
case IRCReplyCodes.ERR_NOSUCHCHANNEL:
case IRCReplyCodes.ERR_NOLOGIN:
case IRCReplyCodes.ERR_BANNEDFROMCHAN:
case IRCReplyCodes.ERR_CHANOPRIVSNEEDED:
case IRCReplyCodes.ERR_BADCHANMASK:
case IRCReplyCodes.ERR_BADCHANNELKEY:
case IRCReplyCodes.ERR_INVITEONLYCHAN:
case IRCReplyCodes.ERR_UNKNOWNMODE:
case IRCReplyCodes.ERR_CHANNELISFULL:
case IRCReplyCodes.ERR_KEYSET:
case IRCReplyCodes.ERR_NEEDMOREPARAMS:
ChatComponentBuilder.create().color('c').lang("eirairc:error.genericTarget", args[1], args[2]).send(connection);
break;
case IRCReplyCodes.ERR_NOORIGIN:
case IRCReplyCodes.ERR_NORECIPIENT:
case IRCReplyCodes.ERR_NOTEXTTOSEND:
case IRCReplyCodes.ERR_NOMOTD:
case IRCReplyCodes.ERR_FILEERROR:
case IRCReplyCodes.ERR_NONICKNAMEGIVEN:
case IRCReplyCodes.ERR_SUMMONDISABLED:
case IRCReplyCodes.ERR_USERSDISABLED:
case IRCReplyCodes.ERR_NOTREGISTERED:
case IRCReplyCodes.ERR_PASSWDMISMATCH:
case IRCReplyCodes.ERR_YOUREBANNEDCREEP:
case IRCReplyCodes.ERR_USERSDONTMATCH:
case IRCReplyCodes.ERR_UMODEUNKNOWNFLAG:
case IRCReplyCodes.ERR_NOOPERHOST:
case IRCReplyCodes.ERR_NOPRIVILEGES:
case IRCReplyCodes.ERR_ALREADYREGISTERED:
case IRCReplyCodes.ERR_NOPERMFORHOST:
case IRCReplyCodes.ERR_CANTKILLSERVER:
ChatComponentBuilder.create().color('c').lang("eirairc:error.generic", args[1]).send(connection);
break;
default:
logger.warn("Unhandled error code: {} ({} arguments)", numeric, args.length);
break;
}
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireChannelCTCPEvent(IRCConnection connection, IRCChannel channel, IRCUser sender, IRCMessage rawMessage, String message, boolean isNotice) {
if (sender != null && IgnoreList.isIgnored(sender)) {
logger.info("Ignored message by " + sender.getName() + ": " + message);
return;
}
IRCChannelCTCPEvent event = new IRCChannelCTCPEvent(connection, channel, sender, rawMessage, message, isNotice);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
if (ConfigHelper.getGeneralSettings(event.channel).muted.get()) {
return;
}
if (EiraIRC.proxy.checkClientBridge(event)) {
return;
}
BotSettings botSettings = ConfigHelper.getBotSettings(event.channel);
if (botSettings.filterLinks.get()) {
message = MessageFormat.filterLinks(message);
}
// append CTCP tag
message = "[CTCP] " + message;
String format;
if (event.connection.isTwitch() && event.sender != null && event.sender.getName().equals("twitchnotify")) {
format = "[{CHANNEL}] {MESSAGE}";
} else if (event.isNotice) {
format = botSettings.getMessageFormat().mcChannelNotice;
} else {
format = botSettings.getMessageFormat().mcChannelMessage;
}
IChatComponent chatComponent = MessageFormat.formatChatComponent(format, event.connection, event.channel, event.sender, message, MessageFormat.Target.Minecraft, MessageFormat.Mode.Message);
if (event.isNotice && botSettings.hideNotices.get()) {
logger.info(chatComponent.getUnformattedText());
return;
}
ThemeSettings theme = ConfigHelper.getTheme(event.channel);
EnumChatFormatting noticeColor = theme.ircNoticeTextColor.get();
if (event.isNotice && noticeColor != null) {
chatComponent.getChatStyle().setColor(noticeColor);
}
EiraIRCAPI.getChatHandler().addChatMessage(chatComponent, channel);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
public static void firePrivateCTCPEvent(IRCConnection connection, IRCUser sender, IRCMessage rawMessage, String message, boolean isNotice) {
if (sender != null && IgnoreList.isIgnored(sender)) {
logger.info("Ignored message by " + sender.getName() + ": " + message);
return;
}
IRCPrivateCTCPEvent event = new IRCPrivateCTCPEvent(connection, sender, rawMessage, message, isNotice);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case DEFAULT:
BotSettings botSettings = ConfigHelper.getBotSettings(connection);
if (botSettings.allowCTCP.get() && sender != null && !isNotice) {
if (message.startsWith("VERSION ")) {
String modVersion = Loader.instance().getIndexedModList().get("eirairc").getDisplayVersion();
String mcVersion = Loader.instance().getMCVersionString();
sender.ctcpNotice("VERSION EiraIRC " + modVersion + " on " + mcVersion + " - http://blay09.net");
return;
}
}
if (ConfigHelper.getGeneralSettings(event.sender).muted.get()) {
return;
}
if (!botSettings.allowCTCP.get()) {
if (!event.isNotice && event.sender != null) {
event.sender.notice(I19n.format("eirairc:commands.ctcp.disabled"));
}
return;
}
if (botSettings.filterLinks.get()) {
message = MessageFormat.filterLinks(message);
}
message = "[CTCP] " + message;
String format;
if (event.connection.isTwitch() && event.sender != null && event.sender.getName().equals("twitchnotify")) {
format = "[{CHANNEL}] {MESSAGE}";
} else if (event.isNotice) {
format = botSettings.getMessageFormat().mcPrivateNotice;
} else {
format = botSettings.getMessageFormat().mcPrivateMessage;
}
IChatComponent chatComponent = MessageFormat.formatChatComponent(format, event.connection, null, event.sender, message, MessageFormat.Target.Minecraft, MessageFormat.Mode.Message);
if (event.isNotice && botSettings.hideNotices.get()) {
logger.info(chatComponent.getUnformattedText());
return;
}
String notifyMsg = chatComponent.getUnformattedText();
if (notifyMsg.length() > 42) {
notifyMsg = notifyMsg.substring(0, 42) + "...";
}
if (!event.isNotice) {
EiraIRC.proxy.publishNotification(NotificationType.PrivateMessage, notifyMsg);
}
EiraIRC.instance.getChatSessionHandler().addTargetUser(event.sender);
ThemeSettings theme = ConfigHelper.getTheme(event.sender);
EnumChatFormatting noticeColor = theme.ircNoticeTextColor.get();
if (event.isNotice && noticeColor != null) {
chatComponent.getChatStyle().setColor(noticeColor);
}
EiraIRCAPI.getChatHandler().addChatMessage(chatComponent, sender);
break;
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, sender);
}
break;
}
}
public static void fireConnectingEvent(IRCConnection connection) {
ConnectionManager.addConnection(connection);
IRCConnectingEvent event = new IRCConnectingEvent(connection);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, connection);
}
break;
}
}
public static void fireChannelJoinedEvent(IRCConnection connection, IRCMessage message, IRCChannel channel) {
EiraIRC.instance.getChatSessionHandler().addTargetChannel(channel);
if (ConfigHelper.getGeneralSettings(channel).autoWho.get()) {
Utils.sendUserList(null, connection, channel);
}
IRCChannelJoinedEvent event = new IRCChannelJoinedEvent(connection, message, channel);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
public static void fireChannelLeftEvent(IRCConnection connection, IRCChannel channel) {
EiraIRC.instance.getChatSessionHandler().removeTargetChannel(channel);
IRCChannelLeftEvent event = new IRCChannelLeftEvent(connection, channel);
MinecraftForge.EVENT_BUS.post(event);
switch (event.getResult()) {
case ALLOW:
if (event.result != null) {
EiraIRCAPI.getChatHandler().addChatMessage(event.result, channel);
}
break;
}
}
}