Skip to content

Commit

Permalink
Marugame: 丸亀製麺構文機能を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
2RiniaR committed Jul 15, 2024
1 parent cf90606 commit 8dfee09
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Common/MasterManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,6 @@ public static class MasterManager
public static TimeSpan DailyResetTime => TimeSpan.FromHours(0);

public static DateTime Birthday => new(2003, 4, 24);

public static string MarugameTrigger => "丸亀製麺";
}
36 changes: 36 additions & 0 deletions Events/MarugamePresenter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Text;
using Approvers.King.Common;
using Discord;

namespace Approvers.King.Events;

public class MarugamePresenter : DiscordMessagePresenterBase
{
public string Content { get; set; }

Check warning on line 9 in Events/MarugamePresenter.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Content' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

Check warning on line 9 in Events/MarugamePresenter.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable property 'Content' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.

protected override async Task MainAsync()
{
var message = Format.Code(ConvertMessageToVertical(Content));
await Message.ReplyAsync(message);
}

private static string ConvertMessageToVertical(string message)
{
var lines = message.Split('\n');
var maxLength = lines.Max(x => x.Length);

var sb = new StringBuilder();
for (var c = 0; c < maxLength; c++)
{
foreach (var line in lines.Reverse())
{
sb.Append(c < line.Length ? line[c] : ' ');
sb.Append(' ');
}

if (c < maxLength - 1) sb.Append('\n');
}

return sb.ToString();
}
}
23 changes: 23 additions & 0 deletions Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ private static async Task OnMessageReceived(SocketMessage message)

if (userMessage.MentionedUsers.Any(x => x.Id == DiscordManager.Client.CurrentUser.Id))
{
if (await TryExecuteMarugame(userMessage)) return;

if (MasterManager.SilentTriggerMessages.Any(userMessage.Content.Contains))
{
// 黙らせる
Expand Down Expand Up @@ -65,4 +67,25 @@ private static async Task OnMessageReceived(SocketMessage message)
// 発言
await DiscordManager.ExecuteAsync<RareReplyPresenter>(userMessage);
}

private static async Task<bool> TryExecuteMarugame(SocketUserMessage userMessage)
{
// 「丸亀製麺」の次にある改行以降が対象

var marugameIndex =
userMessage.Content.IndexOf(MasterManager.MarugameTrigger, StringComparison.InvariantCulture);
if (marugameIndex < 0) return false;

var subs = userMessage.Content[(marugameIndex + MasterManager.MarugameTrigger.Length)..];
var contentIndex = subs.IndexOf('\n');
if (contentIndex < 0) return false;

// 丸亀製麺
await DiscordManager.ExecuteAsync<MarugamePresenter>(userMessage, presenter =>
{
presenter.Content = subs[(contentIndex + 1)..];
return Task.CompletedTask;
});
return true;
}
}

0 comments on commit 8dfee09

Please sign in to comment.