Groundwork for sumologic
This commit is contained in:
parent
efadbe9a21
commit
82b2b4c815
5 changed files with 182 additions and 58 deletions
|
@ -15,15 +15,17 @@ namespace Geekbot.net
|
||||||
{
|
{
|
||||||
private readonly IDiscordClient _client;
|
private readonly IDiscordClient _client;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
private readonly IGeekbotLogger _gLogger;
|
||||||
private readonly IDatabase _redis;
|
private readonly IDatabase _redis;
|
||||||
private readonly IServiceProvider _servicesProvider;
|
private readonly IServiceProvider _servicesProvider;
|
||||||
private readonly CommandService _commands;
|
private readonly CommandService _commands;
|
||||||
private readonly IUserRepository _userRepository;
|
private readonly IUserRepository _userRepository;
|
||||||
|
|
||||||
public Handlers(IDiscordClient client, ILogger logger, IDatabase redis, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository)
|
public Handlers(IDiscordClient client, ILogger logger, IDatabase redis, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository, IGeekbotLogger gLogger)
|
||||||
{
|
{
|
||||||
_client = client;
|
_client = client;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_gLogger = gLogger;
|
||||||
_redis = redis;
|
_redis = redis;
|
||||||
_servicesProvider = servicesProvider;
|
_servicesProvider = servicesProvider;
|
||||||
_commands = commands;
|
_commands = commands;
|
||||||
|
@ -82,8 +84,8 @@ namespace Geekbot.net
|
||||||
_redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", 0.ToString());
|
_redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", 0.ToString());
|
||||||
|
|
||||||
if (message.Author.IsBot) return Task.CompletedTask;
|
if (message.Author.IsBot) return Task.CompletedTask;
|
||||||
_logger.Information(
|
_gLogger.Info("Message", message.Content, SimpleConextConverter.ConvertSocketMessage(message));
|
||||||
$"[Message] {channel.Guild.Name} ({channel.Guild.Id}) - {message.Channel} ({message.Channel.Id}) - {message.Author.Username}#{message.Author.Discriminator} ({message.Author.Id}) - {message.Content}");
|
// _logger.Information($"[Message] {channel.Guild.Name} ({channel.Guild.Id}) - {message.Channel} ({message.Channel.Id}) - {message.Author.Username}#{message.Author.Discriminator} ({message.Author.Id}) - {message.Content}");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -41,34 +41,7 @@ namespace Geekbot.net.Lib
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var errorString = errorMessage == "def" ? _translation.GetString(Context.Guild.Id, "errorHandler", "SomethingWentWrong") : errorMessage;
|
var errorString = errorMessage == "def" ? _translation.GetString(Context.Guild.Id, "errorHandler", "SomethingWentWrong") : errorMessage;
|
||||||
var errorObj = new ErrorObject()
|
var errorObj = SimpleConextConverter.ConvertContext(Context);
|
||||||
{
|
|
||||||
Message = new ErrorMessage()
|
|
||||||
{
|
|
||||||
Content = Context.Message.Content,
|
|
||||||
Id = Context.Message.Id.ToString(),
|
|
||||||
Attachments = Context.Message.Attachments.Count,
|
|
||||||
ChannelMentions = Context.Message.MentionedChannelIds.Count,
|
|
||||||
UserMentions = Context.Message.MentionedUserIds.Count,
|
|
||||||
RoleMentions = Context.Message.MentionedRoleIds.Count
|
|
||||||
},
|
|
||||||
User = new IdAndName()
|
|
||||||
{
|
|
||||||
Id = Context.User.Id.ToString(),
|
|
||||||
Name = $"{Context.User.Username}#{Context.User.Discriminator}"
|
|
||||||
},
|
|
||||||
Guild = new IdAndName()
|
|
||||||
{
|
|
||||||
Id = Context.Guild.Id.ToString(),
|
|
||||||
Name = Context.Guild.Name
|
|
||||||
},
|
|
||||||
Channel = new IdAndName()
|
|
||||||
{
|
|
||||||
Id = Context.Channel.Id.ToString(),
|
|
||||||
Name = Context.Channel.Name
|
|
||||||
},
|
|
||||||
TimeStamp = DateTime.Now.ToString()
|
|
||||||
};
|
|
||||||
var errorJson = JsonSerializer.ToJsonString(errorObj);
|
var errorJson = JsonSerializer.ToJsonString(errorObj);
|
||||||
_logger.Error(e, errorJson);
|
_logger.Error(e, errorJson);
|
||||||
if (!string.IsNullOrEmpty(errorMessage))
|
if (!string.IsNullOrEmpty(errorMessage))
|
||||||
|
@ -107,31 +80,7 @@ namespace Geekbot.net.Lib
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class ErrorObject
|
|
||||||
{
|
|
||||||
public ErrorMessage Message { get; set; }
|
|
||||||
public IdAndName User { get; set; }
|
|
||||||
public IdAndName Guild { get; set; }
|
|
||||||
public IdAndName Channel { get; set; }
|
|
||||||
public string TimeStamp { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ErrorMessage
|
|
||||||
{
|
|
||||||
public string Content { get; set; }
|
|
||||||
public string Id { get; set; }
|
|
||||||
public int Attachments { get; set; }
|
|
||||||
public int ChannelMentions { get; set; }
|
|
||||||
public int UserMentions { get; set; }
|
|
||||||
public int RoleMentions { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class IdAndName
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IErrorHandler
|
public interface IErrorHandler
|
||||||
|
|
69
Geekbot.net/Lib/GeekbotLogger.cs
Normal file
69
Geekbot.net/Lib/GeekbotLogger.cs
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Utf8Json;
|
||||||
|
using Utf8Json.Resolvers;
|
||||||
|
|
||||||
|
namespace Geekbot.net.Lib
|
||||||
|
{
|
||||||
|
public class GeekbotLogger : IGeekbotLogger
|
||||||
|
{
|
||||||
|
public GeekbotLogger()
|
||||||
|
{
|
||||||
|
JsonSerializer.SetDefaultResolver(StandardResolver.AllowPrivateExcludeNullSnakeCase);
|
||||||
|
Info("Geekbot", "Using GeekbotLogger");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Debug(string source, string message, object extra = null)
|
||||||
|
{
|
||||||
|
HandleLogObject("Debug", source, message, null, extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Info(string source, string message, object extra = null)
|
||||||
|
{
|
||||||
|
HandleLogObject("Information", source, message, null, extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Error(string source, string message, Exception stackTrace, object extra = null)
|
||||||
|
{
|
||||||
|
HandleLogObject("Debug", source, message, stackTrace, extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task HandleLogObject(string type, string source, string message, Exception stackTrace = null, object extra = null)
|
||||||
|
{
|
||||||
|
var logJson = CreateLogObject(type, source, message, null, extra);
|
||||||
|
Console.WriteLine(logJson);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string CreateLogObject(string type, string source, string message, Exception stackTrace = null, object extra = null)
|
||||||
|
{
|
||||||
|
var logObject = new GeekbotLoggerObject()
|
||||||
|
{
|
||||||
|
Timestamp = DateTime.Now,
|
||||||
|
Type = type,
|
||||||
|
Source = source,
|
||||||
|
Message = message,
|
||||||
|
StackTrace = stackTrace,
|
||||||
|
Extra = extra
|
||||||
|
};
|
||||||
|
return Utf8Json.JsonSerializer.ToJsonString(logObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GeekbotLoggerObject
|
||||||
|
{
|
||||||
|
public DateTime Timestamp { get; set; }
|
||||||
|
public string Type { get; set; }
|
||||||
|
public string Source { get; set; }
|
||||||
|
public string Message { get; set; }
|
||||||
|
public Exception StackTrace { get; set; }
|
||||||
|
public object Extra { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IGeekbotLogger
|
||||||
|
{
|
||||||
|
void Debug(string source, string message, object extra = null);
|
||||||
|
void Info(string source, string message, object extra = null);
|
||||||
|
void Error(string source, string message, Exception stackTrace, object extra = null);
|
||||||
|
}
|
||||||
|
}
|
100
Geekbot.net/Lib/SimpleConextConverter.cs
Normal file
100
Geekbot.net/Lib/SimpleConextConverter.cs
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
using System;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace Geekbot.net.Lib
|
||||||
|
{
|
||||||
|
public class SimpleConextConverter
|
||||||
|
{
|
||||||
|
public static MessageDto ConvertContext(ICommandContext context)
|
||||||
|
{
|
||||||
|
return new MessageDto()
|
||||||
|
{
|
||||||
|
Message = new MessageDto.MessageContent()
|
||||||
|
{
|
||||||
|
Content = context.Message.Content,
|
||||||
|
Id = context.Message.Id.ToString(),
|
||||||
|
Attachments = context.Message.Attachments.Count,
|
||||||
|
ChannelMentions = context.Message.MentionedChannelIds.Count,
|
||||||
|
UserMentions = context.Message.MentionedUserIds.Count,
|
||||||
|
RoleMentions = context.Message.MentionedRoleIds.Count
|
||||||
|
},
|
||||||
|
User = new MessageDto.IdAndName()
|
||||||
|
{
|
||||||
|
Id = context.User.Id.ToString(),
|
||||||
|
Name = $"{context.User.Username}#{context.User.Discriminator}"
|
||||||
|
},
|
||||||
|
Guild = new MessageDto.IdAndName()
|
||||||
|
{
|
||||||
|
Id = context.Guild.Id.ToString(),
|
||||||
|
Name = context.Guild.Name
|
||||||
|
},
|
||||||
|
Channel = new MessageDto.IdAndName()
|
||||||
|
{
|
||||||
|
Id = context.Channel.Id.ToString(),
|
||||||
|
Name = context.Channel.Name
|
||||||
|
},
|
||||||
|
TimeStamp = DateTime.Now.ToString()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public static MessageDto ConvertSocketMessage(SocketMessage message)
|
||||||
|
{
|
||||||
|
var channel = (SocketGuildChannel) message.Channel;
|
||||||
|
return new MessageDto()
|
||||||
|
{
|
||||||
|
Message = new MessageDto.MessageContent()
|
||||||
|
{
|
||||||
|
Content = message.Content,
|
||||||
|
Id = message.Id.ToString(),
|
||||||
|
Attachments = message.Attachments.Count,
|
||||||
|
ChannelMentions = message.MentionedChannels.Count,
|
||||||
|
UserMentions = message.MentionedUsers.Count,
|
||||||
|
RoleMentions = message.MentionedRoles.Count
|
||||||
|
},
|
||||||
|
User = new MessageDto.IdAndName()
|
||||||
|
{
|
||||||
|
Id = message.Author.Id.ToString(),
|
||||||
|
Name = $"{message.Author.Username}#{message.Author.Discriminator}"
|
||||||
|
},
|
||||||
|
Guild = new MessageDto.IdAndName()
|
||||||
|
{
|
||||||
|
Id = channel.Guild.Id.ToString(),
|
||||||
|
Name = channel.Guild.Name
|
||||||
|
},
|
||||||
|
Channel = new MessageDto.IdAndName()
|
||||||
|
{
|
||||||
|
Id = channel.Id.ToString(),
|
||||||
|
Name = channel.Name
|
||||||
|
},
|
||||||
|
TimeStamp = DateTime.Now.ToString()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class MessageDto
|
||||||
|
{
|
||||||
|
public MessageContent Message { get; set; }
|
||||||
|
public IdAndName User { get; set; }
|
||||||
|
public IdAndName Guild { get; set; }
|
||||||
|
public IdAndName Channel { get; set; }
|
||||||
|
public string TimeStamp { get; set; }
|
||||||
|
|
||||||
|
public class MessageContent
|
||||||
|
{
|
||||||
|
public string Content { get; set; }
|
||||||
|
public string Id { get; set; }
|
||||||
|
public int Attachments { get; set; }
|
||||||
|
public int ChannelMentions { get; set; }
|
||||||
|
public int UserMentions { get; set; }
|
||||||
|
public int RoleMentions { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class IdAndName
|
||||||
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,7 @@ namespace Geekbot.net
|
||||||
private IServiceProvider servicesProvider;
|
private IServiceProvider servicesProvider;
|
||||||
private RedisValue token;
|
private RedisValue token;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
|
private IGeekbotLogger gLogger;
|
||||||
private IUserRepository userRepository;
|
private IUserRepository userRepository;
|
||||||
private string[] args;
|
private string[] args;
|
||||||
private bool firstStart = false;
|
private bool firstStart = false;
|
||||||
|
@ -43,10 +44,11 @@ namespace Geekbot.net
|
||||||
logo.AppendLine("=========================================");
|
logo.AppendLine("=========================================");
|
||||||
Console.WriteLine(logo.ToString());
|
Console.WriteLine(logo.ToString());
|
||||||
var logger = LoggerFactory.createLogger(args);
|
var logger = LoggerFactory.createLogger(args);
|
||||||
|
var gLogger = new GeekbotLogger();
|
||||||
logger.Information("[Geekbot] Starting...");
|
logger.Information("[Geekbot] Starting...");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
new Program().MainAsync(args, logger).GetAwaiter().GetResult();
|
new Program().MainAsync(args, logger, gLogger).GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -54,11 +56,13 @@ namespace Geekbot.net
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task MainAsync(string[] args, ILogger logger)
|
private async Task MainAsync(string[] args, ILogger logger, IGeekbotLogger gLogger)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.gLogger = gLogger;
|
||||||
this.args = args;
|
this.args = args;
|
||||||
logger.Information("[Geekbot] Initing Stuff");
|
logger.Information("[Geekbot] Initing Stuff");
|
||||||
|
gLogger.Info("Geekbot", "Initing Stuff");
|
||||||
|
|
||||||
client = new DiscordSocketClient(new DiscordSocketConfig
|
client = new DiscordSocketClient(new DiscordSocketConfig
|
||||||
{
|
{
|
||||||
|
@ -142,7 +146,7 @@ namespace Geekbot.net
|
||||||
services.AddSingleton<DiscordSocketClient>(client);
|
services.AddSingleton<DiscordSocketClient>(client);
|
||||||
servicesProvider = services.BuildServiceProvider();
|
servicesProvider = services.BuildServiceProvider();
|
||||||
|
|
||||||
var handlers = new Handlers(client, logger, redis, servicesProvider, commands, userRepository);
|
var handlers = new Handlers(client, logger, redis, servicesProvider, commands, userRepository, gLogger);
|
||||||
|
|
||||||
client.MessageReceived += handlers.RunCommand;
|
client.MessageReceived += handlers.RunCommand;
|
||||||
client.MessageReceived += handlers.UpdateStats;
|
client.MessageReceived += handlers.UpdateStats;
|
||||||
|
|
Loading…
Reference in a new issue