Skip to content

Commit adcd244

Browse files
authored
Merge pull request #60 from Hyz-sui/H-dev
2024.3.5.4
2 parents 2505c02 + ed4a4b3 commit adcd244

File tree

7 files changed

+55
-10
lines changed

7 files changed

+55
-10
lines changed

Modules/GameState.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,10 @@ public void ChangeMainRole(CustomRoles role)
102102
{
103103
var player = Utils.GetPlayerById(PlayerId);
104104

105-
EventHistory.CurrentInstance?.AddEvent(new RoleChangeEvent(new(player), role));
105+
if (AmongUsClient.Instance.AmHost)
106+
{
107+
EventHistory.CurrentInstance?.AddEvent(new RoleChangeEvent(new(player), role));
108+
}
106109

107110
this.PreviousRoles.Add(this.MainRole);
108111
this.SetMainRole(role);

Modules/Webhook/WebhookManager.cs

+36-4
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ public void StartSend(WebhookMessageBuilder builder)
2929
logger.Warn("URL設定が正しくありません");
3030
return;
3131
}
32-
var message = builder.ContentBuilder.ToString();
33-
var content = new WebhookRequest(message, builder.UserName, builder.AvatarUrl);
34-
var sendTask = SendAsync(content, url);
32+
var sendTask = SendAsync(builder, url);
3533
sendTask.ContinueWith(task =>
3634
{
3735
if (task.Exception is { } aggregateException)
@@ -81,7 +79,39 @@ private bool ValidateUrl(string url)
8179
}
8280
return webhookUrlRegex.IsMatch(url);
8381
}
84-
public async Task SendAsync(WebhookRequest webhookRequest, string url, CancellationToken cancellationToken = default)
82+
public async Task SendAsync(WebhookMessageBuilder builder, string url, CancellationToken cancellationToken = default)
83+
{
84+
var fullMessage = builder.ContentBuilder.ToString();
85+
if (fullMessage.Length <= MaxContentLength)
86+
{
87+
await SendInnerAsync(fullMessage, builder.UserName, builder.AvatarUrl, url, cancellationToken);
88+
return;
89+
}
90+
// 改行を区切りとして,上限文字数を超えないように分割して送信する
91+
// 1行で上限を超えているケースは考慮しない
92+
var lines = fullMessage.Split(Environment.NewLine);
93+
var partBuilder = new StringBuilder();
94+
foreach (var line in lines)
95+
{
96+
if (partBuilder.Length + line.Length > MaxContentLength)
97+
{
98+
await SendInnerAsync(partBuilder.ToString(), builder.UserName, builder.AvatarUrl, url, cancellationToken);
99+
partBuilder.Clear();
100+
await Task.Delay(1000, cancellationToken);
101+
}
102+
partBuilder.AppendLine(line);
103+
}
104+
if (partBuilder.Length > 0)
105+
{
106+
await SendInnerAsync(partBuilder.ToString(), builder.UserName, builder.AvatarUrl, url, cancellationToken);
107+
}
108+
}
109+
private async Task SendInnerAsync(string message, string userName, string avatarUrl, string url, CancellationToken cancellationToken = default)
110+
{
111+
var content = new WebhookRequest(message, userName, avatarUrl);
112+
await SendAsync(content, url, cancellationToken);
113+
}
114+
private async Task SendAsync(WebhookRequest webhookRequest, string url, CancellationToken cancellationToken = default)
85115
{
86116
try
87117
{
@@ -124,4 +154,6 @@ public void Dispose()
124154
new("WebhookUrl.txt");
125155
#endif
126156
private readonly Regex webhookUrlRegex = new("^(https://(ptb.|canary.)?discord(app)?.com/api/webhooks/)");
157+
// 上限2,000文字.文字数カウントの実装が違うかもしれないけどよくわからないので余裕をもたせる
158+
private const int MaxContentLength = 1950;
127159
}

Patches/OutroPatch.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ public static void Postfix(EndGameManager __instance)
197197
}
198198
LastWinsText = WinnerText.text.RemoveHtmlTags();
199199

200-
EventHistory.CurrentInstance?.AddEvent(new GameEndEvent(LastWinsText));
200+
if (AmongUsClient.Instance.AmHost)
201+
{
202+
EventHistory.CurrentInstance?.AddEvent(new GameEndEvent(LastWinsText));
203+
}
201204

202205
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
203206

Patches/PlayerContorolPatch.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,10 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] PlayerC
153153

154154
if (isSucceeded)
155155
{
156-
EventHistory.CurrentInstance?.AddEvent(new MurderEvent(new(__instance), new(target), target.GetPlainShipRoom().RoomId));
156+
if (AmongUsClient.Instance.AmHost)
157+
{
158+
EventHistory.CurrentInstance?.AddEvent(new MurderEvent(new(__instance), new(target), target.GetPlainShipRoom()?.RoomId ?? SystemTypes.Hallway));
159+
}
157160

158161
if (target.shapeshifting)
159162
{
@@ -696,7 +699,7 @@ public static bool Prefix(PlayerControl __instance)
696699
ret &= Workhorse.OnCompleteTask(pc);
697700
Utils.NotifyRoles();
698701

699-
if (taskState.IsTaskFinished && Utils.HasTasks(__instance.Data))
702+
if (taskState.IsTaskFinished && AmongUsClient.Instance.AmHost && Utils.HasTasks(__instance.Data))
700703
{
701704
EventHistory.CurrentInstance?.AddEvent(new CrewTaskFinishEvent(new(__instance)));
702705
}

Patches/onGameStartedPatch.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ public static void Postfix(AmongUsClient __instance)
107107
MeetingStates.FirstMeeting = true;
108108
GameStates.AlreadyDied = false;
109109

110-
EventHistory.CurrentInstance?.AddEvent(new GameStartEvent());
110+
if (AmongUsClient.Instance.AmHost)
111+
{
112+
EventHistory.CurrentInstance?.AddEvent(new GameStartEvent());
113+
}
111114
}
112115
}
113116
[HarmonyPatch(typeof(RoleManager), nameof(RoleManager.SelectRoles))]

Roles/Impostor/EvilHacker.cs

+1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public override void OnReportDeadBody(PlayerControl reporter, GameData.PlayerInf
120120

121121
// 送信するメッセージを生成
122122
var previous = -1;
123+
builder.Append("<size=70%>");
123124
foreach (var admin in admins)
124125
{
125126
var entry = admin.Value;

main.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class Main : BasePlugin
5555
// ==========
5656
//Sorry for many Japanese comments.
5757

58-
public static readonly string ForkVersion = "2024.3.5.3";
58+
public static readonly string ForkVersion = "2024.3.5.4";
5959
public static readonly Version ParsedForkVersion = Version.Parse(ForkVersion);
6060

6161
public const string PluginGuid = "com.emptybottle.townofhost";

0 commit comments

Comments
 (0)