public async Task <bool> OnMessage(HandlerArgs args) { int groupHash = args.Sender.FromGroup == 0 ? args.Sender.FromQQ.GetHashCode() : $"{args.Sender.FromGroup}".GetHashCode(); int messageHash = args.message.GetHashCode(); if (lastMessage.TryGetValue(groupHash, out GroupStatus status)) { if (status.messageHash == messageHash) { if (!status.isRepeated) { string output = new Random().NextDouble() < 0.5 ? (args.message == breakMessage ? breakMessage2 : breakMessage) : args.message; await args.Callback(output); status.messageHash = output.GetHashCode(); status.isRepeated = output == args.message; } } else { status.messageHash = messageHash; status.isRepeated = false; } } else { lastMessage.Add(groupHash, new GroupStatus { messageHash = messageHash, isRepeated = false }); } return(false); }
public async Task <bool> OnMessage(HandlerArgs args) { var message = args.message; if (message == "m" || message == "M") { if (LastCar.TryGetValue(args.Sender.FromQQ, out int lc)) { lock (sekaicars) sekaicars = sekaicars.Where(c => c.index != lc).ToList(); } return(true); } int split, car; if (IsIgnore(args.Sender)) { return(false); } if (message.Length < 5) { return(false); } for (int i = 0; i < 5; ++i) { if (!IsNumeric(message[i])) { return(false); } } split = message.Length > 5 && IsNumeric(message[5]) ? 6 : 5; if (message.Length > split && IsNumeric(message[split])) { return(false); } car = int.Parse(message.Substring(0, split)); LastCar[args.Sender.FromQQ] = car; string raw_message = car.ToString("d5") + " " + message.Substring(split); // ignore non-text messages raw_message = codereg.Replace(raw_message, _ => ""); switch (Configuration.GetConfig <CarTypeConfig>()[args.Sender.FromGroup]) { case CarType.Bandori: var ignore = CheckIgnored(car, message.Substring(split)); if (ignore != null) { if (ignore != "") { await args.Callback(ignore); } break; } JObject res = await Utils.GetHttp($"http://api.bandoristation.com/?function=submit_room_number&number={car}&source={source}&token={token}&raw_message={raw_message}&user_id={args.Sender.FromQQ}"); if (res == null) { await args.Callback($"无法连接到bandoristation.com"); } else if (res["status"].ToString() != "success") { await args.Callback($"上传车牌时发生错误: {res["response"]}"); } return(true); case CarType.Sekai: if (CheckIgnored(car, message.Substring(split)) == "") { break; } if (car == 114514 || car == 11451 || car == 19198) { break; } var caro = new Car { index = car, rawmessage = raw_message, time = DateTime.UtcNow }; lock (sekaicars) sekaicars.Add(caro); OnNewCar?.Invoke(caro); return(true); } return(false); }