⚡️ Get notified as soon as your next CPU, GPU, or game console is in stock

Overview

Inventory Hunter

Build Docker Pulls Docker Image Size (tag)

This bot helped me snag an RTX 3070... hopefully it will help you get your hands on your next CPU, GPU, or game console.

Requirements

  • Raspberry Pi 2 or newer (alternatively, you can use an always-on PC or Mac)
  • Docker (tutorial)

You will also need one of the following:

Quick Start

For instructions specific to Windows, please see this guide instead: Instructions for Windows

These steps should work on any supported Docker platform, but they have been specifically tested on Raspberry Pi OS with Docker already installed.

  1. Clone this repository and pull the latest image from Docker Hub:

    pi@raspberrypi:~
    $ git clone https://github.com/EricJMarti/inventory-hunter
    
    pi@raspberrypi:~
    $ cd inventory-hunter
    
    pi@raspberrypi:~/inventory-hunter
    $ docker pull ericjmarti/inventory-hunter:latest
    
  2. Create your own configuration file based on one of the provided examples:

  3. Start the Docker container using the provided docker_run.bash script, specifying the required arguments.

    If using Discord or Slack, the format of your command will look like this:

    $ ./docker_run.bash -c <config_file> -a <discord_or_slack> -w <webhook_url>
    
    # Discord example:
    pi@raspberrypi:~/inventory-hunter
    $ ./docker_run.bash -c ./config/newegg_rtx_3070.yaml -a discord -w https://discord.com/api/webhooks/...
    

    If using an SMTP relay, the format of your command will look like this:

    $ ./docker_run.bash -c <config_file> -e <email_address> -r <relay_ip_address>
    
    # SMTP example:
    pi@raspberrypi:~/inventory-hunter
    $ ./docker_run.bash -c ./config/newegg_rtx_3070.yaml -e [email protected] -r 127.0.0.1
    

Getting New Code

  1. First identify any running container names related to inventory-hunter
    $ docker ps
    
  2. Stop and remove all containers related to inventory-hunter
    $ docker stop CONTAINER_NAME
    $ docker rm CONTAINER_NAME
    
  3. Pull repo updates
    $ git pull
    
  4. Rerun the docker_run.bash command to start containers back up with updates.
    $ ./docker_run.bash -c <config_file> -a <discord_or_slack> -w <webhook_url>
    

Configuring Alerters

If you are interested in configuring multiple alerters or would like to keep your alerter settings saved in a file, you can configure inventory-hunter's alerting mechanism using a config file similar to the existing scraper configs.

  1. Create a file called alerters.yaml in the config directory.

  2. Configure the alerters you would like to use based on this example:

    ---
    alerters:
      discord:
        webhook_url: https://discord.com/api/webhooks/XXXXXXXXXXXX...
        mentions:
          - XXXXXXXXXXXXXXX
          - XXXXXXXXXXXXXXX
      telegram:
        webhook_url: https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXX/sendMessage
        chat_id: XXXXXXXX
      email:
        sender: [email protected]
        recipients:
          - [email protected]
          - [email protected]
        relay: 127.0.0.1
        password: XXXXXXXXXX   # optional
      slack:
        webhook_url: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
        mentions:
          - XXXXXXXXXXXXXXX
          - XXXXXXXXXXXXXXX
    ...
    
  3. Add this config file to your run command:

    pi@raspberrypi:~/inventory-hunter
    $ ./docker_run.bash -c ./config/newegg_rtx_3070.yaml -q ./config/alerters.yaml
    

How it works

The general idea is if you can get notified as soon as a product becomes in stock, you might have a chance to purchase it before scalpers clear out inventory. This script continually refreshes a set of URLs, looking for the "add to cart" phrase. Once detected, an automated alert is sent, giving you an opportunity to react.

FAQ

How is this different from existing online inventory trackers?

Before developing inventory-hunter, I used several existing services without any luck. By the time I received an alert, the product had already been scalped. This bot alerts faster than existing trackers for several reasons:

  • it runs on your own hardware, so no processing time is spent servicing other users
  • you get to choose which products you want to track
  • you are in control of the refresh frequency

What if inventory-hunter gets used by scalpers?

I sure hope this doesn't happen... 2020 and 2021 are bad enough already. My hope is that inventory-hunter levels the playing field a bit by giving real customers a better opportunity than they had previously. Serious scalpers will continue using automated checkout bots, and it is up to online retailers to combat this malarkey.

Do I really need Docker?

No, but I highly recommend it. If you know your way around python and pip/conda, then you should be able to replicate the environment I created using Docker.

Comments
  • help euro € price problem amazon letters: & n b s p ;

    help euro € price problem amazon letters: & n b s p ;

    I read about change Dockerfile but with euro there is a problem on amazon France Italy Germany and all the country with euro€value: The price contain strange characters 19,99 € example: <span id="price_inside_buybox" class="a-size-medium a-color-price"> 19,99&nbsp;€ </span>

    And the program tells me that it's not able to convert in float the string of the price.

    I edited en_US.UTF-8 to it_IT.UTF-8 or fr or gr but it didn't work.

    Someone managed to make it work with € ? Thanks

    opened by Metus88 21
  • Disc Space at 100%

    Disc Space at 100%

    I installed the base version of Raspberry Pi OS when setting up Inventory-Hunter. I am using a 16gb SD card on a raspberry pi 3. After getting this program set up and updating the OS, I had almost 8 gb of unused space. After running this program for 2 days I am out of space and used 100% of my 16gb. Is there a way to clear the cache or stopping it from using so much disc space? I do a df -h command and I am at all 16gb used in the /dev/root directory. Thoughts??

    opened by danazc77 17
  • NewEgg Ban

    NewEgg Ban

    I ran the script with the NewEgg file configurations and was eventually banned from visiting NewEgg's site for using an automatic process. Not sure if anything can be done for this programmatically but maybe worth mentioning in the ReadMe.

    image

    opened by Anon546 17
  • [Question] Windows friendly tutorial for noobs?

    [Question] Windows friendly tutorial for noobs?

    Hello Eric, Thank you for this awesome script. I'm attempting to run it on my windows computer. I managed to get docker and git working in powershell. Got as far as step 3 but I keep getting the following errors.

    PS C:\Users\steve\inventory-hunter> docker run docker_run.bash -c "config.yaml" -e "[email protected]" -r 192.168.0.1
    Unable to find image 'docker_run.bash:latest' locally
    docker: Error response from daemon: pull access denied for docker_run.bash, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
    See 'docker run --help'.
    PS C:\Users\steve\inventory-hunter> docker run inventory-hunter                                                         usage: run.py [-h] [-c CONFIG] [-e EMAIL [EMAIL ...]] -r RELAY [-v]
    run.py: error: argument -c/--config: can't open 'config.yaml': [Errno 2] No such file or directory: 'config.yaml'
    PS C:\Users\steve\inventory-hunter>
    

    Obviously, I don't have much experience running python scripts. What am I doing wrong?

    opened by 210palafox 14
  • Failing to run on 3rd step

    Failing to run on 3rd step

    on the third step when i go to run i get this error. Any ideas?

    ./docker_run.bash -c /home/pi/inventory-hunter/config/newegg_rtx_3080.yaml -e [email protected] -r 192.168.86.1 the inventory-hunter docker image does not exist... please build the image and try again build command: docker build -t inventory-hunter .

    opened by Dwall4954 14
  • [QUESTION] Issues getting this to work.

    [QUESTION] Issues getting this to work.

    I want to preface this by saying I am very new to working with raspberrypis. I set up the email system on the same pi as the inventory-hunter and have verified that the emails are working. Everything seems to be working fine and based on another question you answered I set the relay as the pi's local ip address 10.0.0.131. I am assuming the email is the one I want the notifications set to and I specified the config file as "bhphoto_rtx_3070.yaml". Every time I try to run the docket_run.bash command it says that the config file does not exist or is not a regular file. If you can help me I would really appreciate it. This was another cool project to try on my PI4 and help a friend get his hands on the almighty 3070.

    opened by joshuagascan 13
  • Cannot build docker image.

    Cannot build docker image.

    Alr hey guys. Im new to coding and idk how to do a lot of these things lol. Pls bear w me. Btw thanks Eric for making this its much appreciated. Oh sorry my english is bad too. When building the image it goes to step 9/11 and then says this:

    pi@raspberrypi:~/inventory-hunter $ docker build -t inventory-hunter . Sending build context to Docker daemon 125.4kB Step 1/11 : FROM python:3.9 ---> 1e73204649e2 Step 2/11 : RUN apt update ---> Using cache ---> 059ec8ea530b Step 3/11 : RUN apt install -y chromium chromium-driver locales locales-all ---> Using cache ---> c26fc144649c Step 4/11 : ENV LC_ALL en_US.UTF-8 ---> Using cache ---> 836462816cda Step 5/11 : ENV LANG en_US.UTF-8 ---> Using cache ---> 3c4e49abe3c4 Step 6/11 : ENV LANGUAGE en_US.UTF-8 ---> Using cache ---> 1a77b4929c62 Step 7/11 : WORKDIR / ---> Using cache ---> 85ce7862d489 Step 8/11 : COPY requirements.txt /src/requirements.txt ---> Using cache ---> 407463daf530 Step 9/11 : RUN pip install -r /src/requirements.txt ---> Running in e11994b8381a Collecting beautifulsoup4 Downloading beautifulsoup4-4.9.3-py3-none-any.whl (115 kB) Collecting lxml Downloading lxml-4.6.2.tar.gz (3.2 MB) Collecting pyyaml Downloading PyYAML-5.3.1.tar.gz (269 kB) Collecting requests Downloading requests-2.25.0-py2.py3-none-any.whl (61 kB) Collecting selenium Downloading selenium-3.141.0-py2.py3-none-any.whl (904 kB) Collecting soupsieve>1.2; python_version >= "3.0" Downloading soupsieve-2.0.1-py3-none-any.whl (32 kB) Collecting chardet<4,>=3.0.2 Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB) Collecting urllib3<1.27,>=1.21.1 Downloading urllib3-1.26.2-py2.py3-none-any.whl (136 kB) Collecting certifi>=2017.4.17 Downloading certifi-2020.11.8-py2.py3-none-any.whl (155 kB) Collecting idna<3,>=2.5 Downloading idna-2.10-py2.py3-none-any.whl (58 kB) Building wheels for collected packages: lxml, pyyaml Building wheel for lxml (setup.py): started Building wheel for lxml (setup.py): still running... Building wheel for lxml (setup.py): finished with status 'error' ERROR: Command errored out with exit status 1: command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-mh277zjg/lxml/setup.py'"'"'; file='"'"'/tmp/pip-install-mh277zjg/lxml/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-tbihpvsi cwd: /tmp/pip-install-mh277zjg/lxml/ Complete output (84 lines): Building lxml version 4.6.2. Building without Cython. Building against libxml2 2.9.4 and libxslt 1.1.32 running bdist_wheel running build running build_py creating build creating build/lib.linux-armv7l-3.9 creating build/lib.linux-armv7l-3.9/lxml copying src/lxml/ElementInclude.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/cssselect.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/usedoctest.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/init.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/builder.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/doctestcompare.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/_elementpath.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/pyclasslookup.py -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/sax.py -> build/lib.linux-armv7l-3.9/lxml creating build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/init.py -> build/lib.linux-armv7l-3.9/lxml/includes creating build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/usedoctest.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/init.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/formfill.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/soupparser.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/builder.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/_diffcommand.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/_html5builder.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/ElementSoup.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/clean.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/_setmixin.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/diff.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/html5parser.py -> build/lib.linux-armv7l-3.9/lxml/html copying src/lxml/html/defs.py -> build/lib.linux-armv7l-3.9/lxml/html creating build/lib.linux-armv7l-3.9/lxml/isoschematron copying src/lxml/isoschematron/init.py -> build/lib.linux-armv7l-3.9/lxml/isoschematron copying src/lxml/etree.h -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/etree_api.h -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/lxml.etree.h -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/lxml.etree_api.h -> build/lib.linux-armv7l-3.9/lxml copying src/lxml/includes/relaxng.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/etreepublic.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/xmlerror.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/tree.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/xmlparser.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/xinclude.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/config.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/htmlparser.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/xslt.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/c14n.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/uri.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/schematron.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/dtdvalid.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/xmlschema.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/init.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/xpath.pxd -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/etree_defs.h -> build/lib.linux-armv7l-3.9/lxml/includes copying src/lxml/includes/lxml-version.h -> build/lib.linux-armv7l-3.9/lxml/includes creating build/lib.linux-armv7l-3.9/lxml/isoschematron/resources creating build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/rng copying src/lxml/isoschematron/resources/rng/iso-schematron.rng -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/rng creating build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl copying src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl copying src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl creating build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 copying src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt -> build/lib.linux-armv7l-3.9/lxml/isoschematron/resources/xsl/iso-schematron-xslt1 running build_ext building 'lxml.etree' extension creating build/temp.linux-armv7l-3.9 creating build/temp.linux-armv7l-3.9/src creating build/temp.linux-armv7l-3.9/src/lxml gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DCYTHON_CLINE_IN_TRACEBACK=0 -I/usr/include/libxml2 -Isrc -Isrc/lxml/includes -I/usr/local/include/python3.9 -c src/lxml/etree.c -o build/temp.linux-armv7l-3.9/src/lxml/etree.o -w gcc: fatal error: Killed signal terminated program as compilation terminated. Compile failed: command '/usr/bin/gcc' failed with exit code 1 creating tmp cc -I/usr/include/libxml2 -I/usr/include/libxml2 -c /tmp/xmlXPathInit_he3bsco.c -o tmp/xmlXPathInit_he3bsco.o cc tmp/xmlXPathInit_he3bsco.o -lxml2 -o a.out error: command '/usr/bin/gcc' failed with exit code 1

    ERROR: Failed building wheel for lxml Running setup.py clean for lxml Building wheel for pyyaml (setup.py): started Building wheel for pyyaml (setup.py): still running... Building wheel for pyyaml (setup.py): finished with status 'done' Created wheel for pyyaml: filename=PyYAML-5.3.1-cp39-cp39-linux_armv7l.whl size=514839 sha256=c804dc7fbd8263026447af4b8be22e6e6d3c3db5831efcc487b996c5a42880ad Stored in directory: /root/.cache/pip/wheels/69/60/81/5cd74b8ee068fbe9e04ca0d53148f28f5c6e2c5b177d5dd622 Successfully built pyyaml Failed to build lxml Installing collected packages: soupsieve, beautifulsoup4, lxml, pyyaml, chardet, urllib3, certifi, idna, requests, selenium Running setup.py install for lxml: started

    I did this 3 times and it says no docker image file found when doing step 3

    Docker image list: docker image list REPOSITORY TAG IMAGE ID CREATED SIZE 407463daf530 4 hours ago 1.3GB python 3.9 1e73204649e2 11 days ago 694MB hello-world latest 851163c78e4a 11 months ago 4.85kB

    pls help me to find out what is going on or what im missing.

    oh btw docker is installed correctly i checked already.

    thanks guys

    opened by KoopG123 9
  • [Question] Is there a way to test?

    [Question] Is there a way to test?

    Hello, I am fairly new to this sort of code. I was wondering if I could somehow force this program to send me a notification to make sure that it is working correctly? Also, I am looking forward to BestBuy support.

    opened by AndrewHulse 9
  • Add support for multiple Canadian retailers

    Add support for multiple Canadian retailers

    Add support for CanadaComputers, EBGames, ToysRUs, Costco Canada.

    @EricJMarti I wanted to add support for the following retailers but faced some issues:

    • Amazon.ca: I get a float error as the currency field has text (CDN$ 99.99 for example)
    • MemoryExpress: I get a float error as MemoryExpress has the word "Only" before the number
    • Walmart.ca: Gets detected as a bot instantly, even when using selenium
    opened by MRizkBV 8
  • Container exiting immediately

    Container exiting immediately

    I created container with Discord webhook but it exits immediately:

    pi@raspberrypi:~/inventory-hunter $ docker ps -a -f name=newegg_rtx_3070 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4a01407b39e0 ericjmarti/inventory-hunter:latest "python /src/run.py …" 15 minutes ago Exited (139) 15 minutes ago

    My command was looking like this:

    ./docker_run.bash -c ./config/newegg_rtx_3070.yaml -a discord -w https://discordapp.com/api/webhooks/78449045994.........etc etc

    I did git pull. No luck.

    opened by Utherellus 8
  • Microcenter Scraper

    Microcenter Scraper

    The microcenter scraper doesn't detect items that aren't able to be reserved online, but do in fact have in store inventory.

    Example is here

    https://www.microcenter.com/product/630284/amd-ryzen-7-5800x-vermeer-38ghz-8-core-am4-boxed-processor?storeid=095

    Lists 13 in stock as of 7:30pm EST scraper shows out of stock.

    Log from starting a test scraper using above link

    D2020-12-05 00:31:20,918 starting with args: /src/run.py --alerter email --email (removed --relay 127.0.0.1 D2020-12-05 00:31:21,150 using parser: lxml D2020-12-05 00:31:21,151 registering custom scraper for domain: amazon D2020-12-05 00:31:21,151 registering custom scraper for domain: bestbuy D2020-12-05 00:31:21,152 registering custom scraper for domain: bhphotovideo D2020-12-05 00:31:21,153 registering custom scraper for domain: microcenter D2020-12-05 00:31:21,154 registering custom scraper for domain: newegg D2020-12-05 00:31:21,155 registering custom scraper for domain: walmart I2020-12-05 00:31:21,168 scraper initialized for https://www.microcenter.com/product/630284/amd-ryzen-7-5800x-vermeer-38ghz-8-core-am4-boxed-processor?storeid=095 I2020-12-05 00:31:31,621 amd-ryzen-7-5800x-vermeer-38ghz-8-core-am4-boxed-processor: not in stock

    (time stamp is 5 hours ahead of system time, gmt i suppose)

    Here's a link to a store with no in store inventory:

    https://www.microcenter.com/product/630284/amd-ryzen-7-5800x-vermeer-38ghz-8-core-am4-boxed-processor?storeid=081

    opened by Remanent 8
  • Allerts Issue

    Allerts Issue

    I installed the script on raspberry pi 4. Everything works fine except notifications. I get a notification (on telegram) every time an item is available, but the price limit set in the configuration file, is not respected. How can I fix the problem?

    opened by ilnonno70 1
  • bash: docker_run.bash: command not found

    bash: docker_run.bash: command not found

    I have the problem when run the bot using this : docker_run.bash -c ./config/newegg_rtx_3070.yaml -a telegram -w https://api.telegram.org/bot5097994710:AAFXdlMwMZF1YLMnEAWe58-1T/sendMessage -d chat_id 458636053xxx

    I reinstall the OS on rabpberry Pi 4 and reinstall docker hub but no luck.

    opened by nhattan2412 0
  • armv6

    armv6

    Is there anyway to add support for armv6? I have a rpi zero with that version and I get an error when trying to start container. I see that it was removed from the docker file, but I cannot figure out how to "force" it.

    opened by HowlinJayByrd 0
  • Role mentions in Discord

    Role mentions in Discord

    There was previously an issue opened to implement the ability to ping roles in Discord. A user mention system was added via the alerters.yaml configs, which works really well for user mentions, but it does not successfully mention a role if the role is included in the list. Is there any plan to add the ability to mention roles? Based on the Discord documentation it seems like a simple logic could be implemented to mention users, roles, channels, etc. It appears to be a minor character difference in the mention tag structure, but unfortunately I don't know how to implement such changes myself.

    Mentions documentation: https://docs.discord.club/embedg/reference/mentions

    opened by mdstricklin 0
  • Synology DSM Execution Command

    Synology DSM Execution Command

    I'm having trouble passing the run parameters in the docker UI for Synology NAS. I created my .yaml files in my /config directory and I'm configuring the execution command in Docker UI as such:

    image

    The container fails and returns these in the logs:

    starting: -c ./config/products.yaml -q ./config/alerts.yaml
    ./init.bash: line 21: eval: -c: invalid option
    eval: usage: eval [arg ...]
    

    I have tried entering "./docker_run.bash -c ./config/products.yaml -q ./config/alerts.yaml" as my execution command but docker says ./docker_run.bash command is not recognized.

    I'm curious if anyone else has success running this in Synology Docker UI?

    Thanks.

    opened by ConnorH1 1
  • scrape failed: caught exception during request: 'NoneType' object has no attribute 'text'

    scrape failed: caught exception during request: 'NoneType' object has no attribute 'text'

    Starting on 6/28, scrapes are consistently failing on the BestBuy URL below. Any help or pointers would be appreciated.

    [bstby_1] caught exception during request: 'NoneType' object has no attribute 'text' [bstby_1] scrape failed

    https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-gaming-oc-12gb-gddr6-pci-express-4-0-graphics-card/6468931.p?skuId=6468931

    opened by OffalGood 2
Owner
Eric Marti
Develops high frequency trading systems.
Eric Marti
VaccineAlarm is a simple python script that allows user to get notified when their desired vaccine doses are available at vaccine centers near them.

Introduction VaccineAlarm is a simple python script that allows user to get notified when their desired vaccine doses are available at vaccine centers

Ankit Tripathi 5 Nov 26, 2021
Telegram bot made with Python to get notified when visa slots are available

Visa slot bot I created this bot to getnotified when screenshots are available in the Telegram channel for dropbox appointments. How do I use this? Ch

Jimil 7 Jan 3, 2023
See trending stock tickers on Reddit and check Stock perfomance

See trending stock tickers on Reddit and check Stock perfomance

Abbas 1.5k Jan 6, 2023
Stock Market Insights is a Dashboard that gives the 360 degree view of the particular company stock

Stock Market Insights is a Dashboard that gives the 360 degree view of the particular company stock.It extracts specific data from multiple sources like Social Media (Twitter,Reddit ,StockTwits) , News Articles and applies NLP techniques to get sentiments and insights.

Ganesh N 3 Sep 10, 2021
Davide Gallitelli 3 Dec 21, 2021
This project checks the weather in the next 12 hours and sends an SMS to your phone number if it's going to rain to remind you to take your umbrella.

RainAlert-Request-Twilio This project checks the weather in the next 12 hours and sends an SMS to your phone number if it's going to rain to remind yo

null 9 Apr 15, 2022
null 471 Dec 24, 2022
Andrei 1.4k Dec 24, 2022
WebhookHub - A discord WebHook Manager with much more features coming soon

WebhookHub A discord WebHook Manager with much more features coming soon This is

null 5 Feb 19, 2022
The text based version of my App Blocker that I planning on converting to GUI soon.

App-Blocker The text based version of my App Blocker that I planning on converting to GUI soon. Currently I am just uploading the appblocker.py file,

Harsh Raj 0 Sep 13, 2022
Want to get your driver's license? Can't get a appointment because of COVID? Well I got a solution for you.

NJDMV-appoitment-alert Want to get your driver's license? Can't get a appointment because of COVID? Well I got a solution for you. We'll get you one i

Harris Spahic 3 Feb 4, 2022
❤️ Hi There Im EzilaX ❤️ A next gen powerful telegram group manager bot 😱 for manage your groups and have fun with other cool modules Made By Sadew Jayasekara 🔥

❤️ EzilaX v1 ❤️ Unmaintained. The new repo of @EzilaXBot is Public. (It is no longer based on this source code. The completely rewritten bot available

Sadew Jayasekara 18 Nov 24, 2021
❤️A next gen powerful telegram group manager bot for manage your groups and have fun with other cool modules

Natsuki Based on Python Telegram Bot Contributors Video Tutorial: Complete guide on deploying @TheNatsukiBot's clone on Heroku. ☆ Video by Sadew Jayas

Pawan Theekshana 8 Oct 6, 2022
Amanda-A next gen powerful telegram group manager bot for manage your groups and have fun with other cool modules.

Amanda-A next gen powerful telegram group manager bot for manage your groups and have fun with other cool modules.

Team Amanda 4 Oct 21, 2022
Get-Phone-Number-Details-using-Python - To get the details of any number, we can use an amazing Python module known as phonenumbers.

Get-Phone-Number-Details-using-Python To get the details of any number, we can use an amazing Python module known as phonenumbers. We can use the amaz

Coding Taggers 1 Jan 1, 2022
A listener for RF >= 4.0 that prints a Stack Trace to console to faster find the code section where the failure appears.

robotframework-stacktrace A listener for RF >= 4.0 that prints a Stack Trace to console to faster find the code section where the failure appears. Ins

marketsquare 16 Nov 24, 2022
And now, for the first time, you can send alerts via action from ArcSight ESM Console to the TheHive when Correlation Rules are triggered.

ArcSight Integration with TheHive And now, for the first time, you can send alerts via action from ArcSight ESM Console to the TheHive when Correlatio

Amir Hossein Zargaran 3 Jan 19, 2022
It was increasingly cumbersome to eye-grep CF output in the AWS console.

cfplot Overview It was increasingly cumbersome to eye-grep CF output in the AWS console. I couldn't find another tool out there to provide individual

null 46 Dec 26, 2022
Console XMPP client in python

poezio Homepage: https://poez.io Forge Page: https://lab.louiz.org/poezio/poezio Poezio is a console Jabber/XMPP client. The initial goal was to provi

null 48 Dec 19, 2022