示例#1
0
        /// <summary>
        /// 零参数指令的参数检查
        /// 同时检查成员是否存在
        /// </summary>
        /// <returns>
        /// <para><see langword="true"/> 指令合法</para>
        /// <para><see langword="false"/> 有多余参数</para>
        /// </returns>
        internal async ValueTask <bool> ZeroArgsCheck()
        {
            //检查参数
            switch (BotUtils.CheckForLength(CommandArgs, 0))
            {
            case LenType.Extra:
                await MessageEventArgs.SourceGroup.SendGroupMessage(CQCode.CQAt(MessageEventArgs.Sender.Id),
                                                                    "\r\n听不见!重来!(有多余参数)");

                return(false);

            case LenType.Legitimate:
                return(true);

            default:
                await MessageEventArgs.SourceGroup.SendGroupMessage(CQCode.CQAt(MessageEventArgs.Sender.Id),
                                                                    "发生未知错误,请联系机器人管理员");

                ConsoleLog.Error("Unknown error", "LenType");
                return(false);
            }
        }
示例#2
0
        /// <summary>
        /// 退会
        /// </summary>
        private async void QuitGuild()
        {
            //检查公会是否存在
            if (DBHelper.GuildExists() != 1)
            {
                await SourceGroup.SendGroupMessage("该群未创建公会");

                return;
            }

            //获取成员参数
            List <long> quitList = new List <long>();

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

            case LenType.Legitimate:     //只有单一成员时需判断uid参数
                quitList.AddRange(MessageEventArgs.Message.GetAllAtList());
                if (quitList.Count == 0)
                {
                    if (long.TryParse(CommandArgs[1], out long uid))
                    {
                        quitList.Add(uid);
                    }
                    else
                    {
                        await SourceGroup.SendGroupMessage("没有At任何成员");

                        return;
                    }
                }

                break;

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

                    return;
                }

                break;
            }

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

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

            Log.Debug("Guild Mgr", $"Get quit list count={quitList.Count}");
            Dictionary <long, int> databaseRet = new Dictionary <long, int>();

            //删除退会成员
            foreach (long member in quitList)
            {
                databaseRet.Add(member,
                                DBHelper.QuitGuild(member, SourceGroup));
            }

            //构建格式化信息
            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);
        }
示例#3
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);
        }
示例#4
0
        /// <summary>
        /// 创建公会
        /// </summary>
        private async void CreateGuild()
        {
            //检查群是否已经被标记为公会
            switch (this.DBHelper.GuildExists())
            {
            case 1:
                await base.SourceGroup.SendGroupMessage(CQCode.CQAt(base.Sender),
                                                        $"此群已被标记为[{DBHelper.GetGuildInfo(base.SourceGroup).GuildName}]公会");

                return;
            }

            //公会名
            string guildName;
            //公会区服
            Server guildServer;

            //判断公会名
            switch (BotUtils.CheckForLength(this.CommandArgs, 1))
            {
            case LenType.Extra:
                if (BotUtils.CheckForLength(this.CommandArgs, 2) == LenType.Legitimate)
                {
                    guildName = CommandArgs[2];
                }
                else
                {
                    await base.SourceGroup.SendGroupMessage(CQCode.CQAt(base.Sender), "\r\n有多余参数");

                    return;
                }

                break;

            case LenType.Legitimate:
                var groupInfo = await base.SourceGroup.GetGroupInfo();

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

                    return;
                }

                guildName = groupInfo.groupInfo.GroupName;
                break;

            default:
                return;
            }

            //判断区服
            if (Enum.IsDefined(typeof(Server), CommandArgs[1]))
            {
                guildServer = (Server)Enum.Parse(typeof(Server), CommandArgs[1]);
                if (guildServer != Server.CN)
                {
                    await base.SourceGroup.SendGroupMessage("暂不支持国服以外的服务器");

                    return;
                }
            }
            else
            {
                await base.SourceGroup.SendGroupMessage(CQCode.CQAt(base.Sender),
                                                        "弟啊,你哪个服务器的");

                return;
            }

            switch (this.DBHelper.CreateGuild(guildServer, guildName, base.SourceGroup))
            {
            case -1:
                await BotUtils.DatabaseFailedTips(MessageEventArgs);

                break;

            case 0:
                await base.SourceGroup.SendGroupMessage($"公会[{guildName}]已创建");

                break;

            default:
                await base.SourceGroup.SendGroupMessage("发生了未知错误");

                break;
            }
        }