mirror of
https://github.com/RPCS3/discord-bot.git
synced 2026-01-31 01:25:22 +01:00
RPCS3 Compatibility Bot reimplemented in C# for .NET Core Current status of this PR: * tested and targeted for .NET Core 2.1 * all functionality is either on par or improved compared to the python version * compatibility with current bot.db should be preserved in all upgrade scenarios * some bot management commands were changed (now under !sudo bot) * standard help generator for the new discord client is ... different; compatibility with old format could be restored through custom formatter if needed * everything has been split in more loosely tied components for easier extensibility and maintenance * log parsing has been rewritten and should work ~2x as fast
44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using System;
|
|
using System.IO.Pipelines;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using DSharpPlus.Entities;
|
|
|
|
namespace CompatBot.LogParsing.SourceHandlers
|
|
{
|
|
public class PlainTextHandler: ISourceHandler
|
|
{
|
|
public Task<bool> CanHandleAsync(DiscordAttachment attachment)
|
|
{
|
|
return Task.FromResult(attachment.FileName.EndsWith(".log", StringComparison.InvariantCultureIgnoreCase));
|
|
}
|
|
|
|
public async Task FillPipeAsync(DiscordAttachment attachment, PipeWriter writer)
|
|
{
|
|
using (var client = HttpClientFactory.Create())
|
|
using (var stream = await client.GetStreamAsync(attachment.Url).ConfigureAwait(false))
|
|
{
|
|
try
|
|
{
|
|
int read;
|
|
FlushResult flushed;
|
|
do
|
|
{
|
|
var memory = writer.GetMemory(Config.MinimumBufferSize);
|
|
read = await stream.ReadAsync(memory, Config.Cts.Token);
|
|
writer.Advance(read); //todo: test that .Advance(0) works as expected
|
|
flushed = await writer.FlushAsync(Config.Cts.Token).ConfigureAwait(false);
|
|
} while (read > 0 && !(flushed.IsCompleted || flushed.IsCanceled || Config.Cts.IsCancellationRequested));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine(e);
|
|
writer.Complete(e);
|
|
return;
|
|
}
|
|
}
|
|
writer.Complete();
|
|
}
|
|
}
|
|
}
|