// Copyright (c) 2015, Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.command; import net.blay09.mods.eirairc.api.EiraIRCAPI; import net.blay09.mods.eirairc.api.SubCommand; import net.blay09.mods.eirairc.api.irc.IRCContext; import net.blay09.mods.eirairc.api.irc.IRCUser; import net.blay09.mods.eirairc.config.ChannelConfig; import net.blay09.mods.eirairc.config.ConfigurationHandler; import net.blay09.mods.eirairc.config.ServerConfig; import net.blay09.mods.eirairc.config.settings.BotSettings; import net.blay09.mods.eirairc.config.settings.ThemeSettings; import net.blay09.mods.eirairc.irc.IRCUserImpl; import net.blay09.mods.eirairc.util.ConfigHelper; import net.blay09.mods.eirairc.util.MessageFormat; import net.blay09.mods.eirairc.util.Utils; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import org.apache.commons.lang3.StringUtils; import java.util.List; public class CommandMessage implements SubCommand { @Override public String getCommandName() { return "msg"; } @Override public String getCommandUsage(ICommandSender sender) { return "eirairc:commands.msg.usage"; } @Override public String[] getAliases() { return null; } @Override public boolean processCommand(ICommandSender sender, IRCContext context, String[] args, boolean serverSide) throws CommandException { if(args.length < 2) { throw new WrongUsageException(getCommandUsage(sender)); } IRCContext target = EiraIRCAPI.parseContext(null, args[0], null); if(target.getContextType() == IRCContext.ContextType.Error) { Utils.sendLocalizedMessage(sender, target.getName(), args[0]); return true; } else if(target.getContextType() == IRCContext.ContextType.IRCUser) { if(!ConfigHelper.getBotSettings(context).allowPrivateMessages.get()) { Utils.sendLocalizedMessage(sender, "commands.msg.disabled"); return true; } } String message = StringUtils.join(args, " ", 1, args.length).trim(); if(message.isEmpty()) { throw new WrongUsageException(getCommandUsage(sender)); } boolean isEmote = message.startsWith("/me "); if(isEmote) { message = message.substring(4); } String format = "{MESSAGE}"; BotSettings botSettings = ConfigHelper.getBotSettings(target); IRCUser botUser = target.getConnection().getBotUser(); String ircMessage = message; if(serverSide) { if(target.getContextType() == IRCContext.ContextType.IRCChannel) { format = isEmote ? botSettings.getMessageFormat().mcSendChannelEmote : botSettings.getMessageFormat().mcSendChannelMessage; } else if (target.getContextType() == IRCContext.ContextType.IRCUser) { format = isEmote ? botSettings.getMessageFormat().mcSendPrivateEmote : botSettings.getMessageFormat().mcSendPrivateMessage; } ircMessage = MessageFormat.formatMessage(format, target.getConnection(), target, botUser, message, MessageFormat.Target.IRC, isEmote ? MessageFormat.Mode.Emote : MessageFormat.Mode.Message); } target.message(ircMessage); format = "{MESSAGE}"; if(target.getContextType() == IRCContext.ContextType.IRCChannel) { format = isEmote ? botSettings.getMessageFormat().mcSendChannelEmote : botSettings.getMessageFormat().mcSendChannelMessage; } else if (target.getContextType() == IRCContext.ContextType.IRCUser) { format = isEmote ? botSettings.getMessageFormat().mcSendPrivateEmote : botSettings.getMessageFormat().mcSendPrivateMessage; } IChatComponent chatComponent = MessageFormat.formatChatComponent(format, target.getConnection(), target, botUser, message, MessageFormat.Target.IRC, isEmote ? MessageFormat.Mode.Emote : MessageFormat.Mode.Message); if(isEmote) { ThemeSettings themeSettings = ConfigHelper.getTheme(target); EnumChatFormatting emoteColor = ((IRCUserImpl) botUser).getNameColor(); if(emoteColor == null) { emoteColor = themeSettings.emoteTextColor.get(); } if(emoteColor != null) { chatComponent.getChatStyle().setColor(emoteColor); } } EiraIRCAPI.getChatHandler().addChatMessage(sender, chatComponent, target); return true; } @Override public boolean canCommandSenderUseCommand(ICommandSender sender) { return true; } @Override public void addTabCompletionOptions(List<String> list, ICommandSender sender, String[] args) { for(ServerConfig serverConfig : ConfigurationHandler.getServerConfigs()) { for(ChannelConfig channelConfig : serverConfig.getChannelConfigs()) { list.add(channelConfig.getName()); } } } @Override public boolean isUsernameIndex(String[] args, int idx) { return false; } @Override public boolean hasQuickCommand() { return false; } }