public TradeChatBot(List <Thread> rivenQueueWorkers, IRivenParser rivenCropper, CancellationToken cancellationToken, string launcherPath, IMouse mouse, IKeyboard keyboard, IScreenStateHandler screenStateHandler) { _rivenQueueWorkers = rivenQueueWorkers; _rivenCropper = rivenCropper; _cancellationToken = cancellationToken; _launcherPath = launcherPath; _mouse = mouse; _keyboard = keyboard; _screenStateHandler = screenStateHandler; }
public ChatWatcher(IDataSender dataSender, IChatParser chatParser, IGameCapture gameCapture, IMouseMover mouseMover, IRivenCleaner rivenCleaner, IRivenParser rivenParser, IScreenStateHandler screenStateHandler) { this._dataSender = dataSender; this._chatParser = chatParser; this._gameCapture = gameCapture; this._mouseMover = mouseMover; this._rivenCleaner = rivenCleaner; this._rivenParser = rivenParser; this._screenStateHandler = screenStateHandler; Console.SetWindowSize(1, 1); Console.SetBufferSize(147, 10); Console.SetWindowSize(147, 9); Console.CursorVisible = false; Console.Clear(); UpdateUI(); }
private bool ProcessChatMessageLineResult(IRivenParser cropper, BaseLineParseResult line) { var clr = line as ChatMessageLineResult; if (_messageCacheDetails.ContainsKey(clr.Username + clr.EnhancedMessage)) { Log($"Message cache hit for {clr.Username + clr.EnhancedMessage}"); var cachedModel = _messageCacheDetails[clr.Username + clr.EnhancedMessage]; var duplicateModel = new ChatMessageModel() { Timestamp = clr.Timestamp, SystemTimestamp = DateTimeOffset.UtcNow, Author = cachedModel.Author, EnhancedMessage = cachedModel.EnhancedMessage, Raw = line.RawMessage, Rivens = cachedModel.Rivens }; _dataSender.AsyncSendChatMessage(duplicateModel); return(true); } var chatMessage = MakeChatModel(line as LineParseResult.ChatMessageLineResult); if (chatMessage.DEBUGREASON != null && chatMessage.DEBUGREASON.Length > 0) { return(false); } if (clr.ClickPoints.Count == 0) { _dataSender.AsyncSendChatMessage(chatMessage); } else { var rivenParseDetails = new List <RivenParseTaskWorkItemDetail>(); foreach (var clickpoint in clr.ClickPoints) { //Click riven _mouse.MoveTo(clickpoint.X, clickpoint.Y); Thread.Sleep(17); _mouse.Click(clickpoint.X, clickpoint.Y); Thread.Sleep(17); _mouse.MoveTo(0, 0); Thread.Sleep(17); //Wait for riven to open Bitmap crop = null; var foundRivenWindow = false; for (int tries = 0; tries < 15; tries++) { using (var b = _gameCapture.GetFullImage()) { if (_screenStateHandler.GetScreenState(b) == ScreenState.RivenWindow) { foundRivenWindow = true; crop = cropper.CropToRiven(b); _mouse.Click(3816, 2013); Thread.Sleep(17); _mouse.MoveTo(0, 0); Thread.Sleep(17); break; } } } //If something went wrong clear this item from caches so it may be tried again if (!foundRivenWindow || crop == null) { _chatParser.InvalidCache(line.GetKey()); if (crop != null) { crop.Dispose(); } return(false); } //The above click in the bottom right should have closed what ever window we opened. //Give it time to animate but in the event it failed to close try clicking again. for (int tries = 0; tries < 15; tries++) { using (var b = _gameCapture.GetFullImage()) { var subState = _screenStateHandler.GetScreenState(b); if (_screenStateHandler.IsChatOpen(b)) { break; } else if (tries < 14 && subState == ScreenState.RivenWindow) { Thread.Sleep(17); } else if (tries >= 14 && _screenStateHandler.IsExitable(b)) { _mouse.Click(3816, 2013); Thread.Sleep(40); _mouse.MoveTo(0, 0); Thread.Sleep(40); } } } rivenParseDetails.Add(new RivenParseTaskWorkItemDetail() { RivenIndex = clickpoint.Index, RivenName = clickpoint.RivenName, CroppedRivenBitmap = crop }); } _rivenWorkQueue.Enqueue(new RivenParseTaskWorkItem() { Message = chatMessage, RivenWorkDetails = rivenParseDetails }); } return(true); }