Beispiel #1
0
        /// <summary>
        /// 加入除机器人外的所有成员
        /// 没有人数限制
        /// </summary>
        private async void JoinAll()
        {
            //检查公会是否存在
            if (DBHelper.GuildExists() != 1)
            {
                await SourceGroup.SendGroupMessage("该群未创建公会");

                return;
            }

            //获取所有成员的信息
            var(apiStatus, groupMemberList) = await SourceGroup.GetGroupMemberList();

            if (apiStatus != APIStatusType.OK)
            {
                Log.Error("API error", $"api ret code {(int) apiStatus}");
                await SourceGroup.SendGroupMessage(CQCode.CQAt(Sender), "\r\nAPI调用错误请重试");

                return;
            }

            //移除机器人的成员信息
            groupMemberList.RemoveAt(groupMemberList.FindIndex(member => member.UserId == MessageEventArgs.LoginUid));
            //添加成员到公会
            Dictionary <long, int> databaseRet = new Dictionary <long, int>();

            foreach (GroupMemberInfo member in groupMemberList)
            {
                //获取群成员名
                string memberName = groupMemberList.Any(memberInfo => memberInfo.UserId == member.UserId)
                    ? groupMemberList.Where(memberInfo => memberInfo.UserId == member.UserId)
                                    .Select(memberInfo =>
                                            string.IsNullOrEmpty(memberInfo.Card)
                                                     ? memberInfo.Nick
                                                     : memberInfo.Card)
                                    .First()
                    : "N/A";
                //添加成员
                databaseRet.Add(member.UserId,
                                DBHelper.JoinGuild(member.UserId, SourceGroup, memberName));
            }

            //构建格式化信息
            List <CQCode> responseMsg = new List <CQCode>();

            if (databaseRet.Any(ret => ret.Value == 0)) //成员成功加入
            {
                responseMsg.Add(CQCode.CQText("以下成员已加入:"));
                foreach (long member in databaseRet.Where(member => member.Value == 0)
                         .Select(member => member.Key)
                         .ToList())
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                    responseMsg.Add(CQCode.CQAt(member));
                }
            }

            if (databaseRet.Any(ret => ret.Value == 1)) //成员已存在
            {
                if (responseMsg.Count != 0)
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                }
                responseMsg.Add(CQCode.CQText("以下成员已在公会中,仅更新信息:"));
                foreach (long member in databaseRet.Where(member => member.Value == 1)
                         .Select(member => member.Key)
                         .ToList())
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                    responseMsg.Add(CQCode.CQAt(member));
                }
            }

            if (databaseRet.Any(ret => ret.Value == -1)) //数据库错误
            {
                if (responseMsg.Count != 0)
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                }
                responseMsg.Add(CQCode.CQText("以下成员在加入时发生错误:"));
                foreach (long member in databaseRet.Where(member => member.Value == -1)
                         .Select(member => member.Key)
                         .ToList())
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                    responseMsg.Add(CQCode.CQAt(member));
                }
            }

            //发送信息
            await SourceGroup.SendGroupMessage(responseMsg);
        }
Beispiel #2
0
        /// <summary>
        /// 加入公会
        /// </summary>
        private async void JoinGuild()
        {
            //检查公会是否存在
            if (DBHelper.GuildExists() != 1)
            {
                await SourceGroup.SendGroupMessage("该群未创建公会");

                return;
            }

            //处理需要加入的成员列表
            List <long> joinList = new List <long>();

            switch (BotUtils.CheckForLength(CommandArgs, 1))
            {
            case LenType.Illegal:
                joinList.Add(Sender);
                break;

            case LenType.Extra:
            case LenType.Legitimate:
                joinList.AddRange(MessageEventArgs.Message.GetAllAtList());
                if (joinList.Count == 0)
                {
                    await SourceGroup.SendGroupMessage("没有At任何成员");

                    return;
                }

                break;
            }

            //检查列表中是否有机器人
            if (joinList.Any(member => member == MessageEventArgs.LoginUid))
            {
                joinList.Remove(MessageEventArgs.LoginUid);
                await SourceGroup.SendGroupMessage("不要在成员中At机器人啊kora");

                if (joinList.Count == 0)
                {
                    return;
                }
            }

            Log.Debug("Guild Mgr", $"Get join list count={joinList.Count}");
            //从API获取成员信息
            Log.Debug("Guild Mgr", "Get group member infos");
            var(apiStatus, groupMemberList) = await SourceGroup.GetGroupMemberList();

            if (apiStatus != APIStatusType.OK)
            {
                Log.Error("API error", $"api ret code {(int) apiStatus}");
                await SourceGroup.SendGroupMessage(CQCode.CQAt(Sender), "\r\nAPI调用错误请重试");

                return;
            }

            //加入待加入的成员
            Dictionary <long, int> databaseRet = new Dictionary <long, int>();

            foreach (long member in joinList)
            {
                //获取群成员名
                string memberName = groupMemberList.Any(memberInfo => memberInfo.UserId == member)
                    ? groupMemberList.Where(memberInfo => memberInfo.UserId == member)
                                    .Select(memberInfo =>
                                            string.IsNullOrEmpty(memberInfo.Card)
                                                     ? memberInfo.Nick
                                                     : memberInfo.Card)
                                    .First()
                    : "N/A";
                //添加成员
                databaseRet.Add(member,
                                DBHelper.JoinGuild(member, SourceGroup, memberName));
            }

            //构建格式化信息
            List <CQCode> responseMsg = new List <CQCode>();

            if (databaseRet.Any(ret => ret.Value == 0)) //成员成功加入
            {
                responseMsg.Add(CQCode.CQText("以下成员已加入:"));
                foreach (long member in databaseRet.Where(member => member.Value == 0)
                         .Select(member => member.Key)
                         .ToList())
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                    responseMsg.Add(CQCode.CQAt(member));
                }
            }

            if (databaseRet.Any(ret => ret.Value == 1)) //成员已存在
            {
                if (responseMsg.Count != 0)
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                }
                responseMsg.Add(CQCode.CQText("以下成员已在公会中,仅更新信息:"));
                foreach (long member in databaseRet.Where(member => member.Value == 1)
                         .Select(member => member.Key)
                         .ToList())
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                    responseMsg.Add(CQCode.CQAt(member));
                }
            }

            if (databaseRet.Any(ret => ret.Value == -1)) //数据库错误
            {
                if (responseMsg.Count != 0)
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                }
                responseMsg.Add(CQCode.CQText("以下成员在加入时发生错误:"));
                foreach (long member in databaseRet.Where(member => member.Value == -1)
                         .Select(member => member.Key)
                         .ToList())
                {
                    responseMsg.Add(CQCode.CQText("\r\n"));
                    responseMsg.Add(CQCode.CQAt(member));
                }
            }

            //发送信息
            await SourceGroup.SendGroupMessage(responseMsg);
        }