예제 #1
0
        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;
        }