initial commit for automated carrier control (w/ bugs)

This commit is contained in:
TanguyPcFixe 2026-06-22 00:23:27 +02:00
parent 8b6cd1dce8
commit 08e0d41a09

189
main.py
View File

@ -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}")