From 08e0d41a092e2fdfad9b5381339e7f7573820f45 Mon Sep 17 00:00:00 2001 From: TanguyPcFixe Date: Mon, 22 Jun 2026 00:23:27 +0200 Subject: [PATCH] initial commit for automated carrier control (w/ bugs) --- main.py | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 184 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index 524ba6e..032c150 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ import discord from discord.ext import commands +from discord.commands import option import requests import json from datetime import datetime as dt @@ -15,15 +16,70 @@ def readToken(filePath): +### sends a get request to the sheet +async def getFromSheet(gsheetToken): + async with aiohttp.ClientSession() as session: + async with session.get(gsheetToken) as response: + print("Status:", response.status) + text = await response.text() + + return text + ### takes a json, returns a http code async def postToSheet(data, gsheetToken): async with aiohttp.ClientSession() as session: async with session.post(gsheetToken, json=data) as response: - # print("Status:", response.status) + text = await response.text() + print(text) + print("Status:", response.status) return response.status +### carrier state parser, takes the values from the sheet and turn it into something we can use + +async def parseCarrierState(state): + tupleList = [] + splitState = state.split(",") + + for i in range(0,len(splitState),2): + carrier = splitState[i] + state = splitState[i+1] + if carrier != "" and state != "": + tupleList.append((carrier, state)) + + return tupleList + +### converts a list of tuple back to the sheet syntax (CSV) +async def toRawState(tupleList): + rawState = [] + for value in tupleList: + for subval in value: + rawState.append([subval]) + rawLen = len(rawState) + + for i in range(rawLen, 41): + rawState.append([""]) + + return rawState + + +async def getListOfCarriers(state): + splitState = state.split(",") + carrierList = [] + for i in range(0,len(splitState),2): + carrier = splitState[i] + if carrier != "": + carrierList.append(carrier) + + return carrierList + +### used to query the carrier state internally +async def getInternalCarrierState(): + response = await getFromSheet(gsheetToken) + return response + + #creates the file if it doesn't exist. stores last command used by... users on this delivery. @@ -71,6 +127,7 @@ async def delLastCommandFile(): + bot = commands.Bot() # various tokens @@ -122,6 +179,7 @@ async def delivery(ctx, await ctx.defer() data = { + "postType":"delivery", "username":author, "commodity": commodity, "quantity": quantity, @@ -159,8 +217,9 @@ async def misc(ctx, await ctx.defer() data = { + "postType":"delivery", "username":author, - "commodity": "Miscellaneous", + "commodity": commodity, "quantity": quantity, "target": target } @@ -179,6 +238,7 @@ async def misc(ctx, + @bot.slash_command( name="last", # guild_ids=[401372086746087425], @@ -211,9 +271,6 @@ async def last(ctx): - - - #change url command @bot.slash_command( name="change-sheet-url", @@ -235,6 +292,128 @@ async def changeSheetUrl(ctx, print("deleted command.last file content") except Exception as e: await ctx.followup.send(f"something shat the bed") + + + + + + + + +@bot.slash_command( + name="getcarrierstate", + # guild_ids=[401372086746087425], + description= "gets the carriers state from the sheet" +) +async def getCarrierState(ctx): + response = await getInternalCarrierState() + carrierState = await parseCarrierState(response) + await ctx.defer() + + text = "Current Carrier State : \n" + + for carrier, state in carrierState: + text += f"{carrier} is {state}\n" + + await ctx.followup.send(text) + + +async def getCarriers(ctx: discord.AutocompleteContext): + state = await getInternalCarrierState() + carrierList = await getListOfCarriers(state) + # print(carrierList) + # return [carrier for carriers in carrierList] + return carrierList + + +@bot.slash_command( + name="setcarrierstate", + # guild_ids=[401372086746087425], + description= "Sets a carrier state on the sheet" +) +@option("carrier", description="The carrier you want to edit", autocomplete=getCarriers) +@option("state",required=True, description="The carrier you want to edit", choices=["Loading","Unloading","Full","Empty","Inactive"]) +async def setCarrierState(ctx, carrier, state): + response = await getFromSheet(gsheetToken) + carrierState = await parseCarrierState(response) + + newCarrierState = [] + + print(f"requested values: {carrier} to {state}") + + print(f"current values : {carrierState}") + + for carrierS, stateS in carrierState: + if carrier == carrierS: + newCarrierState.append((carrier,state)) + else: + newCarrierState.append((carrierS,stateS)) + + print(f"new values : {newCarrierState}") + + rawState = await toRawState(newCarrierState) + + print(rawState) + + await ctx.defer() + i = 1 + text = "Current Carrier State : \n" + + + data = { + "postType":"carrier", + "carrierState": rawState + + } + + + try: + response = await postToSheet(data, gsheetToken) + if response == 200: + await ctx.followup.send(f"hey") + else: + await ctx.followup.send(f"i fucked up ") + except Exception as e: + await ctx.followup.send(f"help : Error: {e}") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +