private async Task Client_ReactionAdded(Cacheable <IUserMessage, ulong> arg1, ISocketMessageChannel arg2, SocketReaction arg3) { var server = (arg2 as SocketGuildChannel).Guild; if (Settings.Servers.Any(s => s.ID == server.Id)) { var target = Settings.Servers.First(s => s.ID == server.Id); var role = server.GetRole(target.UserRole); if (target.Messages.Any(m => m.MessageID == arg3.MessageId) && role.Members.Any(m => m.Id == arg3.UserId)) { var message = target.Messages.First(m => m.MessageID == arg3.MessageId); if (target.LogChannel.HasValue) { var ch = server.GetChannel(target.LogChannel.Value) as ISocketMessageChannel; await ch?.SendMessageAsync($"[{DateTime.Now}] {DiscordUtil.GetName(arg3.UserId, server)} さんが " + $"{message.Title} にリアクション {arg3.Emote.Name} を付与しました。"); } // ログ取り var log = new Log(arg3.UserId, (ulong)DateTimeOffset.Now.ToUnixTimeSeconds(), arg3.Emote.Name); message.Logs.Add(log); // ラストアタックのリアクション付与時の処理 var lastAttackReact = new Emoji("☠️"); if (arg3.Emote.Name == lastAttackReact.Name) { // ラストアタックのリアクションである message.AddLastAttack(arg3.UserId); } // ラストアタックのリアクションを除去する処理。 var reacts = new Emoji[] { new Emoji("1️⃣"), new Emoji("2️⃣"), new Emoji("3️⃣") }; if (reacts.Any(r => r.Name == arg3.Emote.Name)) { // 1,2,3ボタンが押されたとき、ラストアタックの絵文字を削除する。 // リアクション削除 var msg = await arg1.GetOrDownloadAsync(); await msg.RemoveReactionAsync(new Emoji("☠️"), arg3.UserId); } } } return; }