public void Should_return_false_when_it_has_a_prisoner_and_does_not_have_a_policeman()
        {
            var crewMembers = new List <CrewMember>
            {
                new Prisoner("prisoner")
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(crewMembers);

            Assert.False(result);
        }
        public void Should_return_true_when_all_crew_members_are_allowed()
        {
            var crewMembers = new List <CrewMember>
            {
                new Pilot("pilot"),
                new Officer("flightAttendant"),
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(crewMembers);

            Assert.True(result);
        }
        public void Should_return_true_when_it_has_a_prisoner_but_also_a_policeman()
        {
            var crewMembers = new List <CrewMember>
            {
                new Prisoner("prisoner"),
                new Policeman("policeman")
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(crewMembers);

            Assert.True(result);
        }
        public void Should_return_false_when_two_incompatible_crew_members_are_alone()
        {
            var incompatibleCrewMembers = new List <CrewMember>
            {
                new Pilot("pilot"),
                new FlightAttendant("flightAttendant")
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(incompatibleCrewMembers);

            Assert.False(result);
        }
        public void Should_return_false_when_it_has_more_than_two_crew_members_but_they_are_imcompatible()
        {
            var crewMembers = new List <CrewMember>
            {
                new Pilot("pilot"),
                new FlightAttendant("flightAttendant"),
                new FlightAttendant("flightAttendant")
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(crewMembers);

            Assert.False(result);
        }
        public void Should_return_true_when_it_has_incompatible_crew_members_but_they_are_not_alone()
        {
            var crewMembers = new List <CrewMember>
            {
                new Pilot("pilot"),
                new FlightAttendant("flightAttendant"),
                new Officer("officer")
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(crewMembers);

            Assert.True(result);
        }
        public void Should_disregard_null_elements()
        {
            var crewMembers = new List <CrewMember>
            {
                new Pilot("pilot"),
                new Officer("flightAttendant"),
                null
            };

            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(crewMembers);

            Assert.True(result);
        }
Exemple #8
0
        public TripDto Move(Place currentPlace, Place destinyPlace)
        {
            _tripInformerService.ShowMovementInfo(currentPlace, destinyPlace);

            if (!CurrentPlaceHasSmartFortwo(currentPlace))
            {
                throw new Exception("The smart fortwo was not found!");
            }

            if (!SmartFortwoAtCurrentPlaceHasDriver(currentPlace))
            {
                throw new Exception("Smart Fortwo can't move without a driver");
            }

            var currentPlaceMembersCanStayTogether = CrewChecker.CrewMembersAreAllowedToStayTogether(currentPlace.CrewMembers);
            var smartFortwoMembersCanStayTogether  = CrewChecker.CrewMembersAreAllowedToStayTogether(currentPlace.GetSmartFortwoCrewMembers());

            if (!currentPlaceMembersCanStayTogether || !smartFortwoMembersCanStayTogether)
            {
                throw new Exception("Some incompatible crew members are together alone or the prisoner is far from policeman");
            }

            return(ChangePlaceOfSmartFortwo(currentPlace, destinyPlace));
        }
Exemple #9
0
        public async Task HandleMessageAsync(IMiraiHttpSession session, IGroupApplyEventArgs e)
        {
            if (!DataBase.me.IsGroupRelated(e.FromGroup))
            {
                return;
            }
            if (DataBase.me.isUserBlacklisted(e.FromQQ))
            {
                MainHolder.broadcaster.BroadcastToAdminGroup("入群的用户 " + e.NickName + "(" + e.FromQQ + ") 存在于黑名单中,自动拒绝。");
                await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Deny, "您被设置不能加入任何粉丝群。");

                return;
            }
            switch (DataBase.me.isUserTrusted(e.FromQQ))
            {
            case 1:
                DataBase.me.removeUserTrustlist(e.FromQQ);
                MainHolder.broadcaster.BroadcastToAdminGroup("入群的用户 " + e.NickName + "(" + e.FromQQ + ") 受到单次信任,同意入群。\n该次信任已被移除。");
                goto case 9;    //显式允许直接进入下一个case

            case 0:
                MainHolder.broadcaster.BroadcastToAdminGroup("入群的用户 " + e.NickName + "(" + e.FromQQ + ") 受到永久信任,同意入群。");
                goto case 9;    //显式允许直接进入下一个case

            case 9:
                await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Allow);

                return;
            }
            int qqlevel = -1;

            if (e.FromGroup != 964206367)
            {
                qqlevel = ThirdPartAPIs.getQQLevel(e.FromQQ, 2);
                if (qqlevel < 0)
                {
                    Thread.Sleep(2000);
                    qqlevel = ThirdPartAPIs.getQQLevel(e.FromQQ, 2);
                }
                if (qqlevel < 0)
                {
                    MainHolder.broadcaster.BroadcastToAdminGroup("入群的用户 " + e.NickName + "(" + e.FromQQ + ") 等级查询失败(try3,2s,try3),已提示重新申请");
                    await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Deny, "等级查询失败,请重新申请入群");

                    return;
                }
                else
                if (qqlevel < 16)
                {
                    MainHolder.broadcaster.BroadcastToAdminGroup("入群的用户 " + e.NickName + "(" + e.FromQQ + ") 等级过低(" + qqlevel + "<16), 拒绝");
                    await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Deny, "您的QQ等级过低, 如有疑问请联系管理");

                    return;
                }
            }

            if (DataBase.me.isCrewGroup(e.FromGroup))
            {                                               //是舰长群
                CrewChecker cr = new CrewChecker();
                if (DataBase.me.isUserBoundedUID(e.FromQQ)) //舰长绑定
                {
                    var uid = DataBase.me.getUserBoundedUID(e.FromQQ);
                    if (DataBase.me.isBiliUserGuard(uid))
                    {
                        await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Allow);

                        MainHolder.broadcaster.BroadcastToAdminGroup(e.FromQQ + "\n!正在加入舰长群(" + qqlevel + ">=16)\n是舰长,同意");
                    }
                    else
                    {
                        await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Deny, "没有您的大航海数据,如有疑问请联系管理。");

                        MainHolder.broadcaster.BroadcastToAdminGroup(e.FromQQ + "\n!正在加入舰长群\n不是舰长,拒绝");
                    }
                }
                else
                {
                    await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Deny, "您的QQ没有绑定任何UID,如有疑问请联系管理。");

                    MainHolder.broadcaster.BroadcastToAdminGroup(e.FromQQ + "\n!正在加入舰长群\n未知QQ,拒绝");
                }
                return;
            }
            else
            {
                var groups = DataBase.me.whichGroupsAreTheUserIn(e.FromQQ);
                if (groups.Count > 1)
                {
                    string gps = "";
                    foreach (long group in groups)
                    {
                        gps += DataBase.me.getGroupName(group) + "(" + group + ")\n";
                    }
                    MainHolder.broadcaster.BroadcastToAdminGroup(e.NickName + "(" + e.FromQQ + ") 加入群  " +
                                                                 e.FromGroupName + "(" + e.FromGroup + ") \n,自动拒绝。\n该用户同时加入以下群聊:\n" + gps);
                    await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Deny, "已加入其它粉丝群 如有疑问请联系管理");

                    return;
                }
            }

            {
                //await MainHolder.session.HandleGroupApplyAsync(e, GroupApplyActions.Allow);
                MainHolder.broadcaster.BroadcastToAdminGroup(e.FromQQ + "\n不在黑名单,等级条件满足(" + qqlevel + ">=16)\n等待人工处理");
                return;
            }
        }
        public void Should_accept_null_crew_member_list()
        {
            var result = CrewChecker.CrewMembersAreAllowedToStayTogether(null);

            Assert.True(result);
        }
        public async Task HandleMessageAsync(IMiraiHttpSession client, IGroupMemberJoinedEventArgs e)
        {
            if (!DataBase.me.IsGroupRelated(e.Member.Group.Id))
            {
                return;
            }
            string usname  = e.Member.Name;
            long   qq      = e.Member.Id;
            long   groupId = e.Member.Group.Id;
            string gname   = DataBase.me.getGroupName(groupId);

            gname =
                gname == "UNDEFINED_IN_DATABASE"
                ? e.Member.Group.Name : gname;
            try
            {
                if (DataBase.me.isUserBlacklisted(qq))
                {
                    MainHolder.broadcaster.BroadcastToAdminGroup("入群的用户 " + usname + "(" + qq + ") 存在于黑名单中,请三思!");
                }
                if (DataBase.me.whichGroupsAreTheUserIn(qq).Count > 1)
                {
                    List <long> groups_in = DataBase.me.whichGroupsAreTheUserIn(qq);
                    if (groups_in.Count > 1)
                    {
                        string gps = "";
                        foreach (long group in groups_in)
                        {
                            gps += DataBase.me.getGroupName(group) + "(" + group + ")\n";
                        }
                        MainHolder.broadcaster.BroadcastToAdminGroup(usname + "(" + qq + ") 加入群  " +
                                                                     gname + "(" + groupId + ") \n该用户同时加入以下群聊:\n" + gps);
                    }
                }
                if (DataBase.me.isCrewGroup(e.Member.Group.Id))
                {
                    long uid = DataBase.me.getUserBoundedUID(qq);

                    if (uid <= 0)
                    {
                        MainHolder.broadcaster.BroadcastToAdminGroup(usname + "(" + qq + ")加入舰长群  " +
                                                                     gname + "(" + groupId + ") \n[未能验证舰长记录 该用户未绑定UID]");
                        MainHolder.broadcaster.SendToGroup(groupId, "欢迎加入舰长群!\n[未绑定B站账号]");
                        //e.BeingOperateQQ.SendPrivateMessage("欢迎来到舰长群,感谢您对鹿野的支持!\n当前QQ未和Bilibili绑定,可发送#uid [uid]来绑定B站账号。例如:\n#uid 23696210\n不会操作也可以联系鸡蛋🥚");
                    }
                    else
                    {
                        MainHolder.broadcaster.BroadcastToAdminGroup(usname + "(" + qq + ")<舰长> 加入群  " +
                                                                     gname + "(" + groupId + ") \nB站信息:https://space.bilibili.com/" + uid + "\n");
                        PrivMessageSession           psession = PrivMessageSession.openSessionWith((int)uid, MainHolder.biliapi);
                        BiliApi.BiliUser             bu       = BiliApi.BiliUser.getUser((int)uid, MainHolder.biliapi);
                        CrewChecker                  cr       = new CrewChecker();
                        Dictionary <int, CrewMember> crewlist = cr.getAllCrewMembers();
                        CrewMember thismember = crewlist[(int)uid];
                        string     dpword     = "";
                        switch (thismember.level)
                        {
                        case 1:
                            dpword = "总督";
                            break;

                        case 2:
                            dpword = "提督";
                            break;

                        case 3:
                            dpword = "舰长";
                            break;
                        }
                        MainHolder.broadcaster.SendToGroup(groupId, "欢迎" + dpword + "<" + bu.name + ">加入舰长群!");
                        IGroupMemberCardInfo iginfo = new GroupMemberCardInfo(dpword + " " + bu.name, null);
                        await MainHolder.session.ChangeGroupMemberInfoAsync(qq, groupId, iginfo);

                        MainHolder.broadcaster.SendToQQ(qq, "欢迎来到舰长群,感谢您对奶狗狗的支持!请认准鹿野QQ(1249695750),可通过舰长群私聊鹿野获取好友位哦\n您的QQ号已和Bilibili账号<" + bu.name + ">绑定,如有疑问请联系鸡蛋🥚(这套系统的开发者,QQ号1250542735)");
                        psession.sendMessage("您已经成功加入了舰长群。感谢您对大总攻(XNG)的支持!");
                    }
                }
                else
                {
                    MainHolder.broadcaster.BroadcastToAdminGroup(usname + "加入了" + gname + "\n已建立用户信息");
                }
                DataBase.me.addUser(qq, groupId, usname);
            }
            catch (Exception err)
            {
                MainHolder.broadcaster.BroadcastToAdminGroup("[Exception]\n这条消息可能意味着机器人发生了错误。它仍在继续运行,但可能不是很稳定。下面的信息用来帮助鸡蛋定位错误,管理不必在意。\n[已入群的处理]" + err.Message + "\n\n堆栈跟踪:\n" + err.StackTrace);
            }
            return;
        }