diff --git a/README.md b/README.md index 5aed79f..6865ded 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,45 @@ -## AlwaysWin-ntsmhf Bookmarklet +# AlwaysWin-ntsmhf Tampermonkey + +To load the Tampermonkey script: +* Install the [Tampermonkey Chrome Extension] (https://www.tampermonkey.net/) +* Click on the Extension and select **Create a new script...** +* Copy the contents of [tampermonkey.js](tampermonkey.js) into the editor and save the changes +* Modify the *countiesToWin[]* array to contain the countyId's you wish to win the bid on. + +## Wishlist / Todo + [] Bidcap for any row + [x] Save settings to local storage + [x] Retrieve settings from local storage + [x] Inject div + [] start/stop buttons + [x] How often should the status check be performed? + [x] randomize refresh value to avoid detection + [] show rowAction1 array //AlwaysWin + [] show rowAction2 array //AlwaysTie + [] show rowAction3 array //WatchTie + [] PriceChangeOverTime Chart + [] For each countyRow inject + [] "rowAction" dropdown with options: + 0 - Ignore + 1 - Ensure I am highest bidder + 2 - Make sure I am Tied + 3 - Only watch tied bid + [] save to analytics checkbox + [] county bidcap + [] Option to sell leads that don't fit your criteria but you can't return on the secondary market. + [] Store tie values for statistical analysis over time. + + + +# AlwaysWin-ntsmhf Bookmarklet - Original route (probably abandoning) + Version: 0.1 To load the bookmark go to the [AlwaysWin-ntsmhf Bookmarklet site](https://info.qhrei.com/temp/alwayswin-ntsmhf/index.htm) -Drag & drop the above link into your bookmarks to save it. +Drag & drop the above link into your bookmarks to save it. Compiled JavaScript thanks to [Google's Closure Compiler](https://closure-compiler.appspot.com/home) + + + diff --git a/tampermonkey.js b/tampermonkey.js new file mode 100644 index 0000000..8dea7cc --- /dev/null +++ b/tampermonkey.js @@ -0,0 +1,224 @@ +// ==UserScript== +// @name AlwaysWin -ntsmhf +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description Make sure you are positioned where you want to be in the bidding for each county. +// @author Steven Allen +// @match https://leads.needtosellmyhousefast.com/app +// @require https://code.jquery.com/jquery-3.7.1.min.js +// @icon https://www.google.com/s2/favicons?sz=64&domain=needtosellmyhousefast.com +// @grant none +// ==/UserScript== + +'use strict'; +//Load our settings +//localStorage.removeItem('alwayswin_settings'); + +console.log("Loading settings"); +var alwaysWinSettingsString = localStorage.getItem('alwayswin_settings'); +//console.log(alwaysWinSettingsString); + +if(alwaysWinSettingsString == null || alwaysWinSettingsString == undefined) { + const defaultSettings = {"isReloadEnabled":true, "minSecondsBetweenReloads": 60, "maxSecondsBetweenReloads":300}; + const defaultSettingsString = JSON.stringify(defaultSettings); + localStorage.setItem('alwayswin_settings',defaultSettingsString); + alwaysWinSettingsString = defaultSettingsString; +} + +var alwaysWinSettings = JSON.parse(alwaysWinSettingsString); +console.log(alwaysWinSettings); + +//////////// +// Div injection and auto reload functions +//////////// +function getRandomNumberBetween(min, max) { + min = Number(min); + max = Number(max); + return Math.floor(Math.random() * (max - min) + min); +} + +function getCheckedValue() { + if(reloadIsEnabled()) { + return "checked"; + } + return; +} + +function addAlwaysWinStyle(css) { + var head, style; + head = document.getElementsByTagName('head')[0]; + if (!head) { return; } + style = document.createElement('style'); + style.type = 'text/css'; + style.innerHTML = css; + head.appendChild(style); +} + +function saveSettings() { + let isReloadEnabledValue = document.querySelector("[name='isReloadEnabled']").checked; + let minSecondsBetweenReloadsValue = document.querySelector("[name='minSecondsBetweenReloads']").value; + let maxSecondsBetweenReloadsValue = document.querySelector("[name='maxSecondsBetweenReloads']").value; + + const latestSettings = { + "isReloadEnabled": isReloadEnabledValue, + "minSecondsBetweenReloads": minSecondsBetweenReloadsValue, + "maxSecondsBetweenReloads": maxSecondsBetweenReloadsValue + }; + const latestSettingsString = JSON.stringify(latestSettings); + localStorage.setItem('alwayswin_settings',latestSettingsString); + + alwaysWinSettingsString = latestSettings; + + return latestSettings; +} + +function reload() { + console.log("Saving settings..."); + let alwaysWinSettings = saveSettings(); + + console.log("Its time to perform a reload."); + console.log("isEnabled: "+ alwaysWinSettings.isReloadEnabled); + console.log("secondsBetweenReloads:"+ alwaysWinSettings.minSecondsBetweenReloads +" - "+ alwaysWinSettings.maxSecondsBetweenReloads); + if(!reloadIsEnabled() ) { + console.log("Reload is not enabled"); + return; + } + console.log("Reload is enabled. Reloading..."); + location.reload(); +} + +function reloadIsEnabled(){ + var checkedValue = alwaysWinSettings.isReloadEnabled ?? false;// document.querySelector("[name='isReloadEnabled']").checked; + if(checkedValue == true) { + return true; + } + return false; +} + +//////////////////////////////////////////////////////////////////////////////////// +// Always win code to find and take the highest/tie bid +//////////////////////////////////////////////////////////////////////////////////// +function getCountyInfo(countyId){ + //