/// <summary> /// Executes the Hours message. /// </summary> /// <param name="message">The message.</param> private void Execute(HoursMessage message) { if (message.ErrorMessage != null) { Log(LogLevel.Warning, message.ErrorMessage); return; } var server = Repository.Server.GetCurrentServer(); var context = new MessageContext { ServerId = server.Id, ServerName = server.Name, ServerPort = server.Port }; QueryRunner.SendTextMessage(Repository.Settings.Control.Hours.Target, Repository.Settings.Control.Hours.TargetId > 0 ? Repository.Settings.Control.Hours.TargetId : message.SenderClientId, Repository.Settings.Control.Hours.TextMessage.ToMessage(context)); var clientDatabaseTimes = message.AllClients ? Repository.Client.GetTime(message.TimeSpan.FromDate, message.TimeSpan.ToDate) : Repository.Client.GetTime(message.ClientDatabaseIds, message.TimeSpan.FromDate, message.TimeSpan.ToDate); var clientDatabaseIds = clientDatabaseTimes.OrderByDescending(m => m.Value).Take(Repository.Settings.Control.Hours.Limit).ToList(); for (int index = 0; index < clientDatabaseIds.Count; index++) { var clientDatabaseTime = clientDatabaseIds[index]; var client = Repository.Client.GetClientDataBaseInfo(clientDatabaseTime.Key); if (client != null) { var lastSeen = Repository.Client.GetLastSeen(clientDatabaseTime.Key); var messageContext = new MessageContext { Index = index + 1, ServerName = server.Name, ServerId = server.Id, ServerPort = server.Port, ClientDatabaseId = client.DatabaseId, ClientNickname = client.NickName, ClientLastLogin = client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat), ClientLastSeen = lastSeen != default(DateTime) && lastSeen > DateTime.MinValue ? lastSeen.ToLocalTime().ToString(Repository.Static.DateTimeFormat) : client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat), ClientHours = clientDatabaseTime.Value / 60 }; QueryRunner.SendTextMessage(Repository.Settings.Control.Hours.Target, Repository.Settings.Control.Hours.TargetId > 0 ? Repository.Settings.Control.Hours.TargetId : message.SenderClientId, Repository.Settings.Control.Hours.MessagePerClient.ToMessage(messageContext)); } } var senderClientEntry = Repository.Client.GetClientInfo(message.SenderClientId); Log(Repository.Settings.Control.Hours, string.Format("Client '{1}'(id:{2}) used {0} for clients '{3}'.", Repository.Settings.Control.Hours.Command, senderClientEntry.Nickname, senderClientEntry.DatabaseId, string.Join("', '", message.ClientDatabaseIds.ConvertAll(i => i.ToString(CultureInfo.InvariantCulture)).ToArray()))); }