// Path: core/src/main/java/org/aimlang/core/bot/Bot.java
// public interface Bot extends Named {
//     String getRespond(String phrase);
// 
//     default void startChat(String userId, ChannelType channelType) {
//         setChatContext(getChatContextStorage().getContext(userId, channelType));
//         buildChat().start();
//     }
// 
//     Chat buildChat();
// 
//     ChatContextStorage getChatContextStorage();
// 
//     void setChatContext(ChatContext context);
// 
//     boolean wakeUp();
// }
// 
// Path: core/src/main/java/org/aimlang/core/exception/BotNotInitializedException.java
// public class BotNotInitializedException extends AimlExeption {
//     public BotNotInitializedException(String s) {
//         super(s);
//     }
// }
// 
// Path: core/src/main/java/org/aimlang/core/exception/ChatNotStartedException.java
// public class ChatNotStartedException extends AimlExeption {
//     public ChatNotStartedException(String s) {
//         super(s);
//     }
// }


import org.aimlang.core.bot.Bot;
import org.aimlang.core.exception.BotNotInitializedException;
import org.aimlang.core.exception.ChatNotStartedException;
package org.aimlang.core.channels;


/**
 * Channel
 *
 * @author anton
 * @since 18/04/17
 */
public interface Channel {

    default void startChat(String userId) {
        getBot().startChat(userId, getType());
    }

    Bot getBot();

// Path: core/src/main/java/org/aimlang/core/bot/Bot.java
// public interface Bot extends Named {
//     String getRespond(String phrase);
// 
//     default void startChat(String userId, ChannelType channelType) {
//         setChatContext(getChatContextStorage().getContext(userId, channelType));
//         buildChat().start();
//     }
// 
//     Chat buildChat();
// 
//     ChatContextStorage getChatContextStorage();
// 
//     void setChatContext(ChatContext context);
// 
//     boolean wakeUp();
// }
// 
// Path: core/src/main/java/org/aimlang/core/exception/BotNotInitializedException.java
// public class BotNotInitializedException extends AimlExeption {
//     public BotNotInitializedException(String s) {
//         super(s);
//     }
// }
// 
// Path: core/src/main/java/org/aimlang/core/exception/ChatNotStartedException.java
// public class ChatNotStartedException extends AimlExeption {
//     public ChatNotStartedException(String s) {
//         super(s);
//     }
// }


// Path: core/src/main/java/org/aimlang/core/channels/Channel.java
import org.aimlang.core.bot.Bot;
import org.aimlang.core.exception.BotNotInitializedException;
import org.aimlang.core.exception.ChatNotStartedException;

package org.aimlang.core.channels;


/**
 * Channel
 *
 * @author anton
 * @since 18/04/17
 */
public interface Channel {

    default void startChat(String userId) {
        getBot().startChat(userId, getType());
    }

    Bot getBot();

    default void send(String phrase) throws ChatNotStartedException, BotNotInitializedException {