internal static Message FormatMessage(Message message, Components components, string token, string imId = null,
                                              string channelId      = null,
                                              bool isPrivateMessage = false,
                                              bool isChannelMessage = false)
        {
            string userName = UserMethods.GetUserName(components.Users, message.UserId);

            if (userName == null)
            {
                components.Users = UserHelper.GetUsers(token);

                userName = UserMethods.GetUserName(components.Users, message.UserId);
            }

            string botName = BotMethods.GetBotName(components.Bots, message.BotId);

            if (botName == null)
            {
                components.Bots = BotsHelper.GetBots(token);

                botName = BotMethods.GetBotName(components.Bots, message.BotId);
            }

            string imName = ImMethos.GetImName(components.Ims, components.Users, imId);

            if (imName == null)
            {
                components.Ims = ImHelper.GetIms(token);

                imName = ImMethos.GetImName(components.Ims, components.Users, imId);
            }

            string channelName = ChannelMethods.GetChannelName(components.Channels, channelId);

            if (channelName == null)
            {
                components.Channels = ChannelHelper.GetChannels(token);

                channelName = ChannelMethods.GetChannelName(components.Channels, channelId);
            }

            message.UserName    = botName ?? userName;
            message.ChannelName = isPrivateMessage ? null : (imName ?? channelName);
            message.ChannelId   = channelId;

            message.IsPrivateMessage = isPrivateMessage;
            message.IsGroupMessage   = isChannelMessage;

            return(message);
        }
        public InitializationResults Initialize(string token)
        {
            var result = new InitializationResults();

            try
            {
                if (token == null)
                {
                    throw new SlackApiException(nameof(token));
                }

                if (string.IsNullOrWhiteSpace(token))
                {
                    throw new SlackApiException(nameof(token));
                }

                var auth = AuthHelper.GetAuthResponse(token);

                var users = UserHelper.GetUsers(token);

                var components = new Components
                {
                    Profile  = ProfileHelper.GetProfile(users, auth.UserId),
                    Channels = ChannelHelper.GetChannels(token),
                    Ims      = ImHelper.GetIms(token),
                    Users    = users,
                    Bots     = BotsHelper.GetBots(token),
                    Emojis   = new List <EmojiParent>()
                };

                this.Token      = token;
                this.ProfileId  = auth.UserId;
                this.Components = components;

                result.IsSuccess = true;
            }
            catch (Exception ex)
            {
                result.IsSuccess = false;
                result.Message   = ex.Message;
            }

            return(result);
        }