├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .github
├── FUNDING.yml
└── ISSUE_TEMPLATE
│ └── bug_report.md
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── LICENSE.md
├── README.md
├── config
├── README.md
├── config.json
└── example.env
├── logs
└── README.md
├── package-lock.json
├── package.json
├── server
├── index.html
└── index.js
└── src
├── item.js
├── main.js
├── store.js
├── stores
├── amazon.js
├── antonline.js
├── argos.js
├── bestbuy.js
├── currys.js
├── ebuyer.js
├── gamestop.js
├── microcenter.js
├── newegg.js
├── target.js
├── tesco.js
└── walmart.js
└── utils
├── fetch.js
├── interval-value.js
├── log.js
└── notification
├── alerts.js
├── desktop.js
├── email.js
├── sms-aws.js
├── sms-email.js
├── sms-twilio.js
└── webhook.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = tab
6 | indent_size = 4
7 | trim_trailing_whitespace = true
8 |
9 | [*.md]
10 | trim_trailing_whitespace = false
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | # Ignore this files and folders when using ESLint
2 | .github/
3 | logs/
4 | node_modules/
5 | package-lock.json
6 | README.md
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es2021": true,
5 | "node": true
6 | },
7 | "extends": ["eslint:recommended", "plugin:prettier/recommended"],
8 | "plugins": ["prettier", "unicorn"],
9 | "parserOptions": {
10 | "ecmaVersion": 12,
11 | "sourceType": "module"
12 | },
13 | "rules": {
14 | "prettier/prettier": [
15 | "error",
16 | {},
17 | {
18 | "usePrettierrc": true,
19 | "endOfLine": "auto",
20 | }
21 | ],
22 | "no-multiple-empty-lines": ["error", { "max": 3, "maxEOF": 1, "maxBOF": 1 }], // Doesn't work. Overridden by Prettier
23 | "no-nested-ternary": "off", // Off to avoid conflicting with unicorn
24 | "no-unused-vars": "warn",
25 | "unicorn/better-regex": "error",
26 | "unicorn/catch-error-name": "error",
27 | "unicorn/consistent-destructuring": "error",
28 | "unicorn/error-message": "error",
29 | "unicorn/filename-case": "error",
30 | "unicorn/no-array-for-each": "error",
31 | "unicorn/no-array-push-push": "error",
32 | "unicorn/no-console-spaces": "error",
33 | "unicorn/no-for-loop": "error",
34 | "unicorn/no-instanceof-array": "error",
35 | "unicorn/no-keyword-prefix": "off",
36 | "unicorn/no-lonely-if": "error",
37 | "unicorn/no-new-array": "error",
38 | "unicorn/no-new-buffer": "error",
39 | "unicorn/no-null": "error",
40 | "unicorn/no-object-as-default-parameter": "error",
41 | "unicorn/no-process-exit": "error",
42 | "unicorn/no-this-assignment": "error",
43 | "unicorn/no-unsafe-regex": "off",
44 | "unicorn/no-zero-fractions": "error",
45 | "unicorn/prefer-array-find": "error",
46 | "unicorn/prefer-array-flat-map": "error",
47 | "unicorn/prefer-array-index-of": "error",
48 | "unicorn/prefer-array-some": "error",
49 | "unicorn/prefer-date-now": "error",
50 | "unicorn/prefer-default-parameters": "error",
51 | "unicorn/prefer-dom-node-append": "error",
52 | "unicorn/prefer-dom-node-dataset": "error",
53 | "unicorn/prefer-dom-node-remove": "error",
54 | "unicorn/prefer-dom-node-text-content": "error",
55 | "unicorn/prefer-includes": "error",
56 | "unicorn/prefer-negative-index": "error",
57 | "unicorn/prefer-optional-catch-binding": "error",
58 | "unicorn/prefer-regexp-test": "error",
59 | "unicorn/prefer-set-has": "error",
60 | "unicorn/prefer-string-slice": "error",
61 | "unicorn/prefer-string-starts-ends-with": "error",
62 | "unicorn/prefer-string-trim-start-end": "error",
63 | "unicorn/prefer-ternary": "off",
64 | "unicorn/prefer-type-error": "error",
65 | "unicorn/throw-new-error": "error",
66 | "unicorn/prevent-abbreviations": "error"
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [Prince25]
2 | custom: ['https://www.buymeacoffee.com/PrinceSingh', 'https://www.paypal.com/donate/?business=3Y9NEYR4TURT8&item_name=Making+software+and+hacking+the+world%21+%E2%99%A5¤cy_code=USD']
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a bug report to help me improve the bot
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **Logs and Screenshots**
14 | Please upload any related logs from the `logs` folder.
15 | If available, upload the html file related to the bug from the `log` folder.
16 | If applicable, upload `config.json` from the `config` folder.
17 | If applicable, add screenshot of the console to help explain your problem.
18 |
19 | **Platform Information**
20 | - OS: [e.g. Windows 10]
21 | - Node version `node -v`: [e.g. v14.15.2]
22 |
23 | **Additional context**
24 | Add any other context about the problem here.
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | # config/config.json
14 | config/proxies.txt
15 | pids
16 | *.pid
17 | *.seed
18 | *.pid.lock
19 | .DS_Store
20 |
21 | # Directory for instrumented libs generated by jscoverage/JSCover
22 | lib-cov
23 |
24 | # Coverage directory used by tools like istanbul
25 | coverage
26 | *.lcov
27 |
28 | # nyc test coverage
29 | .nyc_output
30 |
31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
32 | .grunt
33 |
34 | # Bower dependency directory (https://bower.io/)
35 | bower_components
36 |
37 | # node-waf configuration
38 | .lock-wscript
39 |
40 | # Compiled binary addons (https://nodejs.org/api/addons.html)
41 | build/Release
42 |
43 | # Dependency directories
44 | node_modules/
45 | jspm_packages/
46 |
47 | # TypeScript v1 declaration files
48 | typings/
49 |
50 | # TypeScript cache
51 | *.tsbuildinfo
52 |
53 | # Optional npm cache directory
54 | .npm
55 |
56 | # Optional eslint cache
57 | .eslintcache
58 |
59 | # Microbundle cache
60 | .rpt2_cache/
61 | .rts2_cache_cjs/
62 | .rts2_cache_es/
63 | .rts2_cache_umd/
64 |
65 | # Optional REPL history
66 | .node_repl_history
67 |
68 | # Output of 'npm pack'
69 | *.tgz
70 |
71 | # Yarn Integrity file
72 | .yarn-integrity
73 |
74 | # dotenv environment variables file
75 | config/.env
76 | .env
77 | .env.test
78 |
79 | # parcel-bundler cache (https://parceljs.org/)
80 | .cache
81 |
82 | # Next.js build output
83 | .next
84 |
85 | # Nuxt.js build / generate output
86 | .nuxt
87 | dist
88 |
89 | # Gatsby files
90 | .cache/
91 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
92 | # https://nextjs.org/blog/next-9-1#public-directory-support
93 | # public
94 |
95 | # vuepress build output
96 | .vuepress/dist
97 |
98 | # Serverless directories
99 | .serverless/
100 |
101 | # FuseBox cache
102 | .fusebox/
103 |
104 | # DynamoDB Local files
105 | .dynamodb/
106 |
107 | # TernJS port file
108 | .tern-port
109 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Ignore this files and folders when using Prettier
2 | .github/
3 | logs/
4 | node_modules/
5 | package-lock.json
6 | README.md
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "es5",
3 | "bracketSpacing": true,
4 | "useTabs": true,
5 | "tabWidth": 4,
6 | "printWidth": 100
7 | }
8 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Prabhjot Singh
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Urgent: Developers Wanted!
2 | Since I've been working multiple part-time jobs, I haven't had time to maintain or add new features. That is why I'm looking for developers who would like to volunteer to contribute to this project. Whether you're a JavaScript expert or you're intrigued by the idea of programming, please contact me on Discord `Prince#0584` or email `prince112592@yahoo.com`.
3 |
4 |
5 | # StockAlertBot
6 | Faced with the scenario of scalpers using bots to hog up all the inventory of popular holiday toys and sell them at ridiculously high markup prices, I decided to put up a fight so we can get our hands on things we ~~want~~ need to survive the #Coronavirus quarantine(s).
7 | ###### Of course, this is only half the battle. For full writeup on scoring items, look [here](https://github.com/Prince25/StockAlertBot/wiki/Beating-Scalpers).
8 |
9 |
10 | Donate, buy me a Pizza or PayPal me if you'd like to see this project expanded and support me. :)
11 |
12 |
13 |
14 |
15 |
16 | ### How does it work?
17 | Enter links of the products you want tracked and how often you want the program to monitor them. When an item becomes available, you will be alerted through variety of notifications.
18 |
19 |
20 | ### Features
21 | * Add links and change settings **easily** through a browser page
22 | * Complete control over check intervals
23 | * Ability to freely set monitor frequency, **no limits**
24 | * Ability to space out checks if multiple items per store
25 | * Ability to override default interval and define frequency for each store
26 | * Proxy Support
27 | * Automatically opens a product's URL upon restock
28 | * Notifications
29 | * Desktop
30 | * Email
31 | * SMS / Text
32 | * Terminal
33 | * Webhooks: Discord, IFTTT, and Slack
34 |
35 |
36 | ### What stores/websites are supported?
37 | Currently, the following stores are supported:
38 | * AntOnline
39 | * Amazon, with ability to track stock by a particular merchant
40 | * Argos (UK. Does not currently work with proxies)\
41 | For PS5, use the following links. Disc: `https://www.argos.co.uk/product/8349000`, Digital: `https://www.argos.co.uk/product/8349024`
42 | * Best Buy, including open-box and packages (Does not currently work with proxies)
43 | * Currys (UK)
44 | * Ebuyer (UK)
45 | * Gamestop (Does not currently work with proxies)
46 | * Microcenter
47 | * Newegg, including combo deals
48 | * Target, including local stock
49 | * Tesco (UK. Does not currently work with proxies)
50 | * Walmart (No third party sellers)
51 |
52 |
53 |
54 |
55 |
56 |
57 | ## Prerequisites
58 | 0. A Terminal: ([cmd](https://en.wikipedia.org/wiki/Cmd.exe) (Windows), [Terminal](https://en.wikipedia.org/wiki/Terminal_(macOS)) (macOS), or [Console](https://en.wikipedia.org/wiki/Linux_console) (Linux))
59 | 1. Install [Node.js](https://nodejs.org/en/), either LTS or Current.
60 | 2. Clone or [download](https://github.com/Prince25/StockAlertBot/archive/main.zip) this repository
61 | `git clone https://github.com/Prince25/StockAlertBot.git`
62 | 3. Go to root directory
63 | `cd StockAlertBot`
64 | 4. Install npm packages via a terminal
65 | `npm install`
66 |
67 |
68 |
69 | ## Usage
70 | There are only two steps to use this program: 1) enter information and 2) launch the program.
71 |
72 | 1. You can now enter information using two ways: via a browser (recommended) or a text editor.
73 | #### Via Browser
74 |
75 | Expand
76 |
77 | 1. At the root directory, run on the terminal:
78 | `npm run settings`\
79 | A browser window should open up. If it doesn't and the console says `Server started!`, go to: `http://localhost:3250/` in your browser.
80 | 2. Enter the links of the items you want to track in the URLs tab.
81 | 3. Go to Settings tab and change to your heart's content.
82 | - Set how often you want to check the stores for given URLs and how much to space out the checks between items. It's not recommended to set it to 0 as you may be flagged as a bot. If you have 3 items (call them A, B, C) for Amazon and 2 items for Walmart (call them D, E) at 10 second interval spaced out at 2 seconds, for example, Items A and D will be checked first. 2 seconds later, items B and E will be checked. 2 seconds later, item C will be checked. The checks will start again in 8 seconds for Walmart and 10 seconds for Amazon.
83 | - If you want to use Proxies, turn it on and create a file called `proxies.txt` in the `config` folder and fill it with one proxy per line. See [proxies](#Proxies).
84 | - If you have Amazon link(s), you will see an option to pick a region. Select a region if you want to only monitor items sold by Amazon and not third party sellers. If you want to use a particular seller or if your region is not in the list, select `Custom` and provide the merchant ID. See [Feedback and Support](#Feedback-and-Support) if you'd like to request a region.
85 | - If you have Target link(s), you will see additional options to put zip code and API Key. Only change the key if you get API key errors. Refer to the instructions in the following [section](#Via-Text-Editor).
86 | 4. Configure notification options in Optional tab.
87 | - If you want notifications sent to [Discord](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks), [IFTTT](https://maker.ifttt.com/), or [Slack](https://api.slack.com/messaging/webhooks), expand WEBHOOKS and enter the webhook URL(s) there.
88 | - If you want notification sent via SMS/Text, expand SMS and choose a method: Amazon Web Services, Email, or Twilio. See [SMS](#SMS).
89 | - If you want notifications sent to Email, turn on email and enter your service provider information. Some providers (Yahoo, AOL, AT&T) cause problems. Refer to this [section](#Email).
90 | 5. Once you're happy with the settings, click `Save Settings`.\
91 | `config.json` and `.env` files in the `config` directory should now reflect your settings.\
92 | You can use `CTRL + C` or `CMD + C` to stop the program.
93 |
94 |
95 |
96 | #### Via Text Editor
97 |
98 | Expand
99 |
100 | Open and edit `config.json` in the `config` directory
101 | 1. Add urls of products in the `URLS` array
102 | 2. Change the `INTERVAL` to suit your desires.\
103 | You can override this default interval for any store by changing `STORE_INTERVALS` in the following manner:\
104 | `
105 | "STORE_INTERVALS": {
106 | "newegg": {
107 | "unit": "seconds",
108 | "value": 10
109 | }
110 | },
111 | `\
112 | **WARNING:** Having the interval too low might have negative consquences such as this program being detected as a bot or blocking your IP from accessing the website entirely. See [proxies](#Proxies). Setting `TIME_BETWEEN_CHECKS` might help prevent this. See step 3a from the other [method](#Via-Browser) for a detailed explanation and an example.
113 | 3. Set `OPEN_URL` to false if you don't want the application to automatically open urls when item is in stock
114 | 4. Set `DESKTOP` to false if you want to disable desktop and audible warnings
115 | 5. Optional Settings.
116 | 1. **If** you're planning to track Amazon item(s), you can also set a merchant ID in `AMAZON_MERCHANT_ID` to only get prices from a ceratin merchant. The other [method](#Via-Browser) allows you to select pre-configured IDs items only sold by Amazon depending on the region.
117 | 2. **If** you're planning to track Target item(s), enter your zip code in `TARGET_ZIP_CODE`.\
118 | **NOTE:** If you encounter an error relating to API Key, you need to get this key yourself:
119 | 1. Go to target.com with the DevTools (Chrome) or Developer Tools (Firefox) open (Google or ask if you're unsure how)
120 | 2. On the console, you should see GET requests as you load the page.\
121 | In DevTools, you have to click the gear and check "Log XMLHttpRequests" to see them
122 | 3. Click on any of the urls that has the string "key=" and copy the whole key
123 | 4. Paste it to `TARGET_KEY`
124 | 3. **If** you want to send alerts to webhook URL(s) like [Discord](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks), [IFTTT](https://ifttt.com/maker_webhooks/), or [Slack](https://api.slack.com/messaging/webhooks), add them to `WEBHOOK_URLS` array.
125 | 4. **If** you want to use Proxies, change `PROXIES` to `true` and create a file called `proxies.txt` in the `config` directory and fill it with one proxy per line. See [proxies](#Proxies).
126 | 5. **If** you want to send alerts to email, change `EMAIL` to `true`. Make a copy of `example.env` in the `config` directory and rename it to `.env`. Inside `.env`, type out one of the service providers (`EMAIL_SERVICE`) listed in [Email](#Email), your email (`EMAIL_FROM`) and password (`EMAIL_PASS`) and the email you want alerts sent to (`EMAIL_TO`). All without quotes.
127 | 6. **If** you want to send alerts to SMS, change `SMS_METHOD` to either "Email", "Amazon Web Services", or "Twilio". Then change the associated values in `.env`. See [SMS](#SMS).
128 |
129 |
130 |
131 | 2. Execute and continue about your day:
132 | `npm start` OR `node --experimental-modules main.js`\
133 | You can use `CTRL + C` or `CMD + C` to stop the program.
134 |
135 | 3. Consider [donating](https://www.paypal.com/donate?business=3Y9NEYR4TURT8&item_name=Making+software+and+hacking+the+world%21+%E2%99%A5¤cy_code=USD) or buying me a [Pizza](https://buymeacoff.ee/PrinceSingh) or [PayPal](https://paypal.me/PrinceSingh25) me :smile:
136 |
137 |
138 |
139 | ### Email
140 |
141 | Expand for important information
142 |
143 | Supported email providers:
144 | ```
145 | Gmail, Yahoo, iCloud, Hotmail, Outlook365, QQ, 126, 163, 1und1, AOL, DebugMail, DynectEmail,
146 | FastMail, GandiMail, Godaddy, GodaddyAsia, GodaddyEurope, hot.ee, mail.ee, Mail.ru, Maildev, Mailgun, Mailjet,
147 | Mailosaur, Mandrill, Naver, OpenMailBox, Postmark, QQex, SendCloud, SendGrid, SendinBlue, SendPulse, SES,
148 | SES-US-EAST-1, SES-US-WEST-2, SES-EU-WEST-1, Sparkpost, Yandex, Zoho, qiye.aliyun
149 | ```
150 |
151 | **NOTE:** If you receive the error: `535 5.7.0 (#AUTH005) Too many bad auth attempts`, most likely you are using Yahoo for the email server or an email server managed by Yahoo, such as AOL or AT&T. Yahoo has implemented an option that by default, does not let 3rd party products access the email servers. To resolve, go to https://login.yahoo.com/account/security and then enable the option to allow apps that use less secure sign in. Use the password generated by "Generate app password". If you are using AOL, do the same thing, from https://login.aol.com/account/security.
152 |
153 |
154 |
155 | ### SMS
156 |
157 | Expand for important information
158 |
159 | SMS / Text support is available via Amazon Web Services, Email, or Twilio. This, however, requires some setup on your part. Read below regarding setup for each method:
160 |
161 | - **[Amazon Web Services](https://aws.amazon.com/sns)**\
162 | First, read pricing information [here](https://aws.amazon.com/sns/faqs/#SMS_pricing). First 100 SMS are free for each month as long as you send them to a United States destination. For this method, you will need:
163 | - Region
164 | - Access Key
165 | - Secret Access Key
166 | - Phone Number
167 |
168 | Region is Amazon server you want to send from. It's probably best to choose one closest to you. More information [here](https://docs.aws.amazon.com/sns/latest/dg/sns-supported-regions-countries.html).\
169 | Access Key and Secret Access Key can be obtained following instructions in this [tutorial](https://medium.com/codephilics/how-to-send-a-sms-using-amazon-simple-notification-service-sns-46208d82abcc).\
170 | Phone number is the number to send SMS to. You will need to include country code and area code. Country code information can be found [here](https://countrycode.org/).
171 |
172 | - **Email**\
173 | **FREE** but limited. Uses email to send text via phone carrier's [SMS gateway](https://en.wikipedia.org/wiki/SMS_gateway#Email_clients). Mostly the same setup as [Email](#Email).\
174 | Currently supported carriers: Alltel, AT&T, Boost Mobil, Cricket Wireless, EE, FirstNet, Google Project Fi, MetroPCS, O2, Republic Wireless, Sprint, Straight Talk, T-Mobile, Ting, U.S. Cellular, Verizon Wireless, Virgin Mobile, Vodafone.\
175 | If you'd like to request a carrier, please refer to [Feedback and Support](#Feedback-and-Support) and provide your carrier's SMS gateway if possible.
176 |
177 | - **[Twilio](https://www.twilio.com/sms)**\
178 | First, read pricing information [here](https://www.twilio.com/sms/pricing). You get some free starting balance with which you can buy a Twilio phone number. For this method, you will need:
179 | - Twilio Account SID
180 | - Twilio Auth Token
181 | - Twilio Phone Number
182 | - Phone Number
183 |
184 | The first three can easily be obtained from the [Twilio console](https://www.twilio.com/console) after you make a Twilio account.\
185 | Phone number is the number to send SMS to. You will need to include country code and area code. Country code information can be found [here](https://countrycode.org/).
186 |
187 |
188 |
189 |
190 | ### Proxies
191 |
192 | Expand for important information
193 |
194 | If you plan to use low interval rates OR track several items from one store, it is highly recommended that you use proxies such as ones from [Webshare](https://www.webshare.io/) in the format `ip:port` for IP-based authentication or `username:password@ip:port`. \
195 | **NOTE:** The following stores do not currently work with proxies due to them blocking some connections/headers which results in inconsistent connection: Argos, Best Buy, Gamestop and Tesco. Thus I thought it'd be best to take off proxy support for now until further research is done or an alternative way is found.
196 |
197 |
198 |
199 |
200 | ## Screenshots
201 |
202 |
203 |
204 |
205 |
206 | ## Feedback and Support
207 | To ensure this program continues to work, please report bugs by creating an [issue](https://github.com/Prince25/StockAlertBot/issues).\
208 | To ask questions, give feedback or suggestions among other things, create a new [discussion](https://github.com/Prince25/StockAlertBot/discussions).\
209 | To contribute code, programming questions/guidance, gaming sessions, and more, add me on Discord: Prince#0584\
210 | To provide monetary support, [donate](https://www.paypal.com/donate?business=3Y9NEYR4TURT8&item_name=Making+software+and+hacking+the+world%21+%E2%99%A5¤cy_code=USD) or buy me a [Pizza](https://buymeacoff.ee/PrinceSingh) or [PayPal](https://paypal.me/PrinceSingh25) me
211 |
212 |
213 |
214 | ## Timeline
215 | v4.0: Complete code overhaul! Better control over intervals, new stores and notifications! (see [Features](#Features))
216 |
217 | v3.0: SMS / Text notification support :iphone: !! (see [SMS](#SMS))
218 |
219 | v2.0: :email: E-mail notification support and an user interface :computer: (see [screenshots](#Screenshots))
220 |
221 | v1.0: Official release! New name and webhook notification support.
222 |
223 |
224 |
225 | ## Things to work on
226 | * Add more stores
227 | * Newegg search pages
228 | * Best Buy preorder alerts
229 | * ~~B&H Photo Video~~ (no longer supported)
230 | * ~~Ebuyer~~
231 | * ~~Walmart~~
232 | * ~~Gamestop~~
233 | * ~~Currys~~
234 | * ~~Newegg Combos~~
235 | * ~~Newegg~~
236 | * ~~AntOnline~~
237 | * ~~Target~~
238 | * ~~Tesco~~
239 | * ~~Argos~~
240 | * Add tests
241 | * Documentation page
242 | * Twitter notifications
243 | * ~~Add delay between items from the same store~~
244 | * ~~More OOP!!~~
245 | * ~~Add way to track notification status independent of items in a store~~
246 | * ~~Fix~~ Find Bugs
247 | * ~~Fix notifications relying on `OPEN_URL`~~
248 | * ~~Add Ability to use certain Amazon Merchants~~
249 | * ~~Add Email and SMS Notifications~~
250 | * ~~Add Proxies~~
251 | * ~~Add GUI - Make it easier to use~~
252 | * ~~Initially create seperation between intervals for Amazon items~~
253 | * ~~Add a way to have independent delay timers for Amazon~~
254 | * ~~Open product page when in stock~~
255 | * ~~Add webhookURL to enable posting messages to Slack and Discord~~
256 |