Example #1
0
 public static EGMSPermission Create(int permissionId, PermissionName permissionName, PermissionDescription permissionDescription,
                                     bool isActive)
 {
     return(new EGMSPermission
     {
         Id = permissionId, PermissionName = permissionName, PermissionDescription = permissionDescription, IsActive = isActive
     });
 }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name, IUserInfo user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            return(GetPermission(self, name, user.CurrentChannelId, user.UserId));
        }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name)
        {
            if (self == null)
            {
                throw new ArgumentNullException("self");
            }

            return(self.PermissionsProvider.GetPermissions(-1).CheckPermission(name));
        }
Example #4
0
 internal static void CreatePermission(ISession session, PermissionName name, int userId, int channelId, bool allowed)
 {
     session.SaveOrUpdate(new Permission
     {
         Allowed   = allowed,
         Name      = name,
         UserID    = userId,
         ChannelId = channelId
     });
 }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PermissionState" /> class.
 /// </summary>
 /// <param name="Name">Name (required).</param>
 /// <param name="Description">Description.</param>
 /// <param name="Allowed">State of the named permission.  &#x60;true&#x60; to allow, &#x60;false&#x60; to deny, missing to inherit. .</param>
 public PermissionState(PermissionName Name = default(PermissionName), string Description = default(string), bool?Allowed = default(bool?))
 {
     // to ensure "Name" is required (not null)
     if (Name == null)
     {
         throw new InvalidDataException("Name is a required property for PermissionState and cannot be null");
     }
     else
     {
         this.Name = Name;
     }
     this.Description = Description;
     this.Allowed     = Allowed;
 }
        private EGMSPermissionRM CreateEGMSPermission(Commands.V1.EGMSPermission.Create cmd)
        {
            if (_repository.PermissionExists(cmd.PermissionName))
            {
                throw new InvalidOperationException($"Permission with name {cmd.PermissionName} already exists");
            }

            EGMSPermission permission = EGMSPermission.Create(_permissions++, PermissionName.Create(cmd.PermissionName),
                                                              PermissionDescription.Create(cmd.PermissionDescription), cmd.IsActive);

            _repository.AddPermission(permission);

            return(Conversions.GetEGMSPermissionRM(permission));
        }
        private static string GetPermissionName(PermissionName pe)
        {
            switch (pe)
            {
            case (PermissionName.AirPermission): return("Air");

            case (PermissionName.UserPermission): return("User");

            case (PermissionName.SupermanPermission): return("Superman");

            case (PermissionName.MasterPermission): return("Master");

            case (PermissionName.HeavenPermission): return("Heaven");
            }
            return("Unknown");
        }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name, IConnection connection)
        {
            if (self == null)
            {
                throw new ArgumentNullException("self");
            }
            if (connection == null)
            {
                return(self.GetPermission(name));
            }

            IUserInfo user = self.Users[connection];

            if (user == null)
            {
                return(self.GetPermission(name));
            }

            return(self.GetPermission(name, user.CurrentChannelId, user.UserId));
        }
Example #9
0
        public override async Task <bool> ExecuteCheckAsync(CommandContext ctx, bool help)
        {
            //TODO: Fix This
            if (help)
            {
                return(true);

                var group = await ctx.Member.GetGroupAsync();

                var pattern     = PermissionName.Replace(".", "\\.") + "($|\\..*)";
                var permissions = await group.EvaluatePatternAsync(new System.Text.RegularExpressions.Regex(pattern));

                return(permissions.Any(p => p.State == StateType.Allow));
            }


            //So we will always check the most specific one first, so we will append the channel id to the end of our permission.
            string perm = PermissionName + (RestrictChannel ? "." + ctx.Channel.Id : "");

            return(await ctx.Member.HasPermissionAsync(perm, AdminBypass, OwnerBypass));
        }
Example #10
0
 public GetPermissionCompleteAction(PermissionName permissionName, PermissionStatus permissionStatus)
 {
     PermissionName   = permissionName;
     PermissionStatus = permissionStatus;
 }
 public PermissionAttribute(PermissionName action) : base(typeof(PermissionActionFilter))
 {
     Arguments = new object[] { action };
 }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name, int channelId, int userId)
        {
            if (self == null)
                throw new ArgumentNullException ("self");

            return self.PermissionsProvider.GetPermissions (userId).CheckPermission (channelId, name);
        }
Example #13
0
        private async Task <PermissionStatus> CheckPermissionAsync(PermissionName permissionNameToCheck)
        {
            var crossPermissionsStatus = await permissions.CheckPermissionStatusAsync(permissionNameToCheck);

            return(crossPermissionsStatus);
        }
Example #14
0
 public static bool CheckPermission(this IEnumerable <Permission> self, int channelId, PermissionName name)
 {
     return(self.Any(p => p.Name == name && p.IsAllowed && (p.ChannelId == 0 || p.ChannelId == channelId)));
 }
Example #15
0
 internal static void CreatePermission(ISession session, PermissionName name, int userId, int channelId, bool allowed)
 {
     session.SaveOrUpdate (new Permission
     {
         Allowed = allowed,
         Name = name,
         UserID = userId,
         ChannelId = channelId
     });
 }
Example #16
0
 public Permission(PermissionName name)
 {
     this.Name = name;
 }
        // 接收事件
        public void GroupMessage(object sender, CQGroupMessageEventArgs e)
        {
            int sid; double qq = 0;
            List <Native.Csharp.Sdk.Cqp.Model.GroupMemberInfo> mem;
            Random r = new Random(); string ques = "";
            int    hIndex = -1; MainThread.MessagePoster.HotMsg hhmsg = new MainThread.MessagePoster.HotMsg();

            Log("(" + e.FromGroup.Id + ")Message:" + e.FromQQ.Id + "," + e.Message.Text, ConsoleColor.Cyan);

            //Artifical Repeater
            long hothander = 0;

            MainThread.MessagePoster.HotMsg hmsg = new MainThread.MessagePoster.HotMsg();
            for (int i = 0; i < Manager.mHot.data.Count; i++)
            {
                hmsg = (MainThread.MessagePoster.HotMsg)Manager.mHot.data[i];
                if (hmsg.group == e.FromGroup.Id)
                {
                    hhmsg = hmsg; hIndex = i; break;
                }
            }
            string fstr = ""; string estr = ""; string[] qtemp;

            for (int i = 0; i < Manager.Hots.data.Count; i++)
            {
nexthmsg:
                if (i >= Manager.Hots.data.Count)
                {
                    break;
                }
                hmsg = (MainThread.MessagePoster.HotMsg)Manager.Hots.data[i];
                //是否在目标群
                if (hmsg.group == e.FromGroup.Id)
                {
                    if (hmsg.delaymsg) //延迟复读
                    {
                        if (hmsg.hasre == false)
                        {
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Delay repeat:" + hmsg.msg, ConsoleColor.Yellow);
                            e.FromGroup.SendGroupMessage(hmsg.msg);
                            hmsg.delaymsg = false; hmsg.hasre = true;
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Conntinue-repeat:" + hmsg.delaymsg, ConsoleColor.Yellow);
                        }
                    }
                    if (e.Message.Text != hmsg.msg)
                    {
                        hmsg.hot--;
                    }                                              //如果当前的发言和上句发言不同,上句发言热度-1
                    //如果当前的发言和上句发言一直,上句发言热度+1
                    if (e.Message.Text == hmsg.msg)
                    {
                        hothander = hmsg.id;
                        // 不是同一个QQ在刷屏
                        if (hmsg.qq.IndexOf(e.FromQQ.Id.ToString() + ";") < 0)
                        {
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Heat:" + hmsg.msg + " , hot :" + hmsg.hot);
                            hmsg.hasup = true;
                            hmsg.qq    = hmsg.qq + e.FromQQ.Id.ToString() + ";";
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Members:" + hmsg.qq);
                            hmsg.hot++;
                            if (hIndex > -1)
                            {
                                if (hmsg.hot >= hhmsg.hot)
                                {
                                    hhmsg = hmsg; hhmsg.hasup = false;
                                    Manager.mHot.data[hIndex] = hhmsg;
                                    Log("(" + e.FromGroup.Id + ")(" + i + ")Broke records! :" + hmsg.qq + "," + hmsg.msg, ConsoleColor.Green);
                                }
                            }
                            else
                            {
                                hhmsg = hmsg; hhmsg.hasup = false;
                                Manager.mHot.data.Add(hhmsg);
                            }
                        }
                        else
                        {
                            hmsg.banqq = hmsg.banqq + e.FromQQ.Id.ToString() + ";";
                            int bancount = GotCount(hmsg.banqq, e.FromQQ.Id.ToString());
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Boring-repeat:" + e.FromQQ.Id + " x " + bancount, ConsoleColor.Red);
                            if (bancount > 2)
                            {
                                if (e.FromGroup.Id != 490623220)
                                {
                                    TimeSpan bantime = new TimeSpan(0, 2, 33);
                                    e.FromGroup.SetGroupMemberBanSpeak(Convert.ToInt64(e.FromQQ.Id), bantime);
                                }
                                e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "不许刷屏");
                                Log("(" + e.FromGroup.Id + ")(" + i + ")This human is too too boring:" + e.FromQQ.Id, ConsoleColor.Red);
                            }
                        }
                    }
                    //如果发言冷却,移除
                    if (hmsg.hot <= -2)
                    {
                        if (hmsg.hasup)
                        {
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Disapper repeat:" + hmsg.msg, ConsoleColor.Red);
                        }
                        Manager.Hots.data.RemoveAt(i); goto nexthmsg;
                    }
                    //发言热度越高,越容易引发复读
                    if (r.Next(0, 100) > 100 - hmsg.hot * 20 * (hmsg.hot / 2))
                    {
                        hmsg.delaymsg = (r.Next(0, 10) > 6); //设置延迟一回合
                        hothander     = hmsg.id;
                        if (!hmsg.delaymsg)
                        {
                            if (hmsg.hasre == false)
                            {
                                Log("(" + e.FromGroup.Id + ")(" + i + ")Repeat:" + hmsg.msg + ",impossible:" + (100 - hmsg.hot * 20 * (hmsg.hot / 2)), ConsoleColor.Yellow);
                                e.FromGroup.SendGroupMessage(hmsg.msg);
                                hmsg.hasre = true;
                            }
                        }
                        else
                        {
                            Log("(" + e.FromGroup.Id + ")(" + i + ")Delay set:" + hmsg.msg, ConsoleColor.Yellow);
                        }
                    }
                    if (i >= Manager.Hots.data.Count)
                    {
                        break;
                    }
                    Manager.Hots.data[i] = hmsg;
                }
            }
            //如果当前发言没有被处理,则加入新热点
            if (hothander == 0)
            {
                hmsg.group = e.FromGroup.Id; hmsg.msg = e.Message.Text; hmsg.hot = 1; hmsg.delaymsg = false;
                hmsg.qq    = e.FromQQ.Id.ToString() + ";"; hmsg.banqq = ""; hmsg.id = DateTime.Now.Ticks;
                hmsg.hasup = false; hmsg.hasre = false;
                Manager.Hots.data.Add(hmsg);
            }
            else
            {
                if (hIndex > -1)
                {
                    if (hhmsg.id == hmsg.id)
                    {
                        hhmsg = hmsg; hhmsg.hasup = false;
                        Manager.mHot.data[hIndex] = hhmsg;
                        Log("(" + e.FromGroup.Id + ")Stay breaking record ...", ConsoleColor.Green);
                    }
                }
            }

            //Random Topic
            string tsay = "";

            if (e.Message.Text.IndexOf("[CQ:") < 0)
            {
                if ((r.Next(0, 100) == 50) || (FailAI == true))
                {
                    try
                    {
                        tsay = ArtificalAI.Talk(e.Message.Text, "tieba");
                        if (tsay == "")
                        {
                            FailAI = true;
                        }
                        else
                        {
                            string[] tsa = tsay.Split('。');
                            FailAI = false; e.FromGroup.SendGroupMessage(tsa[r.Next(0, tsa.Length)]);
                        }
                    }
                    catch
                    {
                        FailAI = true;
                    }
                }
            }

            //Lock Processing
            sid = Manager.LCards.SearchFor(e.FromQQ.Id);
            if (sid != -1)
            {
                Log("Lock target:" + sid, ConsoleColor.Yellow);
                string tname = Manager.LCards.data[sid + 1].ToString();
                if (e.FromQQ.CQApi.GetGroupMemberInfo(e.FromGroup.Id, e.FromQQ.Id, false).Card != tname)
                {
                    if (e.FromGroup.SetGroupMemberVisitingCard(e.FromQQ.Id, tname))
                    {
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "检测到您的群名片与主人设定的群名片不相符,已强制修正为:", tname);
                    }
                    else
                    {
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(1361778219), "强制修正目标群员的群名片失败,可能本机没有权限操作。");
                    }
                }
                return;
            }

            //Console Processing
            PermissionName pe = PermissionName.AirPermission; string pename = "";

            if (e.Message.Text.StartsWith("intallk"))
            {
                sid = Manager.CPms.SearchFor(e.FromQQ.Id);
                if (e.FromGroup == 490623220)
                {
                    if (sid == -1)
                    {
                        Manager.CPms.data.Add(e.FromQQ.Id);
                        Manager.CPms.data.Add(PermissionName.UserPermission);
                        Manager.CPms.SaveData();
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您已通过此群的特殊地位拿到访问权限:User");
                        sid = Manager.CPms.SearchFor(e.FromQQ.Id);
                    }
                }
                if (sid == -1)
                {
                    e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您没有任何权限,禁止访问Intallk QQ机器人控制台。");
                    return;
                }

                try
                {
                    pe     = (PermissionName)Convert.ToInt64(Manager.CPms.data[sid + 1].ToString());
                    pename = GetPermissionName(pe);
                    string[] p = e.Message.Text.Split(' ');
                    if (p.Length < 2)
                    {
                        string cmdstr = "";
                        if (CanMatch(e.Message.Text, "msdn", "搜索", "资料", "文档", "国外", "微软", "巨硬", "microsoft"))
                        {
                            cmdstr += "*msdn [content]] 检索msdn并返回页面内容(容易失败)\n";
                        }
                        if (CanMatch(e.Message.Text, "csdn", "搜索", "资料", "文档", "国内"))
                        {
                            cmdstr += "csdn [content] 检索csdn并返回页面内容(阅读效果不佳)\n";
                        }
                        if (CanMatch(e.Message.Text, "壁纸", "桌面", "背景", "图片", "风景"))
                        {
                            cmdstr += "wallpaper 获取一张随机桌面壁纸\n";
                        }
                        if (CanMatch(e.Message.Text, "404", "睡觉", "晚安", "关机", "强制"))
                        {
                            cmdstr += "#forcesleep 强制设定404的电脑在2分钟后关机\n";
                        }
                        if (CanMatch(e.Message.Text, "管理", "禁言", "违规", "刷屏", "shit"))
                        {
                            cmdstr += "*ban [qq] [time] 设定群成员禁言(分钟)\n";
                        }
                        if (CanMatch(e.Message.Text, "管理", "禁言", "违规", "刷屏", "shit", "全员", "所有人"))
                        {
                            cmdstr += "*allban [bool] 开关全体禁言\n";
                        }
                        if (CanMatch(e.Message.Text, "管理", "危险", "祝福", "超级", "问候", "全员", "所有人"))
                        {
                            cmdstr += "#supergoodnight [content] 将所有成员艾特一遍发送指定消息\n";
                        }
                        if (CanMatch(e.Message.Text, "管理", "危险", "祝福", "超级", "问候", "全员", "所有人"))
                        {
                            cmdstr += "#supergoodnightfancy♂ [content] 将所有成员私聊一遍发送指定消息\n";
                        }
                        if (CanMatch(e.Message.Text, "管理", "新", "任命", "我要", "提权", "权限", "地位"))
                        {
                            cmdstr += "#manager [qq] 设置新的管理员\n";
                        }
                        if (CanMatch(e.Message.Text, "管理", "撤", "罢免", "我要", "降权", "权限", "地位"))
                        {
                            cmdstr += "#unmanager [qq] 解除管理员\n";
                        }
                        if (CanMatch(e.Message.Text, "permission", "令牌", "修改", "系统", "更改", "权限", "地位"))
                        {
                            cmdstr += "!permission [qq] [pid] 设置权限\n";
                        }
                        if (CanMatch(e.Message.Text, "聊天", "无逻辑", "无聊", "百度", "搜索", "骚"))
                        {
                            cmdstr += "talk [content] 无逻辑谈话(百度贴吧)\n";
                        }
                        if (CanMatch(e.Message.Text, "聊天", "无逻辑", "无聊", "百度", "搜索", "骚"))
                        {
                            cmdstr += "talk_old [content] 无逻辑谈话(百度知道)\n";
                        }


                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "关于黑嘴Intallk稽气人(1.4.6),垃圾臭狗机器人的同义词。\n制作:Error 404(QQ1361778219)\nGithub地址:https://github.com/buger404\nPowered by CoolQ\n\n支持的指令:\n" +
                                                     "(无标注的指令至少需要User权限,*至少需要Superman权限,#至少需要Master权限,!至少需要Heaven权限)\n" +
                                                     "***您当前所持权限:" + pename + "(级别:" + Convert.ToInt64(pe) + ")***\n" +
                                                     "*honor [content] 给予自己永久头衔\n" +
                                                     "*praise 为自己发送10个赞\n" +
                                                     "*lockcard [qq] [name] 检测到指定全员名片与设定不符时自动修改\n" +
                                                     "pop 输出今日本群最热发言\n" +
                                                     "其他功能:智能复读,刷屏检测,自主发言等。");
                        return;
                    }
                    switch (p[1])
                    {
                    case ("pop"):
                        if (hIndex > -1)
                        {
                            qtemp = hhmsg.banqq.Split(';');
                            for (int i = 0; i < qtemp.Length - 1; i++)
                            {
                                estr = estr + CQApi.CQCode_At(Convert.ToInt64(qtemp[i]));
                            }
                            qtemp = hhmsg.qq.Split(';');
                            for (int i = 0; i < qtemp.Length - 1; i++)
                            {
                                fstr = fstr + CQApi.CQCode_At(Convert.ToInt64(qtemp[i]));
                            }
                            e.FromGroup.SendGroupMessage("截止刚才,本群今日最热发言:\n" + hhmsg.msg + "\n复读发起人:" + CQApi.CQCode_At(Convert.ToInt64(qtemp[0])) + "\n复读热度:" + hhmsg.hot + "\n该热度发言被这些成员复读过:" + fstr + "\n在该热度发言发起时,这些成员太过激动试图刷屏:" + estr);
                        }
                        else
                        {
                            e.FromGroup.SendGroupMessage("截止刚才我群今日暂无最热发言。");
                        }
                        break;

                    case ("msdn"):
                        //msdn searching
                        if (pe < PermissionName.SupermanPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "该功能正在回炉改造中..."); return;

                        for (int i = 2; i < p.Length; i++)
                        {
                            ques = ques + p[i] + " ";
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + "\n" + ArtificalAI.Talk(ques, "msdn"));
                        break;

                    case ("csdn"):
                        //csdn searching
                        if (pe < PermissionName.UserPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "该功能正在回炉改造中..."); return;

                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        for (int i = 2; i < p.Length; i++)
                        {
                            ques = ques + p[i] + " ";
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + "\n" + ArtificalAI.Talk(ques, "csdn"));
                        break;

                    case ("wallpaper"):
                        if (pe < PermissionName.UserPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + "您喜欢这个壁纸吗?\n" + Wallpaper.GetWallpaper());
                        break;

                    case ("forcesleep"):
                        if (pe < PermissionName.MasterPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(1361778219), " 滚去睡觉吧!");
                        ShellExecute(IntPtr.Zero, "open", @"shutdown", "-s -t 120", "", ShowCommands.SW_SHOWNORMAL);
                        break;

                    case ("ban"):
                        if (pe < PermissionName.SupermanPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 3)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        qq = Convert.ToDouble(p[2]);
                        TimeSpan ctime = new TimeSpan(0, Convert.ToInt16(p[3]), 0);
                        if (e.FromGroup.SetGroupMemberBanSpeak(Convert.ToInt64(qq), ctime))
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "禁言目标成员成功。");
                        }
                        else
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "禁言目标成员失败,可能本机没有权限。");
                        }
                        break;

                    case ("allban"):
                        if (pe < PermissionName.SupermanPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        bool bswitch = Convert.ToBoolean(p[2]);
                        if (bswitch)
                        {
                            if (e.FromGroup.SetGroupBanSpeak())
                            {
                                e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "禁言全体成员成功。");
                            }
                            else
                            {
                                e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "禁言全体成员失败,可能本机没有权限。");
                            }
                        }
                        else
                        {
                            e.FromGroup.RemoveGroupBanSpeak();
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "解禁全体成员成功。");
                        }
                        break;

                    case ("manager"):
                        if (pe < PermissionName.MasterPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        qq = Convert.ToDouble(p[2]);
                        e.FromGroup.SetGroupManage(Convert.ToInt64(qq));
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(Convert.ToInt64(qq)), "您已被授予管理员。");
                        break;

                    case ("unmanager"):
                        if (pe < PermissionName.MasterPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        qq = Convert.ToDouble(p[2]);
                        e.FromGroup.RemoveGroupManage(Convert.ToInt64(qq));
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(Convert.ToInt64(qq)), "您的管理员宝座被移除。");
                        break;

                    case ("supergoodnightfancy♂"):
                        if (pe < PermissionName.MasterPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        mem = e.FromGroup.GetGroupMemberList();
                        for (int i = 0; i < mem.Count; i++)
                        {
                            mem[i].QQ.SendPrivateMessage(p[2]);
                            Log("Wish:" + i, ConsoleColor.Yellow);
                            //e.FromGroup.SendGroupMessage(atstr, p[2]);
                            Thread.Sleep(500);
                        }
                        break;

                    case ("supergoodnight"):
                        if (pe < PermissionName.MasterPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        string atstr = "";
                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        mem = e.FromGroup.GetGroupMemberList();
                        for (int i = 0; i < mem.Count; i += 10)
                        {
                            atstr = "";
                            for (int s = i; s < i + 10; s++)
                            {
                                Log("Wish:" + s, ConsoleColor.Yellow);
                                if (s > mem.Count)
                                {
                                    break;
                                }
                                atstr = atstr + CQApi.CQCode_At(mem[s].QQ.Id);
                            }
                            e.FromGroup.SendGroupMessage(atstr, p[2]);
                            Thread.Sleep(3000);
                        }
                        break;

                    case ("permission"):
                        if (pe < PermissionName.HeavenPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        qq  = Convert.ToDouble(p[2]);
                        sid = Manager.CPms.SearchFor(qq);
                        if (sid != -1)
                        {
                            Manager.CPms.data[sid + 1] = p[3];
                            Manager.CPms.SaveData();
                            pe = (PermissionName)Convert.ToInt64(p[3]);
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "\n" +
                                                         CQApi.CQCode_At(Convert.ToInt64(qq)) + "的权限已经更新。\n" +
                                                         "权限:" + GetPermissionName(pe) + "(级别:" + Convert.ToInt64(pe) + ")\n" +
                                                         "权限编号:" + sid + "\n");
                        }
                        else
                        {
                            Manager.CPms.data.Add(qq);
                            Manager.CPms.data.Add(PermissionName.UserPermission);
                            Manager.CPms.SaveData();
                            sid = Manager.CPms.SearchFor(qq);
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id),
                                                         "成功给予" + CQApi.CQCode_At(Convert.ToInt64(qq)) + "权限!\n" +
                                                         "权限编号:" + sid);
                        }
                        break;

                    case ("honor"):
                        if (pe < PermissionName.SupermanPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        if (e.FromQQ.SetGroupMemberForeverExclusiveTitle(e.FromGroup.Id, p[2]) == false)
                        {
                            throw new Exception("设置您的专属头衔失败,可能没有权限");
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "设置成功!");
                        break;

                    case ("praise"):
                        if (pe < PermissionName.SupermanPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (e.FromQQ.SendPraise(10) == false)
                        {
                            throw new Exception("点赞失败");
                        }
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "成功为您刷入十个赞");
                        break;

                    case ("talk"):
                        if (pe < PermissionName.UserPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        for (int i = 2; i < p.Length; i++)
                        {
                            ques = ques + p[i] + " ";
                        }
                        tsay = ArtificalAI.Talk(ques, "tieba");
                        if (tsay != "")
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + tsay);
                        }
                        else
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + "怀疑超出人类认知范围。");
                        }
                        break;

                    case ("talk_old"):
                        if (pe < PermissionName.UserPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 2)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        for (int i = 2; i < p.Length; i++)
                        {
                            ques = ques + p[i] + " ";
                        }
                        tsay = ArtificalAI.Talk(ques, "baidu");
                        if (tsay != "")
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + tsay);
                        }
                        else
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id) + "怀疑超出人类认知范围。");
                        }
                        break;

                    case ("lockcard"):
                        if (pe < PermissionName.SupermanPermission)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), "您当前持有的权限'" + pename + "'(级别" + Convert.ToInt64(pe) + ")不足以访问该指令。"); return;
                        }
                        if (p.Length < 3)
                        {
                            throw new Exception("'" + p[1] + "'所给的参数个数不正确");
                        }
                        qq  = Convert.ToDouble(p[2]); string lname = p[3];
                        sid = Manager.LCards.SearchFor(qq);
                        if (sid != -1)
                        {
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), CQApi.CQCode_At(Convert.ToInt64(qq)),
                                                         "目标成员的群名片已经被锁定过了。\n" +
                                                         "锁定地址:" + sid +
                                                         "\n上次锁定的名片:" + Manager.LCards.data[sid + 1] +
                                                         "\n已修改锁定的名片为当前新设定的名片。");
                            Manager.LCards.data[sid + 1] = lname;
                            Manager.LCards.SaveData();
                        }
                        else
                        {
                            Manager.LCards.data.Add(qq);
                            Manager.LCards.data.Add(lname);
                            Manager.LCards.SaveData();
                            sid = Manager.LCards.SearchFor(qq);
                            e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id), CQApi.CQCode_At(Convert.ToInt64(qq)),
                                                         "锁定目标成员的群名片成功!\n" +
                                                         "锁定地址:" + sid +
                                                         "\n锁定的名片:" + Manager.LCards.data[sid + 1]);
                        }
                        break;

                    default:
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id),
                                                     "'" + p[1] + "'不是有效的指令");
                        break;
                    }
                }
                catch (Exception err)
                {
                    if (e.FromGroup == 490623220)
                    {
                        string[] statemp = err.StackTrace.Split('在');
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(1361778219),
                                                     "异常描述:" + err.Message +
                                                     "\n顶异常堆栈:" + statemp[statemp.Length - 1] +
                                                     "\n导致异常的指令:" + e.Message.Text);
                    }
                    else
                    {
                        e.FromGroup.SendGroupMessage(CQApi.CQCode_At(e.FromQQ.Id),
                                                     "给予的指令可能错误。\n异常描述:" + err.Message +
                                                     "\n请联系QQ1361778219取得解决方案");
                    }
                }
                return;
            }

            //throw new NotImplementedException();
        }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name, IChannelInfo channel, IUserInfo user)
        {
            if (channel == null)
                throw new ArgumentNullException ("channel");
            if (user == null)
                throw new ArgumentNullException ("user");

            return GetPermission (self, name, channel.ChannelId, user.UserId);
        }
Example #19
0
        public async Task <PermissionStatus> CheckPermissionStatusAsync(PermissionName permissionName)
        {
            var pluginPermissionStauts = await currentPermissions.CheckPermissionStatusAsync(permissionName.ToPluginPermission());

            return(pluginPermissionStauts.ToMyPermissionStatus());
        }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name)
        {
            if (self == null)
                throw new ArgumentNullException ("self");

            return self.PermissionsProvider.GetPermissions (-1).CheckPermission (name);
        }
Example #21
0
 public PermissionActionFilter(PermissionName action, IUserRoleBusinessLogic userRoleBusinessLogic, IOptions <AzureAdOptions> azureOptions)
 {
     this.action = action;
     this.userRoleBusinessLogic = userRoleBusinessLogic;
     this.azureOptions          = azureOptions.Value;
 }
Example #22
0
 internal static void CreatePermission(ISession session, PermissionName name, int userId, int channelId)
 {
     CreatePermission(session, name, userId, channelId, true);
 }
Example #23
0
 public Permission(PermissionName name, bool isAllowed)
     : this(name)
 {
     this.IsAllowed = isAllowed;
 }
Example #24
0
        public async Task RequestPermissionsAsync(PermissionName permissionName)
        {
            var result = await currentPermissions.RequestPermissionsAsync(permissionName.ToPluginPermission());

            //TODO: I should return result, and check it
        }
 public GetPermissionStartAction(PermissionName permissionName)
 {
     PermissionName = permissionName;
 }
Example #26
0
 internal static void CreatePermission(ISession session, PermissionName name, int userId, int channelId)
 {
     CreatePermission (session, name, userId, channelId, true);
 }
        public static bool GetPermission(this IGablarskiServerContext self, PermissionName name, IChannelInfo channel, IConnection connection)
        {
            if (self == null)
                throw new ArgumentNullException ("self");
            if (channel == null)
                throw new ArgumentNullException ("channel");
            if (connection == null)
                throw new ArgumentNullException ("connection");

            IUserInfo user = self.Users[connection];
            if (user == null)
                return self.GetPermission (name);

            return GetPermission (self, name, channel.ChannelId, user.UserId);
        }