public bool TodaySignContent(MsgInformationEx MsgDTO, object[] param) { var content = GroupSignInDic.ContainsKey(MsgDTO.FromGroup) ? GroupSignInDic[MsgDTO.FromGroup].Content : "签到"; MsgSender.PushMsg(MsgDTO, $"今日签到内容是:{content}"); return(true); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public bool DataRefresh(MsgInformationEx MsgDTO, object[] param) { var count = DataRefreshSvc.RefreshAll(); MsgSender.PushMsg(MsgDTO, $"刷新成功!共刷新 {count}个数据项!"); return(true); }
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); }
public bool GetBoomCode(MsgInformationEx MsgDTO, object[] param) { BoomCode = Rander.RandInt(100000); CodeDate = DateTime.Now; MsgSender.PushMsg(MsgDTO, BoomCode.ToString()); return(true); }
public bool StarFortune(MsgInformationEx MsgDTO, object[] param) { var jr = new FortuneRequestor(MsgDTO, (Msg, Report) => MsgSender.PushMsg(Msg, Report)); Task.Run(() => jr.Work()); return(true); }
public bool TarotFortune(MsgInformationEx MsgDTO, object[] param) { var fortune = RapidCacher.GetCache($"TarotFortune:{MsgDTO.FromQQ}", CommonUtil.UntilTommorow(), GetRandTarotFortune); SendTarotFortune(MsgDTO, fortune); return(true); }
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); }
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); }
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); }
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); }
public bool RandomCard(MsgInformationEx MsgDTO, object[] param) { var cardName = TouhouCardSvc.RandomCard(MsgDTO.FromQQ); TouhouCardSvc.ShowCard(cardName, MsgDTO); return(true); }
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); }
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); }
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); }
public JumpReportRequestor(MsgInformationEx MsgDTO, Action <MsgInformationEx, string> ReportCallBack) { this.MsgDTO = MsgDTO; this.ReportCallBack = ReportCallBack; this.MsgDTO.Msg = System.Web.HttpUtility.UrlEncode(this.MsgDTO.Msg); }
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); }
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); }
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); }
public bool RecentFlash(MsgInformationEx MsgDTO, object[] param) { var picUrl = PicCacher.Random(); MsgSender.PushMsg(MsgDTO, CodeApi.Code_Flash_Relational(picUrl)); return(true); }
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); }
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); }
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); }
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); }