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 import discord
from discord.ext import commands from discord.ext import commands
from discord.commands import option
import requests import requests
import json import json
from datetime import datetime as dt 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 ### takes a json, returns a http code
async def postToSheet(data, gsheetToken): async def postToSheet(data, gsheetToken):
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
async with session.post(gsheetToken, json=data) as response: 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 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. #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() bot = commands.Bot()
# various tokens # various tokens
@ -122,6 +179,7 @@ async def delivery(ctx,
await ctx.defer() await ctx.defer()
data = { data = {
"postType":"delivery",
"username":author, "username":author,
"commodity": commodity, "commodity": commodity,
"quantity": quantity, "quantity": quantity,
@ -159,8 +217,9 @@ async def misc(ctx,
await ctx.defer() await ctx.defer()
data = { data = {
"postType":"delivery",
"username":author, "username":author,
"commodity": "Miscellaneous", "commodity": commodity,
"quantity": quantity, "quantity": quantity,
"target": target "target": target
} }
@ -179,6 +238,7 @@ async def misc(ctx,
@bot.slash_command( @bot.slash_command(
name="last", name="last",
# guild_ids=[401372086746087425], # guild_ids=[401372086746087425],
@ -211,9 +271,6 @@ async def last(ctx):
#change url command #change url command
@bot.slash_command( @bot.slash_command(
name="change-sheet-url", name="change-sheet-url",
@ -235,6 +292,128 @@ async def changeSheetUrl(ctx,
print("deleted command.last file content") print("deleted command.last file content")
except Exception as e: except Exception as e:
await ctx.followup.send(f"something shat the bed") 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}")