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
60 lines
2.5 KiB
C#
60 lines
2.5 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using CompatApiClient;
|
|
using DSharpPlus.CommandsNext;
|
|
using DSharpPlus.Entities;
|
|
|
|
namespace CompatBot.Utils
|
|
{
|
|
public static class AutosplitResponseHelper
|
|
{
|
|
public static Task SendAutosplitMessageAsync(this CommandContext ctx, StringBuilder message, int blockSize = 2000, string blockEnd = "```", string blockStart = "```")
|
|
{
|
|
return ctx.Channel.SendAutosplitMessageAsync(message, blockSize, blockEnd, blockStart);
|
|
}
|
|
|
|
public static Task SendAutosplitMessageAsync(this CommandContext ctx, string message, int blockSize = 2000, string blockEnd = "```", string blockStart = "```")
|
|
{
|
|
return ctx.Channel.SendAutosplitMessageAsync(message, blockSize, blockEnd, blockStart);
|
|
}
|
|
|
|
public static async Task SendAutosplitMessageAsync(this DiscordChannel channel, StringBuilder message, int blockSize = 2000, string blockEnd = "```", string blockStart = "```")
|
|
{
|
|
if (message == null)
|
|
throw new ArgumentNullException(nameof(message));
|
|
|
|
await SendAutosplitMessageAsync(channel, message.ToString(), blockSize, blockEnd, blockStart).ConfigureAwait(false);
|
|
}
|
|
|
|
public static async Task SendAutosplitMessageAsync(this DiscordChannel channel, string message, int blockSize = 2000, string blockEnd = "```", string blockStart = "```")
|
|
{
|
|
if (channel == null)
|
|
throw new ArgumentNullException(nameof(channel));
|
|
|
|
if (string.IsNullOrEmpty(message))
|
|
return;
|
|
|
|
blockEnd = blockEnd ?? "";
|
|
blockStart = blockStart ?? "";
|
|
var maxContentSize = blockSize - blockEnd.Length - blockStart.Length;
|
|
await channel.TriggerTypingAsync().ConfigureAwait(false);
|
|
var buffer = new StringBuilder();
|
|
foreach (var line in message.Split(Environment.NewLine).Select(l => l.Trim(maxContentSize)))
|
|
{
|
|
if (buffer.Length + line.Length + blockEnd.Length > blockSize)
|
|
{
|
|
await channel.SendMessageAsync(buffer.Append(blockEnd).ToString()).ConfigureAwait(false);
|
|
await channel.TriggerTypingAsync().ConfigureAwait(false);
|
|
buffer.Clear().Append(blockStart);
|
|
}
|
|
else
|
|
buffer.AppendLine();
|
|
buffer.Append(line);
|
|
}
|
|
await channel.SendMessageAsync(buffer.ToString()).ConfigureAwait(false);
|
|
}
|
|
}
|
|
}
|