From caa7839def6b2ab730ed687f78dc06b18c461a6a Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Wed, 16 Apr 2025 12:57:12 +0200 Subject: [PATCH] changed the keytool, so it now works --- PfandApplication/images/rb.png | Bin 0 -> 13231 bytes PfandApplication/tgtg_orderchecker/README.md | 7 + .../tgtg_orderchecker/__init__.py | 0 .../tgtg_orderchecker/getkey/getapi.py | 6 + .../tgtg_orderchecker/getkey/main.py | 27 +++ PfandApplication/tgtg_orderchecker/key.py | 14 ++ PfandApplication/tgtg_orderchecker/main.py | 183 ++++++++++++++++++ .../tgtg_orderchecker/setupkey.py | 96 +++++++++ 8 files changed, 333 insertions(+) create mode 100644 PfandApplication/images/rb.png create mode 100644 PfandApplication/tgtg_orderchecker/README.md create mode 100644 PfandApplication/tgtg_orderchecker/__init__.py create mode 100644 PfandApplication/tgtg_orderchecker/getkey/getapi.py create mode 100644 PfandApplication/tgtg_orderchecker/getkey/main.py create mode 100644 PfandApplication/tgtg_orderchecker/key.py create mode 100644 PfandApplication/tgtg_orderchecker/main.py create mode 100644 PfandApplication/tgtg_orderchecker/setupkey.py diff --git a/PfandApplication/images/rb.png b/PfandApplication/images/rb.png new file mode 100644 index 0000000000000000000000000000000000000000..18c042c5645fb720591f7670391268d3666df0e2 GIT binary patch literal 13231 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 literal 0 HcmV?d00001 diff --git a/PfandApplication/tgtg_orderchecker/README.md b/PfandApplication/tgtg_orderchecker/README.md new file mode 100644 index 0000000..ce3adf8 --- /dev/null +++ b/PfandApplication/tgtg_orderchecker/README.md @@ -0,0 +1,7 @@ +This is a "better" Version of the TGTG App i made once +This is only experimental thats why its only in the credits! + +This sometimes gets bricked for no fucking reason, dont run it with a bad API key , it WILL say that you are a idiot and it will curse your whole familiy in arabic, +dont try pulling stupid shit on this fucking API it has no fucking mercy, AT ALL + +Version --> PKG1 diff --git a/PfandApplication/tgtg_orderchecker/__init__.py b/PfandApplication/tgtg_orderchecker/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/PfandApplication/tgtg_orderchecker/getkey/getapi.py b/PfandApplication/tgtg_orderchecker/getkey/getapi.py new file mode 100644 index 0000000..e98a296 --- /dev/null +++ b/PfandApplication/tgtg_orderchecker/getkey/getapi.py @@ -0,0 +1,6 @@ +from tgtg import TgtgClient + +client = TgtgClient(email="your email here") +creds = client.get_credentials() + +print(creds) diff --git a/PfandApplication/tgtg_orderchecker/getkey/main.py b/PfandApplication/tgtg_orderchecker/getkey/main.py new file mode 100644 index 0000000..936b07d --- /dev/null +++ b/PfandApplication/tgtg_orderchecker/getkey/main.py @@ -0,0 +1,27 @@ +import json + +from tgtg import TgtgClient + + +def get_tgtg_credentials(): + email = input("Enter your TGTG account email: ") + + try: + client = TgtgClient(email=email) + credentials = client.get_credentials() + + # Save credentials to a JSON file + with open("tgtg_credentials.json", "w") as json_file: + json.dump(credentials, json_file, indent=4) + + # Print credentials in a readable format + print("\nYour TGTG API Credentials:") + print(json.dumps(credentials, indent=4)) + + print("\nCredentials have been saved to 'tgtg_credentials.json'.") + except Exception as e: + print(f"An error occurred: {e}") + + +if __name__ == "__main__": + get_tgtg_credentials() diff --git a/PfandApplication/tgtg_orderchecker/key.py b/PfandApplication/tgtg_orderchecker/key.py new file mode 100644 index 0000000..9f419ec --- /dev/null +++ b/PfandApplication/tgtg_orderchecker/key.py @@ -0,0 +1,14 @@ +######################################### +# # +# AUTOGENERATED BY SETUPKEYTOOL V1.0.03 # +# THIS IS SENSITIVE INFORMATION # +# @ZockerKatze/@rattatwinko # +# # +######################################### + +from tgtg import TgtgClient + +# Don't ever give this Info to someone you dont trust! +# This is the Private Key to your TGTG Account + +client = TgtgClient(access_token="asdf", refresh_token="asdf", cookie="asdf") diff --git a/PfandApplication/tgtg_orderchecker/main.py b/PfandApplication/tgtg_orderchecker/main.py new file mode 100644 index 0000000..f5e6877 --- /dev/null +++ b/PfandApplication/tgtg_orderchecker/main.py @@ -0,0 +1,183 @@ +import tkinter as tk +from io import BytesIO +from tkinter import messagebox, ttk, Menu +from datetime import datetime +import requests +from PIL import Image, ImageTk +from .key import * + +class TGTGOrdersApp: + def __init__(self, parent): + self.parent = parent + self.frame = tk.Frame(self.parent, bg="#ffffff") + self.frame.pack(fill="both", expand=True) + + self.notebook = ttk.Notebook(self.frame) + self.notebook.pack(fill="both", expand=True) + + self.orders_tab = tk.Frame(self.notebook, bg="#ffffff") + self.notebook.add(self.orders_tab, text="Orders") + + self.log_tab = tk.Frame(self.notebook, bg="#ffffff") + self.notebook.add(self.log_tab, text="Log") + + self.log_text = tk.Text(self.log_tab, wrap=tk.WORD, height=15, font=("Arial", 10), bg="#f0f0f0") + self.log_text.pack(fill="both", expand=True, padx=10, pady=10) + + self.order_frame = tk.Frame(self.orders_tab, bg="#ffffff") + self.order_frame.pack(fill="both", expand=True, padx=10, pady=10) + + self.menu = Menu(self.parent) + self.parent.config(menu=self.menu) + self.filemenu = Menu(self.menu) + self.menu.add_cascade(label="File", menu=self.filemenu) + self.filemenu.add_command(label="Exit", command=self.exit_applet) + self.filemenu.add_command(label="Refetch", command=self.display_orders) + self.filemenu.add_command(label="Save Log", command=self.save_log) + self.filemenu.add_separator() + self.filemenu.add_command(label="About", command=self.about) + + self.parent.after(1000, self.on_startup) + + def log_message(self, message): + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self.log_text.insert(tk.END, f"{timestamp} - {message}\n") + self.log_text.yview(tk.END) + + def format_time(self, iso_time): + try: + dt = datetime.fromisoformat(iso_time.replace("Z", "+00:00")) + local_time = dt.astimezone() + return local_time.strftime("%H:%M") + except ValueError: + return "Unknown Error!" + + def fetch_orders(self): + self.log_message("[ INFO ]: Fetching orders...") + try: + active_orders = client.get_active() + if not isinstance(active_orders, dict) or "orders" not in active_orders: + raise ValueError("Unexpected API response format.") + orders_list = active_orders.get("orders", []) + except Exception as e: + self.log_message(f"[ ERROR ]: Error fetching active orders: {e}") + messagebox.showerror("Error", f"Error fetching active orders: {e}") + return [] + + orders_data = [] + for order in orders_list: + try: + order_info = { + "name": order.get("item_name", "Unknown"), + "store_name": order.get("store_name", "Unknown"), + "address": order.get("pickup_location", {}).get("address", {}).get("address_line", "Unknown"), + "quantity": order.get("quantity", 1), + "price": order.get("total_price", {}).get("minor_units", 0) / (10 ** order.get("total_price", {}).get("decimals", 2)), + "currency": order.get("total_price", {}).get("code", "Unknown"), + "payment_method": order.get("payment_method_display_name", "Unknown"), + "pickup_window": { + "start": self.format_time(order.get("pickup_interval", {}).get("start", "Unknown")), + "end": self.format_time(order.get("pickup_interval", {}).get("end", "Unknown")) + }, + "image_url": order.get("item_cover_image", {}).get("current_url", "") + } + orders_data.append(order_info) + except Exception as e: + self.log_message(f"[ FATAL ERROR ]: Skipping an order due to an error: {e}") + return orders_data + + + def display_orders(self): + self.log_message("[ INFO ]: Displaying orders...") + orders = self.fetch_orders() + if not orders: + messagebox.showinfo("Info", "No active orders found.") + self.log_message("[ ERROR ]: No active orders found.") + return + + # Clear existing widgets + for widget in self.order_frame.winfo_children(): + widget.destroy() + + # Create a scrollable frame inside a Canvas + canvas = tk.Canvas(self.order_frame, bg="#ffffff") + scroll_frame = tk.Frame(canvas, bg="#ffffff") + scrollbar = tk.Scrollbar(self.order_frame, orient="vertical", command=canvas.yview) + + canvas.configure(yscrollcommand=scrollbar.set) + + scrollbar.pack(side="right", fill="y") + canvas.pack(side="left", fill="both", expand=True) + canvas.create_window((0, 0), window=scroll_frame, anchor="nw") + + # Store image references to prevent garbage collection + image_refs = [] + + for order in orders: + text = (f"{order['name']} - {order['store_name']}\n" + f"Address: {order['address']}\n" + f"Quantity: {order['quantity']}\n" + f"Price: {order['price']} {order['currency']}\n" + f"Payment: {order['payment_method']}\n" + f"Pickup: {order['pickup_window']['start']} to {order['pickup_window']['end']}\n") + + label = tk.Label(scroll_frame, text=text, justify="left", padx=10, pady=5, anchor="w", font=("Arial", 10), + bg="#f0f0f0", relief="ridge") + label.pack(fill="x", pady=5) + + if order["image_url"]: + try: + response = requests.get(order["image_url"]) + img_data = BytesIO(response.content) + img = Image.open(img_data) + img.thumbnail((150, 150), Image.Resampling.LANCZOS) + img_tk = ImageTk.PhotoImage(img) + + img_label = tk.Label(scroll_frame, image=img_tk) + img_label.image = img_tk # Store reference + image_refs.append(img_tk) # Prevent garbage collection + img_label.pack(pady=5) + except Exception as e: + self.log_message(f"[ ERROR ]: Failed to load image: {e}") + + # Update scroll region + scroll_frame.update_idletasks() + canvas.config(scrollregion=canvas.bbox("all")) + + # Enable scrolling with the mouse wheel + def on_mouse_wheel(event): + canvas.yview_scroll(-1 * (event.delta // 120), "units") + + canvas.bind_all("", on_mouse_wheel) # Windows & MacOS + canvas.bind_all("", lambda e: canvas.yview_scroll(-1, "units")) # Linux Scroll Up + canvas.bind_all("", lambda e: canvas.yview_scroll(1, "units")) # Linux Scroll Down + + def on_startup(self): + self.log_message("[ INFO ]: Application started.") + self.display_orders() + + def exit_applet(self): + self.log_message("[ INFO ]: Exiting Applet") + self.parent.quit() + + def about(self): + messagebox.showinfo("About", "PythonTGTG Script for fetching Orders on Desktop") + + def save_log(self): + try: + log_content = self.log_text.get("1.0", tk.END) + with open("log_file.log", "w") as log_file: + log_file.write(log_content) + self.log_message("[ INFO ]: Log file saved successfully.") + except Exception as e: + self.log_message(f"[ ERROR ]: Error saving log file: {e}") + messagebox.showerror("Error", f"Error saving log file: {e}") + +def start_tgtg(parent=None): + new_window = tk.Toplevel(parent) # Create a new window + new_window.title("TGTG Bestellungen") + new_window.geometry("500x600") + + # Start the TGTGOrdersApp inside this new window + app = TGTGOrdersApp(new_window) + diff --git a/PfandApplication/tgtg_orderchecker/setupkey.py b/PfandApplication/tgtg_orderchecker/setupkey.py new file mode 100644 index 0000000..386e2da --- /dev/null +++ b/PfandApplication/tgtg_orderchecker/setupkey.py @@ -0,0 +1,96 @@ + +import tkinter as tk +from tkinter import messagebox +import os + +# Get the current working directory +current_directory = os.getcwd() + +# Check if the current directory is already 'tgtg_orderchecker', if so adjust the path +if current_directory.endswith('PfandApplication/tgtg_orderchecker'): + KEY_FILE_PATH = os.path.join(current_directory,'PfandApplication/', 'key.py') +else: + KEY_FILE_PATH = os.path.join(current_directory, 'PfandApplication/tgtg_orderchecker', 'key.py') + +# Function to modify the key.py file +def modify_key_file(access_token, refresh_token, cookie): + try: + # Check if the key.py file exists + if os.path.exists(KEY_FILE_PATH): + # Ask the user if they want to replace the existing file + result = messagebox.askyesno("File Exists", f"{KEY_FILE_PATH} already exists. Do you want to replace it?") + if not result: + return # If user chooses "No", do nothing and return + + # Open and modify the file with new values + with open(KEY_FILE_PATH, 'w') as file: + file.write(f'''######################################### +# # +# AUTOGENERATED BY SETUPKEYTOOL V1.0.03 # +# THIS IS SENSITIVE INFORMATION # +# @ZockerKatze/@rattatwinko # +# # +######################################### + +from tgtg import TgtgClient + +# Don't ever give this Info to someone you dont trust! +# This is the Private Key to your TGTG Account + +client = TgtgClient(access_token="{access_token}", refresh_token="{refresh_token}", cookie="{cookie}") +''') + + + messagebox.showinfo("Success", f"{KEY_FILE_PATH} has been updated successfully.") + except Exception as e: + messagebox.showerror("Error", f"Failed to modify {KEY_FILE_PATH}: {str(e)}") + +# Function to handle the Tkinter window for user input +def ask_for_tokens(): + def submit_tokens(): + access_token = access_token_entry.get() + refresh_token = refresh_token_entry.get() + cookie = cookie_entry.get() + + if not access_token or not refresh_token or not cookie: + messagebox.showerror("Error", "All fields are required!") + return + + # Modify the key file + modify_key_file(access_token, refresh_token, cookie) + + # Create Tkinter window + root = tk.Tk() + root.title("Enter API Credentials") + + + title_label = tk.Label(root, text="Enter your API Credentials", font=("Arial", 14, "bold")) + title_label.grid(row=0, columnspan=2, pady=10) + + # Add labels and entry fields for the tokens and cookie + tk.Label(root, text="Access Token:").grid(row=1, column=0) + access_token_entry = tk.Entry(root, width=40) + access_token_entry.grid(row=1, column=1) + + tk.Label(root, text="Refresh Token:").grid(row=2, column=0) + refresh_token_entry = tk.Entry(root, width=40) + refresh_token_entry.grid(row=2, column=1) + + tk.Label(root, text="Cookie:").grid(row=3, column=0) + cookie_entry = tk.Entry(root, width=40) + cookie_entry.grid(row=3, column=1) + + # Submit button to process the tokens + submit_button = tk.Button(root, text="Submit", command=submit_tokens) + submit_button.grid(row=4, columnspan=2) + + # Keep the window on top + root.attributes("-topmost", True) + + # Start Tkinter main loop + root.mainloop() + +# Run the application +if __name__ == "__main__": + ask_for_tokens() +