// Path: vilebot/src/main/java/com/oldterns/vilebot/util/BaseNick.java
// public class BaseNick
// {
//     // This would grab the leading x out of a nick that actually contains it
//     private static Pattern nickPattern = Pattern.compile( "(?:x|)([a-zA-Z0-9]+)(?:\\p{Punct}+[a-zA-Z0-9]*|)" );
// 
//     private static String primaryBotNick;
// 
//     private static Set<String> allBotNicks = new HashSet<>();
// 
//     public static String toBaseNick( String nick )
//     {
//         if ( allBotNicks.contains( nick ) )
//         {
//             nick = primaryBotNick;
//         }
//         else
//         {
//             Matcher nickMatcher = nickPattern.matcher( nick );
// 
//             if ( nickMatcher.find() )
//             {
//                 return nickMatcher.group( 1 );
//             }
//         }
//         return nick;
//     }
// 
//     public static String getPrimaryBotNick()
//     {
//         return primaryBotNick;
//     }
// 
//     public static void setPrimaryBotNick( String primaryNick )
//     {
//         primaryBotNick = primaryNick;
//     }
// 
//     public static Set<String> getBotNicks()
//     {
//         return allBotNicks;
//     }
// 
//     public static void addBotNick( String nick )
//     {
//         allBotNicks.add( nick );
//     }
// }
// 
// Path: vilebot/src/main/java/com/oldterns/vilebot/util/LimitCommand.java
// public class LimitCommand
// {
//     private Map<String, Integer> usesUserMap = new HashMap<>();
// 
//     private int maxUsesPerPeriod = 2;
// 
//     private int timePeriodSeconds = 300;
// 
//     private static final String OKAY_STRING = " has less than the maximum uses";
// 
//     private static final String NOT_OKAY_STRING = " has the maximum uses";
// 
//     public LimitCommand()
//     {
//     }
// 
//     public LimitCommand( int maxUsesPerPeriod, int timePeriodSeconds )
//     {
//         this.maxUsesPerPeriod = maxUsesPerPeriod;
//         this.timePeriodSeconds = timePeriodSeconds;
//     }
// 
//     public int getMaxUses()
//     {
//         return maxUsesPerPeriod;
//     }
// 
//     public int getPeriodSeconds()
//     {
//         return timePeriodSeconds;
//     }
// 
//     public String addUse( String user )
//     {
//         Timer timer = new Timer();
//         if ( !usesUserMap.containsKey( user ) )
//         {
//             usesUserMap.put( user, 0 );
//         }
//         int uses = getUses( user );
//         if ( uses < maxUsesPerPeriod )
//         {
//             timer.schedule( createTimerTask( user ), timePeriodSeconds * 1000 );
//             uses++;
//             usesUserMap.put( user, uses );
//             return "";
//         }
//         else
//         {
//             return user + NOT_OKAY_STRING;
//         }
//     }
// 
//     public int getUses( String user )
//     {
//         return usesUserMap.get( user );
//     }
// 
//     public String checkUses( String user )
//     {
//         int uses = getUses( user );
//         if ( uses < maxUsesPerPeriod )
//         {
//             return user + OKAY_STRING;
//         }
//         else
//         {
//             return user + NOT_OKAY_STRING;
//         }
//     }
// 
//     private TimerTask createTimerTask( final String user )
//     {
//         return new TimerTask()
//         {
//             @Override
//             public void run()
//             {
//                 int amountOfUses = usesUserMap.get( user );
//                 amountOfUses--;
//                 usesUserMap.put( user, amountOfUses );
//             }
//         };
//     }
// }


import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.oldterns.vilebot.Vilebot;
import com.oldterns.vilebot.util.BaseNick;
import com.oldterns.vilebot.util.LimitCommand;
import org.pircbotx.hooks.ListenerAdapter;
import org.pircbotx.hooks.events.MessageEvent;
import org.pircbotx.hooks.types.GenericMessageEvent;
package com.oldterns.vilebot.handlers.user;



public class Summon
    extends ListenerAdapter
{
    private static final Pattern nounPattern = Pattern.compile( "\\S+" );

    private static final Pattern summonPattern = Pattern.compile( "^!summon (" + nounPattern + ")\\s*$" );

// Path: vilebot/src/main/java/com/oldterns/vilebot/util/BaseNick.java
// public class BaseNick
// {
//     // This would grab the leading x out of a nick that actually contains it
//     private static Pattern nickPattern = Pattern.compile( "(?:x|)([a-zA-Z0-9]+)(?:\\p{Punct}+[a-zA-Z0-9]*|)" );
// 
//     private static String primaryBotNick;
// 
//     private static Set<String> allBotNicks = new HashSet<>();
// 
//     public static String toBaseNick( String nick )
//     {
//         if ( allBotNicks.contains( nick ) )
//         {
//             nick = primaryBotNick;
//         }
//         else
//         {
//             Matcher nickMatcher = nickPattern.matcher( nick );
// 
//             if ( nickMatcher.find() )
//             {
//                 return nickMatcher.group( 1 );
//             }
//         }
//         return nick;
//     }
// 
//     public static String getPrimaryBotNick()
//     {
//         return primaryBotNick;
//     }
// 
//     public static void setPrimaryBotNick( String primaryNick )
//     {
//         primaryBotNick = primaryNick;
//     }
// 
//     public static Set<String> getBotNicks()
//     {
//         return allBotNicks;
//     }
// 
//     public static void addBotNick( String nick )
//     {
//         allBotNicks.add( nick );
//     }
// }
// 
// Path: vilebot/src/main/java/com/oldterns/vilebot/util/LimitCommand.java
// public class LimitCommand
// {
//     private Map<String, Integer> usesUserMap = new HashMap<>();
// 
//     private int maxUsesPerPeriod = 2;
// 
//     private int timePeriodSeconds = 300;
// 
//     private static final String OKAY_STRING = " has less than the maximum uses";
// 
//     private static final String NOT_OKAY_STRING = " has the maximum uses";
// 
//     public LimitCommand()
//     {
//     }
// 
//     public LimitCommand( int maxUsesPerPeriod, int timePeriodSeconds )
//     {
//         this.maxUsesPerPeriod = maxUsesPerPeriod;
//         this.timePeriodSeconds = timePeriodSeconds;
//     }
// 
//     public int getMaxUses()
//     {
//         return maxUsesPerPeriod;
//     }
// 
//     public int getPeriodSeconds()
//     {
//         return timePeriodSeconds;
//     }
// 
//     public String addUse( String user )
//     {
//         Timer timer = new Timer();
//         if ( !usesUserMap.containsKey( user ) )
//         {
//             usesUserMap.put( user, 0 );
//         }
//         int uses = getUses( user );
//         if ( uses < maxUsesPerPeriod )
//         {
//             timer.schedule( createTimerTask( user ), timePeriodSeconds * 1000 );
//             uses++;
//             usesUserMap.put( user, uses );
//             return "";
//         }
//         else
//         {
//             return user + NOT_OKAY_STRING;
//         }
//     }
// 
//     public int getUses( String user )
//     {
//         return usesUserMap.get( user );
//     }
// 
//     public String checkUses( String user )
//     {
//         int uses = getUses( user );
//         if ( uses < maxUsesPerPeriod )
//         {
//             return user + OKAY_STRING;
//         }
//         else
//         {
//             return user + NOT_OKAY_STRING;
//         }
//     }
// 
//     private TimerTask createTimerTask( final String user )
//     {
//         return new TimerTask()
//         {
//             @Override
//             public void run()
//             {
//                 int amountOfUses = usesUserMap.get( user );
//                 amountOfUses--;
//                 usesUserMap.put( user, amountOfUses );
//             }
//         };
//     }
// }


// Path: vilebot/src/main/java/com/oldterns/vilebot/handlers/user/Summon.java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.oldterns.vilebot.Vilebot;
import com.oldterns.vilebot.util.BaseNick;
import com.oldterns.vilebot.util.LimitCommand;
import org.pircbotx.hooks.ListenerAdapter;
import org.pircbotx.hooks.events.MessageEvent;
import org.pircbotx.hooks.types.GenericMessageEvent;

package com.oldterns.vilebot.handlers.user;



public class Summon
    extends ListenerAdapter
{
    private static final Pattern nounPattern = Pattern.compile( "\\S+" );

    private static final Pattern summonPattern = Pattern.compile( "^!summon (" + nounPattern + ")\\s*$" );

    public static LimitCommand limitCommand = new LimitCommand();