Skip to content

Commit

Permalink
Initial
Browse files Browse the repository at this point in the history
  • Loading branch information
dev-fatal committed Feb 5, 2023
0 parents commit aa84e77
Show file tree
Hide file tree
Showing 7 changed files with 125 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
__pycache__/
.fleet/
.idea/
34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# QueueNotify (program)
## Description
Program that sends you a text when your Solo Shuffle pops in World of Warcraft. Developed for Windows 11 (but 10 should work).

**Please note that this program is in Alpha, and so you can expect errors to occur and things to be more difficult to set up for now. I've decided to release it despite the somewhat primitive state, as I think it will be useful for a lot of people who are able to follow the instructions below.**

Report any problems in the [Issues](https://github.com/test/queue-notify/issues) tab, but please try searching things yourself first.

## Installation
1. Install the QueueNotify addon via [CurseForge](https://www.curseforge.com/) or [Wago](https://addons.wago.io/) and then `/reload`
2. Install [Python 3 for Windows](https://www.python.org/downloads/) and ensure it's in your PATH. Note that this program has been tested on Python version 3.10
3. Download this repo (`git clone https://github.com/test/queue-notify`, or [download the ZIP](https://github.com/test/queue-notify/archive/refs/heads/main.zip) and then extract it somewhere)
4. Open Command Prompt and `cd` into where you saved it, e.g., `cd C:\Users\test\Documents\queue-notify`
5. Run `pip install -r requirements.txt` and wait until complete.


## Setup
1. Install the [Telegram app](https://telegram.org/apps) on your phone and sign up
2. Open a new message to the user `@BotFather` and type `/newbot`. You will then be prompted to fill in some values
3. Enter a name such as `QueueNotify`
4. Enter some unique username like `queuenotify_123456_bot`
5. Write down the HTTP API token you get, and enter it under `token` in the `config.toml` file
6. Ensure the `path` to your WoW folder in `config.toml` is correct. You must use double backslashes, e.g., `"C:\\Program Files (x86)\\World of Warcraft"`
7. Run the program (from inside the directory, as before) with `python main.py`. You will need to run this whenever you want to begin monitoring after a restart
8. When running for the first time, it will prompt you to send a message to your bot. Do this by clicking the `t.me/{username}` link given to you by the BotFather
9. Stop monitoring by closing the Command Prompt window.


## Updates
It is likely that this program will change significantly, and so you should check back here for updates. Please also keep the addon updated.


## Changing account
If you wish to change your linked Telegram account, simply change the `chat_id` value in `config.toml` to `""` and re-run the program.
3 changes: 3 additions & 0 deletions config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
token = ""
path = "C:\\Program Files (x86)\\World of Warcraft"
chat_id = ""
27 changes: 27 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from message import get_chat_id
from monitor import monitor
import toml


def load_config():
config_path = "config.toml"
with open(config_path) as file:
config = toml.load(file)
if config["chat_id"] == "":
chat_id = None
while not chat_id:
input("Please send a message to the Telegram bot you created. Once done, wait 1 minute then press Enter.")
chat_id = get_chat_id(config["token"])
config["chat_id"] = chat_id
with open(config_path, "w") as file:
toml.dump(config, file)
return config


def main():
config = load_config()
monitor(config["path"], config["token"], config["chat_id"])


if __name__ == "__main__":
main()
17 changes: 17 additions & 0 deletions message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import requests


def get_chat_id(token):
url = f"https://api.telegram.org/bot{token}/getUpdates"
data = requests.get(url).json()
try:
chat_id = data["result"][0]["message"]["chat"]["id"]
except IndexError:
return None
return str(chat_id)


def send_message(token, chat_id):
message = "Your Solo Shuffle is ready."
url = f"https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text={message}"
requests.get(url)
38 changes: 38 additions & 0 deletions monitor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
import time
from message import send_message
import os


class ScanFolder:
def __init__(self, path, token, chat_id):
self.path = path + "\\_retail_\\Screenshots"
self.token = token
self.chat_id = chat_id
self.event_handler = PatternMatchingEventHandler(patterns=["*.tga"], ignore_patterns=None,
ignore_directories=False, case_sensitive=True)
self.event_handler.on_created = self.on_created
self.observer = Observer()
self.observer.schedule(self.event_handler, self.path, recursive=False)
self.observer.start()

def on_created(self, event):
send_message(self.token, self.chat_id)
print("Sending message...")
if os.path.exists(event.src_path):
os.remove(event.src_path)

def stop(self):
self.observer.stop()
self.observer.join()


def monitor(path, token, chat_id):
observer = ScanFolder(path, token, chat_id)
print("Monitoring...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
requests
toml
watchdog

0 comments on commit aa84e77

Please sign in to comment.