Пример #1
0
        public bool TodaySignContent(MsgInformationEx MsgDTO, object[] param)
        {
            var content = GroupSignInDic.ContainsKey(MsgDTO.FromGroup) ? GroupSignInDic[MsgDTO.FromGroup].Content : "签到";

            MsgSender.PushMsg(MsgDTO, $"今日签到内容是:{content}");
            return(true);
        }
Пример #2
0
        public bool SaveHelloContent(MsgInformationEx MsgDTO, object[] param)
        {
            var content = param[0] as string;

            var query = HelloList.FirstOrDefault(h => h.GroupNum == MsgDTO.FromGroup && h.QQNum == MsgDTO.FromQQ);

            if (query == null)
            {
                var hello = new HelloRecord
                {
                    Id       = Guid.NewGuid().ToString(),
                    GroupNum = MsgDTO.FromGroup,
                    QQNum    = MsgDTO.FromQQ,
                    Content  = content
                };
                MongoService <HelloRecord> .Insert(hello);

                HelloList.Add(hello);
            }
            else
            {
                query.Content = content;
                MongoService <HelloRecord> .Update(query);
            }

            MsgSender.PushMsg(MsgDTO, "招呼内容设定成功");
            return(true);
        }
Пример #3
0
        private bool ProcessHello(MsgInformationEx MsgDTO)
        {
            var hello = HelloList.FirstOrDefault(h => h.GroupNum == MsgDTO.FromGroup && h.QQNum == MsgDTO.FromQQ);

            if (hello == null)
            {
                return(false);
            }

            var key      = $"Hello-{MsgDTO.FromGroup}-{MsgDTO.FromQQ}";
            var response = SCacheService.Get <HelloCache>(key);

            if (response != null)
            {
                return(false);
            }

            MsgSender.PushMsg(MsgDTO, hello.Content, true);
            var model = new HelloCache
            {
                GroupNum       = MsgDTO.FromGroup,
                LastUpdateTime = DateTime.Now,
                QQNum          = MsgDTO.FromQQ
            };

            SCacheService.Cache(key, model);
            return(true);
        }
Пример #4
0
        public bool MyKitchen(MsgInformationEx MsgDTO, object[] param)
        {
            var cookingRec = CookingRecord.Get(MsgDTO.FromQQ);
            var level      = CookingLevelSvc.LocationLevel(cookingRec.TotalPrice);
            var msg        = $"【{level.Name}(lv.{level.Level})】\r\n";
            var itemColle  = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var dietList   = cookingRec.LearndDietMenu.Select(diet =>
            {
                var Diet = CookingDietSvc[diet];
                if (!Diet.Flavorings.IsNullOrEmpty() && !cookingRec.CheckFlavorings(Diet.Flavorings) ||
                    !Diet.Materials.IsNullOrEmpty() && !itemColle.CheckItem(Diet.Materials))
                {
                    return($"{diet}(材料不足)");
                }

                return(diet);
            });

            msg +=
                $"已学会的菜谱:{string.Join(",", dietList)}\r\n";
            msg += $"当前持有菜肴:{string.Join(",", cookingRec.CookedDietDic.Select(p => $"{p.Key}*{p.Value}"))}\r\n";
            msg += $"当前持有调味料:{string.Join(",", cookingRec.FlavoringDic.Select(p => $"{p.Key}*{p.Value}"))}\r\n";
            msg += $"推荐学习菜谱:【{CookingDietSvc.SuggestDiet(cookingRec.LearndDietMenu)?.Name}】";

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }
Пример #5
0
        public bool Dispel(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum = (long)param[0];

            var sourcePerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);

            if (sourcePerson.Golds < 500)
            {
                MsgSender.PushMsg(MsgDTO, "驱散全部buff需要500金币,你没有足够的金币!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 500))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            OSPersonBuff.RemoveAll(qqNum);

            sourcePerson.Golds -= 500;
            sourcePerson.Update();

            MsgSender.PushMsg(MsgDTO, "驱散成功!");
            return(true);
        }
Пример #6
0
        private static bool FeedPetWithDiet(MsgInformationEx MsgDTO, PetRecord pet, CookingDietModel diet)
        {
            if (!diet.Attributes.Contains(pet.Attribute))
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}说不想吃这个东西(请喂食正确特性的菜肴)");
                return(false);
            }

            var cookingRec = CookingRecord.Get(MsgDTO.FromQQ);

            if (!cookingRec.CheckDiet(diet.Name))
            {
                MsgSender.PushMsg(MsgDTO, "你没有该菜肴!");
                return(false);
            }

            var resMsg = $"{pet.Name}兴奋的吃掉了 {diet.Name},并打了个饱嗝\r\n";

            pet.LastFeedTime = DateTime.Now;
            resMsg          += pet.ExtGain(MsgDTO, diet.Exp);
            cookingRec.DietConsume(diet.Name);
            cookingRec.Update();

            MsgSender.PushMsg(MsgDTO, resMsg);
            return(true);
        }
Пример #7
0
        public bool MyPet(MsgInformationEx MsgDTO, object[] param)
        {
            var pet = PetRecord.Get(MsgDTO.FromQQ);

            var levelModel = PetLevelSvc[pet.Level];

            var HasExtEndur = VipArmerRecord.Get(MsgDTO.FromQQ).CheckArmer("耐力护符");
            var extEndur    = HasExtEndur ? "(+10)" : string.Empty;
            var petEndur    = levelModel.Endurance - PetEnduranceRecord.Get(MsgDTO.FromQQ).ConsumeTotal + (HasExtEndur ? 10 : 0);

            var session = new MsgSession(MsgDTO);

            session.Add($"{CodeApi.Code_Image_Relational(pet.PicPath)}");
            session.Add($"名称:{pet.Name}");
            session.Add($"种族:{pet.PetNo}");
            session.Add($"食性:{pet.Attribute ?? "无"}");
            session.Add($"等级:{Utility.LevelEmoji(pet.Level)}");
            session.Add($"{Emoji.心}:{levelModel.HP}");
            session.Add($"耐力:{petEndur}/{levelModel.Endurance}{extEndur}");
            session.Add($"经验值:{pet.Exp}/{levelModel.Exp}");

            if (!pet.Skills.IsNullOrEmpty())
            {
                session.Add($"技能:{pet.Skills.Select(p => $"{p.Key}({p.Value})").JoinToString(",")}");
            }
            if (pet.RemainSkillPoints > 0)
            {
                session.Add($"可用技能点:{pet.RemainSkillPoints}");
            }

            session.Send();
            return(true);
        }
Пример #8
0
        public bool BindAi(MsgInformationEx MsgDTO, object[] param)
        {
            var groupNum = (long)param[0];
            var name     = (string)param[1];

            var setting = GroupSettingSvc[groupNum];

            if (setting == null)
            {
                MsgSender.PushMsg(MsgDTO, "错误的群号");
                return(false);
            }

            if (!BindAiSvc.AiDic.ContainsKey(name))
            {
                MsgSender.PushMsg(MsgDTO, "错误的机器人名");
                return(false);
            }

            setting.BindAis ??= new List <string>();

            if (!setting.BindAis.Contains(name))
            {
                setting.BindAis.Add(name);
            }

            setting.Update();

            MsgSender.PushMsg(MsgDTO, "绑定成功!");
            return(true);
        }
Пример #9
0
        public bool DataRefresh(MsgInformationEx MsgDTO, object[] param)
        {
            var count = DataRefreshSvc.RefreshAll();

            MsgSender.PushMsg(MsgDTO, $"刷新成功!共刷新 {count}个数据项!");
            return(true);
        }
Пример #10
0
        public bool SelfExcharge(MsgInformationEx MsgDTO, object[] param)
        {
            var days = (int)(long)param[0];

            if (days <= 0)
            {
                MsgSender.PushMsg(MsgDTO, "天数错误,请重新输入命令!");
                return(false);
            }

            var osPerson    = OSPerson.GetPerson(MsgDTO.FromQQ);
            var diamondNeed = days * 10;

            if (osPerson.Diamonds < diamondNeed)
            {
                MsgSender.PushMsg(MsgDTO, "你的钻石余额不足,请添加能天使(2731544408)为好友后,使用【转账】功能转任意金额后将会获得金额*100的钻石,可以【我的状态】命令查看余额!");
                return(false);
            }

            ChargeTime(MsgDTO, new object[] { MsgDTO.FromGroup, (long)days });
            osPerson.Diamonds -= diamondNeed;
            osPerson.Update();

            return(true);
        }
Пример #11
0
 public bool GetBoomCode(MsgInformationEx MsgDTO, object[] param)
 {
     BoomCode = Rander.RandInt(100000);
     CodeDate = DateTime.Now;
     MsgSender.PushMsg(MsgDTO, BoomCode.ToString());
     return(true);
 }
Пример #12
0
        public bool StarFortune(MsgInformationEx MsgDTO, object[] param)
        {
            var jr = new FortuneRequestor(MsgDTO, (Msg, Report) => MsgSender.PushMsg(Msg, Report));

            Task.Run(() => jr.Work());
            return(true);
        }
Пример #13
0
        public bool TarotFortune(MsgInformationEx MsgDTO, object[] param)
        {
            var fortune = RapidCacher.GetCache($"TarotFortune:{MsgDTO.FromQQ}", CommonUtil.UntilTommorow(), GetRandTarotFortune);

            SendTarotFortune(MsgDTO, fortune);
            return(true);
        }
Пример #14
0
        public bool SetSignContent(MsgInformationEx MsgDTO, object[] param)
        {
            var content = param[0] as string;

            if (content != "签到" && CrossWorldAiSvc[MsgDTO.FromGroup].AllAvailableGroupCommands.Any(comm => comm.Command == content))
            {
                MsgSender.PushMsg(MsgDTO, "不能与系统自带命令重复!");
                return(false);
            }

            if (GroupSignInDic.ContainsKey(MsgDTO.FromGroup))
            {
                var groupSignIn = GroupSignInDic[MsgDTO.FromGroup];
                groupSignIn.Content = content;
                groupSignIn.Update();
            }
            else
            {
                var groupSignIn = new SignInGroupRecord()
                {
                    GroupNum = MsgDTO.FromGroup, Content = content
                };
                MongoService <SignInGroupRecord> .Insert(groupSignIn);

                GroupSignInDic.Add(MsgDTO.FromGroup, groupSignIn);
            }
            MsgSender.PushMsg(MsgDTO, "设置成功!");
            return(true);
        }
Пример #15
0
        public bool MySegment(MsgInformationEx MsgDTO, object[] param)
        {
            var record = SegmentRecord.Get(MsgDTO.FromQQ);

            if (string.IsNullOrEmpty(record.Segment))
            {
                MsgSender.PushMsg(MsgDTO, "你尚未持有任何宝藏碎片!", true);
                return(false);
            }
            var segment = SegmentSvc.FindSegmentByName(record.Segment);

            if (segment == null)
            {
                MsgSender.PushMsg(MsgDTO, "未找到指定的宝藏碎片");
                return(false);
            }

            var treasure = SegmentSvc.FindTreasureBySegment(record.Segment);
            var session  = new MsgSession(MsgDTO);

            session.Add(segment.ToString());
            session.Add($"可开启宝藏:{treasure.Name}");

            if (record.IsRare)
            {
                session.Add("【稀有】:拼接后将得到双倍奖励!");
            }

            session.Send();
            return(true);
        }
Пример #16
0
        public bool CurrentRestrictor(MsgInformationEx MsgDTO, object[] param)
        {
            var limitDic = RestrictorSvc.BindAiLimit;

            MsgSender.PushMsg(MsgDTO, string.Join("\r\n", limitDic.Select(p => $"{p.Key}:{p.Value}")));
            return(true);
        }
Пример #17
0
        private static bool FeedPetWithItem(MsgInformationEx MsgDTO, PetRecord pet, DriftBottleItemModel item)
        {
            if (item.Attributes == null)
            {
                MsgSender.PushMsg(MsgDTO, "该物品无法投喂!");
                return(false);
            }

            if (!item.Attributes.Contains(pet.Attribute))
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}说不想吃这个东西(请喂食正确特性的物品)");
                return(false);
            }

            var honorRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ);

            if (!honorRecord.CheckItem(item.Name))
            {
                MsgSender.PushMsg(MsgDTO, "你没有该物品!", true);
                return(false);
            }

            var resMsg = $"{pet.Name}兴奋的吃掉了 {item.Name},并打了个饱嗝\r\n";

            pet.LastFeedTime = DateTime.Now;
            resMsg          += pet.ExtGain(MsgDTO, item.Exp);
            honorRecord.ItemConsume(item.Name);
            honorRecord.Update();

            MsgSender.PushMsg(MsgDTO, resMsg);
            return(true);
        }
Пример #18
0
        public bool RandomCard(MsgInformationEx MsgDTO, object[] param)
        {
            var cardName = TouhouCardSvc.RandomCard(MsgDTO.FromQQ);

            TouhouCardSvc.ShowCard(cardName, MsgDTO);
            return(true);
        }
Пример #19
0
        public bool ResetPetSkill(MsgInformationEx MsgDTO, object[] param)
        {
            const int ResetSkillCost = 100;
            var       osPerson       = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < ResetSkillCost)
            {
                MsgSender.PushMsg(MsgDTO, $"金币余额不足({osPerson.Golds.CurencyFormat()}/{ResetSkillCost.CurencyFormat()})");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, ResetSkillCost, 10))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var pet    = PetRecord.Get(MsgDTO.FromQQ);
            var expRec = ExpeditionRecord.GetLastest(MsgDTO.FromQQ);

            if (expRec != null && expRec.IsExpediting)
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}正在【{expRec.Scene}】进行一项伟大的远征,请于{expRec.EndTime:yyyy-MM-dd HH:mm:ss}后再试!");
                return(false);
            }

            pet.SkillReset();
            pet.Update();

            osPerson.Golds -= ResetSkillCost;
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, "重置成功!");
            return(true);
        }
Пример #20
0
        public bool Reborn(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];

            var key   = $"AliveState-{MsgDTO.FromGroup}-{aimQQ}";
            var cache = SCacheService.Get <AliveStateCache>(key);

            if (cache == null)
            {
                MsgSender.PushMsg(MsgDTO, "该成员不需要复活!", true);
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 100))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var osPerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);

            osPerson.Golds -= 100;
            osPerson.Update();

            SCacheService.Cache(key, cache, DateTime.Now);

            MsgSender.PushMsg(MsgDTO, $"复活成功!你当前剩余金币:{osPerson.Golds}", true);
            return(true);
        }
Пример #21
0
        public bool MyCookingHistory(MsgInformationEx MsgDTO, object[] param)
        {
            var cookingRec = CookingRecord.Get(MsgDTO.FromQQ);
            var history    = cookingRec.CookingHistory;

            if (history.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你尚未烹饪过任何东西!");
                return(false);
            }

            var sumDietCount = history.Sum(p => p.Value);
            var totalPrice   = cookingRec.TotalPrice;

            var curLevel  = CookingLevelSvc.LocationLevel(totalPrice);
            var nextLevel = CookingLevelSvc[curLevel.Level + 1];

            var msg = $"你总共烹饪过 {sumDietCount} 道菜肴\r\n" +
                      $"总共消耗了物品 {cookingRec.ItemConsumeDic.Sum(p => p.Value)} 个,调味料 {cookingRec.FlavoringTotal} 个\r\n" +
                      $"总价值:{totalPrice.CurencyFormat()}\r\n" +
                      $"当前烹饪评级为:【{curLevel.Name}(lv.{curLevel.Level})】,距离下一等级【{nextLevel.Name}({nextLevel.Level})】还差 {(nextLevel.NeedPrice - totalPrice).CurencyFormat()}";

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }
Пример #22
0
        public JumpReportRequestor(MsgInformationEx MsgDTO, Action <MsgInformationEx, string> ReportCallBack)
        {
            this.MsgDTO         = MsgDTO;
            this.ReportCallBack = ReportCallBack;

            this.MsgDTO.Msg = System.Web.HttpUtility.UrlEncode(this.MsgDTO.Msg);
        }
Пример #23
0
        public bool MyArmers_Paged(MsgInformationEx MsgDTO, object[] param)
        {
            var pageNo = (int)(long)param[0];

            var paRec = PersonArmerRecord.Get(MsgDTO.FromQQ);

            if (paRec.Armers.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你尚未拥有任何装备!", true);
                return(true);
            }

            var armerInfos     = paRec.Armers.Select(a => new { Count = a.Value, Model = ArmerSvc[a.Key] }).OrderBy(p => p.Model.Kind).ThenByDescending(p => p.Model.Price).ToList();
            var totalPageCount = (armerInfos.Count - 1) / 20 + 1;

            if (pageNo <= 0 || pageNo > totalPageCount)
            {
                MsgSender.PushMsg(MsgDTO, "页码错误!", true);
                return(false);
            }

            var showInfos = armerInfos.Skip((pageNo - 1) * 20).Take(20);
            var msg       = string.Join(", ", showInfos.Select(a => $"{a.Model.Name}*{a.Count}"));

            msg = $"该页的装备有:\r\n{msg}";
            if (armerInfos.Count > 20)
            {
                msg += $"\r\n当前显示第 {pageNo}/{totalPageCount}页,请使用 我的装备 [页码] 命令查看更多装备!";
            }
            MsgSender.PushMsg(MsgDTO, msg, true);
            return(true);
        }
Пример #24
0
        public MsgInformationEx ToEx()
        {
            var msgEx = new MsgInformationEx
            {
                Id         = Id,
                Msg        = Msg,
                RelationId = RelationId,
                Time       = Time,
                FromGroup  = FromGroup,
                FromQQ     = FromQQ,
                BindAi     = BindAi
            };

            if (msgEx.FromQQ < 0)
            {
                msgEx.FromQQ &= 0xFFFFFFFF;
            }

            var msg = msgEx.Msg;

            msgEx.FullMsg = msg;
            msgEx.Command = GenCommand(ref msg);
            msgEx.Msg     = msg;
            msgEx.Type    = msgEx.FromGroup == 0 ? MsgType.Private : MsgType.Group;

            return(msgEx);
        }
Пример #25
0
        public bool DispelOneBuff(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum    = (long)param[0];
            var buffName = param[1] as string;

            if (!OSPersonBuff.CheckBuff(qqNum, buffName))
            {
                MsgSender.PushMsg(MsgDTO, "目标身上没有指定buff!");
                return(false);
            }

            var sourcePerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);

            if (sourcePerson.Golds < 100)
            {
                MsgSender.PushMsg(MsgDTO, "驱散该buff需要100金币,你没有足够的金币!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 100))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            OSPersonBuff.Remove(qqNum, buffName);

            sourcePerson.Golds -= 100;
            sourcePerson.Update();

            MsgSender.PushMsg(MsgDTO, "驱散成功!");
            return(true);
        }
Пример #26
0
        public bool RecentFlash(MsgInformationEx MsgDTO, object[] param)
        {
            var picUrl = PicCacher.Random();

            MsgSender.PushMsg(MsgDTO, CodeApi.Code_Flash_Relational(picUrl));
            return(true);
        }
Пример #27
0
        public override bool OnMsgReceived(MsgInformationEx MsgDTO)
        {
            if (base.OnMsgReceived(MsgDTO))
            {
                return(true);
            }

            if (MsgDTO.Type == MsgType.Private)
            {
                return(false);
            }

            var result = ProcessHello(MsgDTO);

            result |= ProcessMultiMediaHello(MsgDTO);

            if (result)
            {
                AIAnalyzer.AddCommandCount(new CmdRec()
                {
                    FunctionalAi = AIName,
                    Command      = "HelloOverride",
                    GroupNum     = MsgDTO.FromGroup,
                    BindAi       = MsgDTO.BindAi
                });
            }

            return(false);
        }
Пример #28
0
        public bool MyTreasureRecord(MsgInformationEx MsgDTO, object[] param)
        {
            var record = SegmentRecord.Get(MsgDTO.FromQQ);

            if (record.TreasureRecord.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你还没有开启过任何宝藏!");
                return(false);
            }

            var session = new MsgSession(MsgDTO);

            session.Add(record.TreasureRecord.Select(p => $"{p.Key}:{p.Value}次").ToList());
            session.Add($"总计:{record.TreasureRecord.Sum(p => p.Value)}次");

            var finalMsg = $"终极宝藏:{record.FinalTreasureCount}次";

            if (record.CanOpenFinalTreasure)
            {
                finalMsg += $"(还可开启{record.TreasureRecord.Values.Min() - record.FinalTreasureCount}次)";
            }
            session.Add(finalMsg);

            session.Send();
            return(true);
        }
Пример #29
0
        private bool ProcessMultiMediaHello(MsgInformationEx MsgDTO)
        {
            var hello = MultiMediaHelloList.FirstOrDefault(p => p.QQNum == MsgDTO.FromQQ);

            if (hello == null)
            {
                return(false);
            }

            var key      = $"MultiMediaHello-{MsgDTO.FromGroup}-{MsgDTO.FromQQ}";
            var response = SCacheService.Get <MultiMediaCache>(key);

            if (response != null)
            {
                return(false);
            }

            SendMultiMediaHello(MsgDTO, hello);
            var model = new MultiMediaCache
            {
                QQNum    = MsgDTO.FromQQ,
                RecordID = hello.Name
            };

            SCacheService.Cache(key, model);
            return(true);
        }
Пример #30
0
        public bool Sell(MsgInformationEx MsgDTO, object[] param)
        {
            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "快晴"))
            {
                MsgSender.PushMsg(MsgDTO, "你无法进行该操作!(快晴)");
                return(false);
            }

            var name = param[0] as string;

            var item = HonorSvc.FindItem(name);

            if (item != null)
            {
                return(SellItem(MsgDTO, item));
            }

            if (HonorSvc.FindHonor(name) != null)
            {
                return(SellHonor(MsgDTO, name));
            }

            MsgSender.PushMsg(MsgDTO, "未查找到相关物品或成就!");
            return(false);
        }