@@ -31,8 +31,7 @@ namespace _01_basic_ping_bot | |||
// It is recommended to Dispose of a client when you are finished | |||
// using it, at the end of your app's lifetime. | |||
_client = new DiscordSocketClient(); | |||
_client.Log += LogAsync; | |||
_client.Ready += ReadyAsync; | |||
_client.MessageReceived += MessageReceivedAsync; | |||
} | |||
@@ -47,12 +46,6 @@ namespace _01_basic_ping_bot | |||
await Task.Delay(Timeout.Infinite); | |||
} | |||
private Task LogAsync(LogMessage log) | |||
{ | |||
Console.WriteLine(log.ToString()); | |||
return Task.CompletedTask; | |||
} | |||
// The Ready event indicates that the client has opened a | |||
// connection and it is now safe to access the cache. | |||
private Task ReadyAsync() | |||
@@ -35,9 +35,6 @@ namespace _02_commands_framework | |||
{ | |||
var client = services.GetRequiredService<DiscordSocketClient>(); | |||
client.Log += LogAsync; | |||
services.GetRequiredService<CommandService>().Log += LogAsync; | |||
// Tokens should be considered secret data and never hard-coded. | |||
// We can read from the environment variable to avoid hardcoding. | |||
await client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("token")); | |||
@@ -50,13 +47,6 @@ namespace _02_commands_framework | |||
} | |||
} | |||
private Task LogAsync(LogMessage log) | |||
{ | |||
Console.WriteLine(log.ToString()); | |||
return Task.CompletedTask; | |||
} | |||
private ServiceProvider ConfigureServices() | |||
{ | |||
return new ServiceCollection() | |||
@@ -38,7 +38,6 @@ namespace _03_sharded_client | |||
// The ShardReady event is used instead, allowing for individual | |||
// control per shard. | |||
client.ShardReady += ReadyAsync; | |||
client.Log += LogAsync; | |||
await services.GetRequiredService<CommandHandlingService>().InitializeAsync(); | |||
@@ -65,11 +64,5 @@ namespace _03_sharded_client | |||
Console.WriteLine($"Shard Number {shard.ShardId} is connected and ready!"); | |||
return Task.CompletedTask; | |||
} | |||
private Task LogAsync(LogMessage log) | |||
{ | |||
Console.WriteLine(log.ToString()); | |||
return Task.CompletedTask; | |||
} | |||
} | |||
} |
@@ -21,7 +21,6 @@ namespace _03_sharded_client.Services | |||
_services = services; | |||
_commands.CommandExecuted += CommandExecutedAsync; | |||
_commands.Log += LogAsync; | |||
_discord.MessageReceived += MessageReceivedAsync; | |||
} | |||
@@ -61,12 +60,5 @@ namespace _03_sharded_client.Services | |||
// the command failed, let's notify the user that something happened. | |||
await context.Channel.SendMessageAsync($"error: {result.ToString()}"); | |||
} | |||
private Task LogAsync(LogMessage log) | |||
{ | |||
Console.WriteLine(log.ToString()); | |||
return Task.CompletedTask; | |||
} | |||
} | |||
} |
@@ -34,60 +34,15 @@ namespace idn | |||
static async Task Main(string[] args) | |||
{ | |||
var token = File.ReadAllText("token.ignore"); | |||
var client = new DiscordSocketClient(new DiscordSocketConfig { LogLevel = LogSeverity.Debug }); | |||
var logQueue = new ConcurrentQueue<LogMessage>(); | |||
var client = new DiscordSocketClient(new DiscordSocketConfig { }); | |||
var logCancelToken = new CancellationTokenSource(); | |||
int presenceUpdates = 0; | |||
client.Log += msg => | |||
{ | |||
logQueue.Enqueue(msg); | |||
return Task.CompletedTask; | |||
}; | |||
Console.CancelKeyPress += (_ev, _s) => | |||
{ | |||
logCancelToken.Cancel(); | |||
}; | |||
var logTask = Task.Run(async () => | |||
{ | |||
var fs = new FileStream("idn.log", FileMode.Append); | |||
var logStringBuilder = new StringBuilder(200); | |||
string logString = ""; | |||
byte[] helloBytes = Encoding.UTF8.GetBytes($"### new log session: {DateTime.Now} ###\n\n"); | |||
await fs.WriteAsync(helloBytes); | |||
while (!logCancelToken.IsCancellationRequested) | |||
{ | |||
if (logQueue.TryDequeue(out var msg)) | |||
{ | |||
if (msg.Message?.IndexOf("PRESENCE_UPDATE)") > 0) | |||
{ | |||
presenceUpdates++; | |||
continue; | |||
} | |||
_ = msg.ToString(builder: logStringBuilder); | |||
logStringBuilder.AppendLine(); | |||
logString = logStringBuilder.ToString(); | |||
Debug.Write(logString, "DNET"); | |||
await fs.WriteAsync(Encoding.UTF8.GetBytes(logString)); | |||
} | |||
await fs.FlushAsync(); | |||
try | |||
{ | |||
await Task.Delay(100, logCancelToken.Token); | |||
} | |||
finally { } | |||
} | |||
byte[] goodbyeBytes = Encoding.UTF8.GetBytes($"#!! end log session: {DateTime.Now} !!#\n\n\n"); | |||
await fs.WriteAsync(goodbyeBytes); | |||
await fs.DisposeAsync(); | |||
}); | |||
await client.LoginAsync(TokenType.Bot, token); | |||
await client.StartAsync(); | |||
@@ -127,9 +82,9 @@ namespace idn | |||
await client.StopAsync(); | |||
client.Dispose(); | |||
logCancelToken.Cancel(); | |||
try | |||
{ await logTask; } | |||
finally { Console.WriteLine("goodbye!"); } | |||
await Task.Delay(-1, logCancelToken.Token); | |||
Console.WriteLine("goodbye!"); | |||
} | |||
static IEnumerable<Assembly> GetAssemblies() | |||