Пример #1
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var  routeMsg  = scope.RouteMessage;
            long groupId   = Convert.ToInt64(routeMsg.GroupId);
            long userId    = Convert.ToInt64(routeMsg.UserId);
            long discussId = Convert.ToInt64(routeMsg.DiscussId);
            var  type      = routeMsg.MessageType;

            string group, sender, message = routeMsg.Message.RawMessage;
            var    data = CoolQDispatcher.Current.SessionList[(CoolQIdentity)routeMsg.Identity].GetDataAsync().Result;

            if (type == MessageType.Private)
            {
                group  = "私聊";
                sender = data.Name;
            }
            else if (type == MessageType.Discuss)
            {
                group  = data.Name;
                sender = routeMsg.UserId;
            }
            else
            {
                var userInfo = data?.GroupInfo?.Members
                               ?.FirstOrDefault(i => i.UserId == userId) ??
                               CoolQHttpApiClient.GetGroupMemberInfo(routeMsg.GroupId, routeMsg.UserId).Data;
                group  = data?.Name;
                sender = string.IsNullOrEmpty(userInfo.Card)
                    ? userInfo.Nickname
                    : userInfo.Card;
            }

            Logger.Message($"({group}) {sender}:\r\n  {CoolQCode.DecodeToString(message).Replace("\n", "\n  ")}");
            return(null);
        }
Пример #2
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            _routeMsg = routeMsg;
            _identity = (CoolQIdentity)_routeMsg.Identity;
            _plugins  = PluginManager.Current.Plugins.OfType <MessagePlugin>()
                        .Where(k => (k.MiddlewareConfig as BackendConfig)?.CanDisabled == true)
                        .Where(k => k.TargetAuthority != Authority.Root);
            if (!DisabledList.ContainsKey(_identity))
            {
                DisabledList.Add(_identity, new List <Guid>());
            }

            _disabled = DisabledList[_identity];

            if (_routeMsg.CurrentAuthority == Authority.Public && _routeMsg.MessageType == MessageType.Group)
            {
                return(_routeMsg.ToSource(DefaultReply.AdminOnly));
            }
            if (List)
            {
                return(ShowPluginList());
            }
            if (DisabledPlugin != null)
            {
                return(EnablePlugin());
            }
            if (EnabledPlugin != null)
            {
                return(DisablePlugin());
            }

            return(_routeMsg.ToSource(DefaultReply.ParamError));
        }
Пример #3
0
        private const string MagicalWord = "                              ."; // 解决底层跨平台傻吊bug的方案

        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var        routeMsg = scope.RouteMessage;
            FontFamily font     = GetRandFont(GetFonts());
            var        pandas   = GetPandas();

            if (UseAll)
            {
                List <Bitmap> bmps      = pandas.Select(item => GenerateOne(font, item.FullName)).ToList();
                int           maxWidthP = bmps.Max(item => item.Width);
                int           maxHeight = bmps.Sum(item => item.Height);
                const int     addWidth  = 50;
                int           maxWidth  = maxWidthP + addWidth;
                Bitmap        bitmap    = new Bitmap(maxWidth, maxHeight);
                using (Graphics g = Graphics.FromImage(bitmap))
                    using (Brush b = new SolidBrush(Color.Black))
                        using (Pen p = new Pen(Color.Black))
                            using (Font f = new Font("等线", 30, FontStyle.Bold))
                            {
                                g.Clear(Color.White);
                                int y = 0;
                                for (var i = 0; i < bmps.Count; i++)
                                {
                                    var item = bmps[i];
                                    g.TextRenderingHint = TextRenderingHint.AntiAlias;
                                    g.DrawImage(item, addWidth + maxWidthP / 2f - item.Width / 2f, y);
                                    string numStr = (i + 1).ToString();
                                    var    size   = g.MeasureString(numStr, f);
                                    g.DrawString(numStr, f, b, addWidth / 2f - size.Width / 2f,
                                                 y + item.Height / 2f - size.Height / 2f);
                                    g.DrawRectangle(p, new Rectangle(0, y, addWidth, item.Height));
                                    g.DrawRectangle(p, new Rectangle(addWidth, y, maxWidthP, item.Height));
                                    y += item.Height;
                                }
                            }

                var cqImg2 = new FileImage(bitmap, 75).ToString();
                return(routeMsg.ToSource(cqImg2));
            }
            string pandaPath;

            if (PandaNum >= 1)
            {
                int trueNum = PandaNum - 1;
                if (PandaNum > pandas.Length)
                {
                    return(routeMsg.ToSource($"超过了范围哦,一共有{pandas.Length}张表情", true));
                }
                pandaPath = pandas[trueNum].FullName;
            }
            else
            {
                pandaPath = GetRandPanda(pandas);
            }

            Bitmap bmp   = GenerateOne(font, pandaPath);
            var    cqImg = new FileImage(bmp, 65).ToString();

            return(routeMsg.ToSource(cqImg));
        }
Пример #4
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.MessageType == MessageType.Private)
            {
                return(null);
            }

            string[] ids = CoolQCode.GetAt(routeMsg.RawMessage);
            if (ids == null || !ids.Contains(routeMsg.ReportMeta.SelfId))
            {
                return(null);
            }
            if (StaticRandom.NextDouble() < 0.9)
            {
                return(routeMsg
                       .ToSource("", true)
                       .RandomDelaySeconds(5));
            }
            else
            {
                var cqImg = new FileImage(Path.Combine(PandaDir, "at.jpg"));
                return(routeMsg.ToSource(cqImg.ToString()));
            }
        }
Пример #5
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var                  routeMsg    = scope.RouteMessage;
            BllUserRole          bllUserRole = new BllUserRole();
            List <TableUserRole> userInfo    = bllUserRole.GetUserRoleByQq(long.Parse(routeMsg.UserId));

            if (userInfo.Count == 0)
            {
                return(routeMsg.ToSource(DefaultReply.IdNotBound, true));
            }

            var id = userInfo[0].UserId;

            var client      = new OldSiteApiClient();
            var beatmapSets = client.GetBeatmapSetsByCreator(new UserId(id))
                              .Where(k => k.Beatmaps.FirstOrDefault()?.LastUpdate.AddDays(28) < DateTimeOffset.Now)
                              .ToArray();

            if (beatmapSets.Length == 0)
            {
                return(routeMsg.ToSource("你没有Graveyard Beatmaps!", true));
            }

            var beatmapSet = beatmapSets[StaticRandom.Next(beatmapSets.Length)];
            var cqMusic    = new CustomMusic(
                $"https://osu.ppy.sh/s/{beatmapSet.Id}",
                $"https://b.ppy.sh/preview/{beatmapSet.Id}.mp3",
                beatmapSet.Title,
                $"{beatmapSet.Artist}\r\n({beatmapSet.FavouriteCount} fav)",
                $"https://b.ppy.sh/thumb/{beatmapSet.Id}l.jpg");

            return(routeMsg
                   .ToSource(cqMusic.ToString())
                   .ForceToSend());
        }
Пример #6
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var  routeMsg   = scope.RouteMessage;
            var  parameters = (Params)Parameters;
            bool isParam1   = int.TryParse(parameters.Param1, out int param1);
            bool isParam2   = int.TryParse(parameters.Param2, out int param2);
            bool isCNum     = int.TryParse(parameters.Count, out int count);

            if (!isParam1)
            {
                return(routeMsg
                       .ToSource(GetRand().ToString(), true)
                       .ForceToSend());
            }
            if (!isParam2)
            {
                return(routeMsg
                       .ToSource(GetRand(param1).ToString(), true)
                       .ForceToSend());
            }
            if (!isCNum)
            {
                return(routeMsg
                       .ToSource(GetRand(param1, param2).ToString(), true)
                       .ForceToSend());
            }
            return(routeMsg
                   .ToSource(GetRandMessage(param1, param2, parameters.Repeat, count), true)
                   .ForceToSend());
        }
Пример #7
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.MessageType == MessageType.Private)
            {
                return(null);
            }
            string groupId = routeMsg.GroupId ?? routeMsg.DiscussId;

            if (!GroupDic.ContainsKey(groupId))
            {
                GroupDic.GetOrAdd(groupId, new GroupSettings
                {
                    GroupId = groupId,
                });

                GroupDic[groupId].Task = Task.Run(DecreaseQueue);
                //GroupDic[groupId].Thread.Start();
            }

            if (GroupDic[groupId].IntQueue >= MaxNum && !GroupDic[groupId].Locked)
            {
                GroupDic[groupId].Locked = true;
                Logger.Debug(groupId + " locked");
                Logger.Success(groupId + "的" + routeMsg.UserId + "触发了复读");
                Thread.Sleep(StaticRandom.Next(1000, 8000));
                return(routeMsg.ToSource(routeMsg.RawMessage));
            }

            GroupDic[groupId].IntQueue++;
            //Logger.Debug(groupId + " incresed to " + GroupDic[groupId].IntQueue);
            return(null);

            Task DecreaseQueue()
            {
                while (true)
                {
                    Thread.Sleep(StaticRandom.Next(1000, 10000));
                    if (GroupDic[groupId].IntQueue <= 0)
                    {
                        if (GroupDic[groupId].Locked)
                        {
                            GroupDic[groupId].Locked = false;
                            Logger.Debug(groupId + " unlocked");
                        }

                        continue;
                    }

                    if (StaticRandom.NextDouble() < 0.02)
                    {
                        Thread.Sleep(StaticRandom.Next(30000, 45000));
                    }

                    GroupDic[groupId].IntQueue--;
                    //Logger.Debug(groupId + " decresed to " + GroupDic[groupId].IntQueue);
                }
            }
        }
Пример #8
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var    routeMsg = scope.RouteMessage;
            string userName = Decode(UserName);

            if (string.IsNullOrEmpty(userName))
            {
                return(routeMsg.ToSource(DefaultReply.ParamMissing));
            }

            BllUserRole      bllUserRole = new BllUserRole();
            OldSiteApiClient client      = new OldSiteApiClient();
            int userNum = client.GetUser(UserComponent.FromUserName(UserName), out var userObj);

            if (userNum == 0)
            {
                return(routeMsg.ToSource(DefaultReply.IdNotFound, true));
            }
            if (userNum > 1)
            {
                // ignored
            }

            var role = bllUserRole.GetUserRoleByQq(long.Parse(routeMsg.UserId));

            if (role.Count != 0)
            {
                if (role[0].CurrentUname == userObj.UserName)
                {
                    return(routeMsg.ToSource("我早就认识你啦.", true));
                }
                string msg = role[0].CurrentUname + ",我早就认识你啦. 有什么问题请找Mother Ship(扔锅)";
                return(routeMsg.ToSource(msg, true));
            }

            var newRole = new TableUserRole
            {
                UserId        = userObj.UserId,
                Role          = "creep",
                QQ            = long.Parse(routeMsg.UserId),
                LegacyUname   = "[]",
                CurrentUname  = userObj.UserName,
                IsBanned      = false,
                RepeatCount   = 0,
                SpeakingCount = 0,
                Mode          = 0,
            };
            var exist = bllUserRole.GetUserRoleByUid(userObj.UserId);

            if (exist != null && exist.Count > 0)
            {
                return(routeMsg.ToSource("这个账号已经被QQ: " + exist.First().QQ + "绑定啦,请联系妈船或对方QQ哦."));
            }
            int c = bllUserRole.InsertUserRole(newRole);

            return(c < 1
                ? routeMsg.ToSource("由于各种强大的原因,绑定失败..")
                : routeMsg.ToSource("明白了," + userObj.UserName + ",多好的名字呢."));
        }
Пример #9
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var    routeMsg = scope.RouteMessage;
            long   userId   = Convert.ToInt64(routeMsg.UserId);
            string message  = routeMsg.Message.RawMessage;

            var requestAuth = GetRequestAuthority(message, out var fullCommand);

            switch (requestAuth)
            {
            case Authority.Public:
            {
                var data = CoolQDispatcher.Current.SessionList[(CoolQIdentity)routeMsg.Identity].GetDataAsync().Result;
                if (data.GroupInfo?.Admins.Count(q => q.UserId == userId) != 0)
                {
                    requestAuth = Authority.Admin;
                }
                if (userId == 2241521134)
                {
                    requestAuth = Authority.Root;
                }
            }
            break;

            case Authority.Admin:
            {
                var data = CoolQDispatcher.Current.SessionList[(CoolQIdentity)routeMsg.Identity].GetDataAsync().Result;
                if (data.GroupInfo?.Admins.Count(q => q.UserId == userId) == 0)
                {
                    Logger.Raw("Access denied.");
                    requestAuth = Authority.Public;
                    SendMessage(routeMsg.ToSource(DefaultReply.FakeAdmin).Handle());
                }
            }
            break;

            case Authority.Root:
                if (userId != 2241521134)
                {
                    Logger.Raw("Access denied.");
                    requestAuth = Authority.Public;
                    SendMessage(routeMsg.ToSource(DefaultReply.FakeRoot).Handle());
                }

                break;
            }

            if (fullCommand != null)
            {
                routeMsg.FullCommand = fullCommand;
            }
            if (requestAuth != null)
            {
                routeMsg.CurrentAuthority = requestAuth.Value;
            }
            return(null);
        }
Пример #10
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.MessageType == MessageType.Private)
            {
                return(null);
            }
            var imgList = CoolQCode.GetImageInfo(routeMsg.RawMessage);

            if (imgList == null)
            {
                return(null);
            }

            string groupId = routeMsg.GroupId ?? routeMsg.DiscussId;

            if (!GroupDic.ContainsKey(groupId))
            {
                GroupDic.GetOrAdd(groupId, new GroupSettings
                {
                    GroupId  = groupId,
                    routeMsg = routeMsg
                });
            }

            foreach (var item in imgList)
            {
                if (item.Extension.ToLower() == ".gif")
                {
                    continue;
                }
                if (item.FileInfo.Exists)
                {
                    GroupDic[groupId].PathQueue.Enqueue(item.FileInfo.FullName);
                }
                else
                {
                    string path = HttpClient.SaveImageFromUrl(item.Url, System.Drawing.Imaging.ImageFormat.Jpeg);
                    GroupDic[groupId].PathQueue.Enqueue(path);
                }
#if DEBUG
                _totalCount++;
#endif
            }

            if (GroupDic[groupId].Task == null || GroupDic[groupId].Task.IsCompleted ||
                GroupDic[groupId].Task.IsCanceled)
            {
                GroupDic[groupId].Task = Task.Run(() => RunDetector(GroupDic[groupId]));
#if DEBUG
                Logger.Info("[" + groupId + "] (熊猫) 共 " + _totalCount);
#endif
            }

            return(null);
        }
Пример #11
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (!routeMsg.RawMessage.Contains("数咩羊"))
            {
                return(null);
            }

            using (Session session = new Session(8000, routeMsg.Identity, routeMsg.UserId))
            {
                SendMessage(routeMsg.ToSource("睡不着那就一起数咩羊吧。来,我先开始,1!"));
                int count = 1;
                try
                {
                    CoolQRouteMessage obj = (CoolQRouteMessage)session.GetMessage();
                    do
                    {
                        System.Threading.Thread.Sleep(1000);

                        if (int.TryParse(obj.RawMessage, out var res))
                        {
                            if (res == count + 1)
                            {
                                count += 2;
                                SendMessage(routeMsg.ToSource(count.ToString()));
                            }
                            else
                            {
                                SendMessage(routeMsg.ToSource($"你数错啦,是不是困了?现在是{count},到你了"));
                            }
                        }
                        else
                        {
                            SendMessage(routeMsg.ToSource($"不对!要好好数数哦!现在是{count},到你了"));
                        }

                        System.Threading.Thread.Sleep(1000);

                        if (count > 15)
                        {
                            SendMessage(routeMsg.ToSource("不数羊了,人家都困了,聊点别的吧!"));
                            break;
                        }
                        obj = (CoolQRouteMessage)session.GetMessage();
                    } while (obj != null);
                }
                catch (TimeoutException)
                {
                    SendMessage(routeMsg.ToSource("数不动了吗,那就好好睡觉咯,晚安!"));
                }
            }

            return(null);
        }
Пример #12
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.RawMessage == "收到福袋,请使用新版手机QQ查看")
            {
                CoolQHttpApiClient.DeleteMessage(routeMsg.MessageId);
            }

            return(null);
            //return routeMsg.ToSource("已撤回福袋。若需关闭,请使用 \"/plugin -disable PackDetector\"");
        }
Пример #13
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var              routeMsg = scope.RouteMessage;
            string           id;
            string           uname;
            OldSiteApiClient client = new OldSiteApiClient();

            if (UserName == null)
            {
                BllUserRole          bllUserRole = new BllUserRole();
                List <TableUserRole> userInfo    = bllUserRole.GetUserRoleByQq(long.Parse(routeMsg.UserId));
                if (userInfo.Count == 0)
                {
                    return(routeMsg.ToSource(DefaultReply.IdNotBound, true));
                }

                id    = userInfo[0].UserId.ToString();
                uname = userInfo[0].CurrentUname;
            }
            else
            {
                int userNum = client.GetUser(UserComponent.FromUserName(UserName), out var userObj);
                if (userNum == 0)
                {
                    return(routeMsg.ToSource(DefaultReply.IdNotFound, true));
                }
                if (userNum > 1)
                {
                    // ignored
                }

                id    = userObj.UserId.ToString();
                uname = userObj.UserName;
            }

            var eloInfo = EloApiClient.GetEloByUid(long.Parse(id));

            switch (eloInfo.Result.ToLower())
            {
            case "fail" when eloInfo.Message.ToLower() == "unranked":
                return(routeMsg.ToSource(uname + "大概没有参加什么mapping赛事..所以没有数据..",
                                         true));

            case "fail":
                return(routeMsg.ToSource("未知错误..查询不到..", true));

            default:
                return(routeMsg.ToSource(
                           $"{eloInfo.User.Name},有elo点{Math.Round(eloInfo.User.Elo, 2)},当前#{eloInfo.User.Ranking}.", true));
            }
        }
Пример #14
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;
            var plugins  = DaylilyCore.Current.PluginManager.ApplicationInstances
                           .OrderByDescending(k => k.MiddlewareConfig?.Priority);
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Application plugins:");

            string prefix    = "";
            int    prevPrior = int.MinValue;

            foreach (var plugin in plugins)
            {
                string prior = "", tag = "";
                if (prevPrior != plugin.MiddlewareConfig.Priority)
                {
                    prevPrior = plugin.MiddlewareConfig.Priority;
                    prior     = $" ({prevPrior})";
                }

                if (scope.DisabledApplications.Contains(plugin))
                {
                    tag = " (已禁用)";
                }
                sb.Append(plugin.Name + prior + tag + " ➡️ ");

                if (plugin.RunInMultiThreading)
                {
                }
                else
                {
                    sb.Remove(sb.Length - 4, 4);
                    sb.Append(" ↩️");
                    sb.AppendLine();
                    prefix += "    ";
                    sb.Append(prefix);
                }
            }

            sb.Remove(sb.Length - 4, 4);
            sb.Append(" ↩️");
            sb.AppendLine();


            sb.AppendLine("Command plugins");

            return(routeMsg.ToSource(sb.ToString().Trim('\n').Trim('\r')));
        }
Пример #15
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            CabbageCommon.MessageQueue.Enqueue(routeMsg);

            bool isTaskFree = CabbageCommon.TaskQuery == null || CabbageCommon.TaskQuery.IsCanceled ||
                              CabbageCommon.TaskQuery.IsCompleted;

            if (isTaskFree)
            {
                CabbageCommon.TaskQuery = Task.Run(() => CabbageCommon.Query());
            }

            return(null);
        }
Пример #16
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;
            var domain   = GetWebsite(routeMsg);

            if (string.IsNullOrEmpty(domain))
            {
                return(routeMsg.ToSource("并不支持这个网站哦~~"));
            }

            var k      = new Api(domain);
            var result = k.PopularRecentAsync().Result;
            var post   = result?.FirstOrDefault();

            return(post == null ? null : routeMsg.ToSource(new FileImage(new Uri(post.JpegUrl))));
        }
Пример #17
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            _routeMsg = routeMsg;
            try
            {
                using (_session = new Session(1000 * (60 * 2), _routeMsg.Identity, _routeMsg.UserId))
                {
                    try
                    {
                        NavigatableNode memberMenu, voteMenu, inputQqIdScene, handleScene;
                        InitNode(out memberMenu, out voteMenu, out inputQqIdScene, out handleScene);
                        var program = new NavigatableTree(mainNode, obj =>
                        {
                            const string mainText = "· 管理员菜单:\r\n" +
                                                    " 1. 群员指令\r\n" +
                                                    " 2. 投票指令";
                            SendMessage(routeMsg.ToSource(mainText));
                            CoolQRouteMessage cmMain = SessionCondition("1", "2");
                            switch (cmMain.RawMessage)
                            {
                            case "1":
                                return(new Action(memberMenuNode));

                            default:
                                return(new Action());
                            }
                        });

                        program.Root.AddChild(memberMenu);
                        program.Root.AddChild(voteMenu);
                        memberMenu.AddChild(inputQqIdScene);
                        inputQqIdScene.AddChild(handleScene);
                        program.Run();
                    }
                    catch (TimeoutException e)
                    {
                    }
                }
            }
            catch (NotSupportedException)
            {
            }

            return(null);
        }
Пример #18
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.GroupId == "133605766")
            {
                return(null);
            }
            if (routeMsg.GroupId == null)
            {
                return(null);
            }
            if (routeMsg.ArgString.Trim() == "")
            {
                return(routeMsg.ToSource("要睡多少小时呀??", true));
            }

            double sleepTime;

            if (SleepTime > 12)
            {
                sleepTime = 12;
            }
            else if (SleepTime < 0.5)
            {
                sleepTime = 0.5;
            }
            else if (SleepTime > 0)
            {
                sleepTime = SleepTime;
            }
            else
            {
                return(routeMsg.ToSource("穿越是不可以的……", true));
            }

            DateTime dt = new DateTime();

            dt = dt.AddHours(sleepTime);
            int s = (int)(dt.Ticks / 10000000);

            CoolQHttpApiClient.SetGroupBan(routeMsg.GroupId, routeMsg.UserId, s);
            string msg = "祝你一觉睡到" + DateTime.Now.AddHours(sleepTime).ToString("HH:mm") + " :D";

            return(routeMsg.ToSource(msg, true));
        }
Пример #19
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.MessageType == MessageType.Private)
            {
                return(null);
            }
            var auth = PermissionCheckerApp.GetActualAuthority(routeMsg, out var fullCommand);

            if (fullCommand == "poweron")
            {
                bool alive = IsMeAlive(routeMsg.CoolQIdentity);
                if (alive)
                {
                    return(routeMsg.ToSource("我还活着呢,你想干什么压"));
                }
                if (auth == Authority.Public)
                {
                    return(routeMsg.ToSource("若想开机,请联系管理员使用此命令").Handle());
                }

                while (IsScanning)
                {
                    Thread.Sleep(10);
                }
                ExpireTimeCollection[routeMsg.CoolQIdentity] = null;
                ExpireTimeCollection.Remove(routeMsg.CoolQIdentity);
                SaveConfig();
                return(routeMsg.ToSource("啊,活过来了"));
            }

            if (routeMsg.RawMessage.Contains("/poweroff") || routeMsg.RawMessage.Contains("黄花菜"))
            {
                bool alive = IsMeAlive(routeMsg.CoolQIdentity);
                if (!alive)
                {
                    return(routeMsg.ToSource("黄花菜当前是关机状态哦,若想开机请联系管理员使用/poweron命令").Handle());
                }
            }

            return(IsMeAlive(routeMsg.CoolQIdentity)
                ? null
                : routeMsg.HandleAndCancel());
        }
Пример #20
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.CurrentAuthority != Authority.Root)
            {
                return(routeMsg.ToSource(DefaultReply.RootOnly, true));
            }

            _rebootInfo = new RebootInfo(DateTime.Now, routeMsg.CoolQIdentity);
            SaveSettings(_rebootInfo);
            SendMessage(routeMsg
                        .ToSource("开始重启...")
                        .ForceToSend()
                        );
            Environment.Exit(0);
            return(null);
        }
Пример #21
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;
            if (routeMsg.MessageType == MessageType.Private)
                return null;
            string groupId = routeMsg.GroupId ?? routeMsg.DiscussId;

            if (!GroupDic.ContainsKey(groupId))
                GroupDic.GetOrAdd(groupId, new GroupSettings
                {
                    GroupId = groupId,
                    routeMsg = routeMsg
                });

            var imgList = CoolQCode.GetImageInfo(routeMsg.RawMessage);
            if (imgList == null) return null;

            foreach (var item in imgList)
            {
                if (item.Extension.ToLower() == ".gif")
                    continue;
                if (item.FileInfo.Exists)
                {
                    GroupDic[groupId].PathQueue.Enqueue(item.FileInfo.FullName);
                }
                else
                {
                    var root = WebRequest.GetImageFromUrl(item.Url, item.Md5, item.Extension);
                    GroupDic[groupId].PathQueue.Enqueue(root);
                }

                _totalCount++;
            }

            if (GroupDic[groupId].Task == null || GroupDic[groupId].Task.IsCompleted ||
                GroupDic[groupId].Task.IsCanceled)
            {
                GroupDic[groupId].Task = Task.Run(() => RunDetector(GroupDic[groupId]));
                Logger.Info("[" + groupId + "] (龙图) 共 " + _totalCount);
            }

            return null;
        }
Пример #22
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            switch (routeMsg.CommandName)
            {
            case "dice":
                return(routeMsg
                       .ToSource(new Dice())
                       .ForceToSend());

            case "rps":
                return(routeMsg
                       .ToSource(new Rps())
                       .ForceToSend());

            default:
                return(null);
            }
        }
Пример #23
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (string.IsNullOrEmpty(routeMsg.FullCommand))
            {
                return(null);
            }
            string fullCmd = routeMsg.FullCommand;
            var    ca      = new CommandAnalyzer <StreamParamDivider>();

            ca.Analyze(fullCmd, routeMsg);

            if (!DaylilyCore.Current.PluginManager.ContainsPlugin(routeMsg.CommandName))
            {
                return(null);
            }

            return(null);
        }
Пример #24
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (string.IsNullOrEmpty(routeMsg.FullCommand))
            {
                return(null);
            }
            if (!CommandRate.Keys.Contains(routeMsg.CommandName))
            {
                CommandRate.TryAdd(routeMsg.CommandName, 1);
            }
            else
            {
                CommandRate[routeMsg.CommandName]++;
            }

            SaveSettings(CommandRate, "CommandRate");
            return(null);
        }
Пример #25
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.MessageType == MessageType.Private)
            {
                return(null);
            }
            var msg = routeMsg.RawMessage.ToUpper();

            bool action = msg.Contains("摸图") || msg.Contains("看图") || msg.Contains("M4M");
            bool ask    = msg.Contains("吗") || msg.Contains("么") || msg.Contains("?") || msg.Contains("?");

            bool[] matched =
            {
                msg.Contains("帮") && msg.Contains("摸"),
                msg.Contains("求摸"),
                msg.Contains("有") && action && ask,
                msg.Contains("有没有") && action,
            };

            var id = routeMsg.UserId;

            if (matched.Any(b => b) && (!Tipped.ContainsKey(id) ||
                                        Tipped.ContainsKey(id) &&
                                        Tipped[id] - DateTime.Now > new TimeSpan(7, 0, 0, 0)))
            {
                if (Tipped.ContainsKey(id))
                {
                    Tipped[id] = DateTime.Now;
                }
                else
                {
                    Tipped.TryAdd(id, DateTime.Now);
                }
                SaveSettings();
                return(routeMsg.ToSource("你是在找人帮忙摸图吗?不想无助等待,立刻向我私聊\"/m4m\"。", true));
            }

            return(null);
        }
Пример #26
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            _cm = routeMsg;
            string[] fullContent = ConcurrentFile.ReadAllLines(_content);

            if (EnabledAlbumId > 0 || DisabledAlbumId > 0)
            {
                return(_cm.CurrentAuthority == Authority.Root
                    ? ModuleManageAlbum(fullContent)
                    : routeMsg.ToSource(DefaultReply.RootOnly));
            }

            if (Like > 0)
            {
                return(ModuleLike(fullContent));
            }

            if (Hot)
            {
                return(ModuleHot());
            }

            if (Top || TopNum > 0)
            {
                return(ModuleTop());
            }

            if (ClearCache)
            {
                ClearContent();
                return(_cm
                       .ToSource("已重新建立缓存")
                       .ForceToSend());
            }

            return(ModuleSearch(fullContent));
        }
Пример #27
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (routeMsg.MessageType == MessageType.Private)
            {
                return(routeMsg.ToSource("你想怎么样。。"));
            }

            if (routeMsg.CurrentAuthority == Authority.Public)
            {
                return(routeMsg.ToSource("请你坐下,,让你的管理员来处决我"));
            }

            var time = TimeSpan.FromMinutes(ElapsingTime);

            if (time < TimeSpan.FromMinutes(1) || time > TimeSpan.FromDays(7))
            {
                return(routeMsg.ToSource("时间范围设置不对,,你故意的8,,,"));
            }

            var plugin = PluginManager.Current.GetPlugin <ShutdownWatcherApp>();

            if (plugin == null)
            {
                return(routeMsg.ToSource("操作失败了。。当前未装载相关插件"));
            }

            var newTime = DateTime.Now + time;

            while (plugin.IsScanning)
            {
                Thread.Sleep(10);
            }

            plugin.ExpireTimeCollection.Add(routeMsg.CoolQIdentity, newTime);
            plugin.SaveConfig();
            return(routeMsg.ToSource($"我自闭去了。。等我{newTime:g}回来"));
        }
Пример #28
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (!routeMsg.RawMessage.Equals("/转"))
            {
                return(null);
            }
            using (Session session = new Session(1000 * 60, routeMsg.Identity, routeMsg.UserId))
            {
                SendMessage(routeMsg.ToSource("请发送图片,5张以内,1分钟内有效。", true));
                try
                {
                    CoolQRouteMessage routeMessage = (CoolQRouteMessage)session.GetMessage();
                    var infoList = CoolQCode.GetImageInfo(routeMessage.RawMessage);
                    if (infoList == null)
                    {
                        return(routeMessage.ToSource("你发送的消息没有包含图片。"));
                    }
                    if (infoList.Length > 5)
                    {
                        return(routeMessage.ToSource("你发送的图片过多。"));
                    }

                    List <Image> imgList = infoList.Select(imgInfo => HttpClient.GetImageFromUrl(imgInfo.Url))
                                           .ToList();

                    var sendList = HandleImage(imgList);

                    return(routeMessage.ToSource(string.Join("\r\n", sendList)));
                }
                catch (TimeoutException)
                {
                    return(null);
                }
            }
        }
Пример #29
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var routeMsg = scope.RouteMessage;

            if (DisabledList.Keys.Contains((CoolQIdentity)routeMsg.Identity))
            {
                var guidList = DisabledList[(CoolQIdentity)routeMsg.Identity];
                PermissionCheckerApp.GetRequestAuthority(routeMsg.RawMessage, out var fullCommand);
                var cmdName = fullCommand?.Split(' ')[0];
                foreach (var plugin in Bot.Backend.PluginManager.Current.ApplicationInstances)
                {
                    if (!guidList.Contains(plugin.Guid))
                    {
                        continue;
                    }
                    scope.DisabledApplications.Add(plugin);
                }

                if (cmdName == null)
                {
                    return(null);
                }
                Guid?pluginGuid = Bot.Backend.PluginManager.Current.GetPlugin(cmdName)?.Guid;
                if (pluginGuid == null)
                {
                    return(null);
                }
                if (guidList.Contains(pluginGuid.Value))
                {
                    return(routeMsg.MessageType == MessageType.Private
                        ? routeMsg.ToSource("你已禁用此命令.").Handle()
                        : routeMsg.ToSource("本群已禁用此命令.").Handle());
                }
            }

            return(null);
        }
Пример #30
0
        public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope)
        {
            var rnd = StaticRandom.NextDouble();

            if (rnd >= 100f * 5 / 30000)
            {
                return(null);
            }

            var routeMsg = scope.RouteMessage;
            var apis     = _apiTimes.Where(k => k.Value < 100).Select(k => k.Key).ToArray();
            var api      = apis[StaticRandom.Next(apis.Length)];
            var response = Client.SendText(api, routeMsg.RawMessage, routeMsg.UserId, routeMsg.GroupId);

            _apiTimes[api]++;
            if (response.Intent.Code == 4003)
            {
                _apiTimes[api] = 100;
            }
            SaveConfig();
            if (response.Intent.Code != 10004)
            {
                return(null);
            }
            var result = response.Results.FirstOrDefault();

            return
                (result != null
                    ? routeMsg
                 .ToSource(result.Values.Text
                           .Replace('呢', 'e')
                           .Trim('。').Trim('?').Trim('!').Trim('~').Trim('~').Trim('?').Trim('!')
                           )
                 .RandomDelaySeconds(2, 7)
                    : null);
        }