From 8aa61a109e84a2cfb7391949f7fc31d0fd417e87 Mon Sep 17 00:00:00 2001 From: TanguyPcFixe Date: Thu, 25 Jun 2026 00:32:09 +0200 Subject: [PATCH] added bugs, lefttohaul, revamped http get, many more things that will break in fun ways --- main.py | 126 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 108 insertions(+), 18 deletions(-) diff --git a/main.py b/main.py index 032c150..d1756fe 100644 --- a/main.py +++ b/main.py @@ -1,12 +1,13 @@ import discord -from discord.ext import commands +from discord.ext import commands, tasks from discord.commands import option import requests import json -from datetime import datetime as dt +from datetime import datetime import aiohttp import os import asyncio +from math import floor ### reads token files @@ -17,23 +18,24 @@ 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() +async def getFromSheet(gsheetToken, data): - return text + params = {"type":data} + print(params) + async with session.get(gsheetToken, params=params) as response: + print("Status:", response.status) + text = await response.text() + print(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: - text = await response.text() - print(text) - print("Status:", response.status) - return response.status + async with session.post(gsheetToken, json=data) as response: + 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 @@ -76,7 +78,7 @@ async def getListOfCarriers(state): ### used to query the carrier state internally async def getInternalCarrierState(): - response = await getFromSheet(gsheetToken) + response = await getFromSheet(gsheetToken, "carrier") return response @@ -135,10 +137,21 @@ discordToken = readToken("discord.token") gsheetToken = readToken("sheet.token") lastCommandFile = "command.last" + + # default command to see if the bot has lived @bot.listen() async def on_connect(): + global session print("I'm alive, bitch") + session = aiohttp.ClientSession() + +@bot.event +async def on_ready(): + print("I'm ready, bitch") + writeToWhatsLeftToHaul.start() + + # delivery command # guild IDs are both IDA servers @@ -190,7 +203,7 @@ async def delivery(ctx, response = await postToSheet(data, gsheetToken) if response == 200: await ctx.followup.send(f"your delivery of {quantity} of {commodity} to a {target} has been added to the sheet!") - print(f"[{dt.isoformat(dt.now())}]{author} delivery of {quantity} of {commodity} to a {target}") + print(f"[{datetime.isoformat(datetime.now())}]{author} delivery of {quantity} of {commodity} to a {target}") await writeDeliveryToCommandFile(author, data) else: await ctx.followup.send(f"Failed to log delivery (HTTP {response}). Please contact the yellow people if that keeps happening") @@ -228,7 +241,7 @@ async def misc(ctx, response = await postToSheet(data, gsheetToken) if response == 200: await ctx.followup.send(f"your delivery of {quantity} of Miscellaneous stuff to a {target} has been added to the sheet!") - print(f"[{dt.isoformat(dt.now())}]{author} delivery of {quantity} of Miscellaneous to a {target}") + print(f"[{datetime.isoformat(datetime.now())}]{author} delivery of {quantity} of Miscellaneous to a {target}") await writeDeliveryToCommandFile(author, data) else: await ctx.followup.send(f"Failed to log delivery (HTTP {response}). Please contact the yellow people if that keeps happening") @@ -259,7 +272,7 @@ async def last(ctx): response = await postToSheet(data, gsheetToken) if response == 200: await ctx.followup.send(f"your delivery of {data['quantity']} of {data['commodity']} to a {data['target']} has been added to the sheet!") - print(f"[{dt.isoformat(dt.now())}] delivery of {data['quantity']} of {data['commodity']} to a {data['target']}") + print(f"[{datetime.isoformat(datetime.now())}] delivery of {data['quantity']} of {data['commodity']} to a {data['target']}") await writeDeliveryToCommandFile(author, data) else: await ctx.followup.send(f"Failed to log delivery (HTTP {response}). Please contact the yellow people if that keeps happening") @@ -383,9 +396,86 @@ async def setCarrierState(ctx, carrier, state): +@bot.slash_command( + name="lefttohaul", + # guild_ids=[401372086746087425], + description= "gets the what's left to haul from the sheet" +) +async def lefttohaul(ctx): + response = await getFromSheet(gsheetToken, "commodity") + + await ctx.defer() + + text = "\n\n\n### Here's what's left to haul! Get to work!\n" + + commodity, values = response.split("|") + + commodity = commodity.split(",") + values = values.split(",") + finalDict = {} + + for i in range(len(commodity)): + finalDict[commodity[i]] = int(values[i]) + + finalDict = dict(sorted(finalDict.items(), key=lambda item: item[1], reverse=True)) + + + for key in finalDict: + if finalDict[key] > 0: + text += f"{key} : {finalDict[key]}\n" + + await ctx.followup.send(text) +@tasks.loop(seconds=60) +async def writeToWhatsLeftToHaul(): + response = await getFromSheet(gsheetToken, "commodity") + print("test") + text = "```" + + commodity, values = response.split("|") + + commodity = commodity.split(",") + values = values.split(",") + finalDict = {} + + for i in range(len(commodity)): + finalDict[commodity[i]] = int(values[i]) + + finalDict = dict(sorted(finalDict.items(), key=lambda item: item[1], reverse=True)) + + + for key in finalDict: + if finalDict[key] > 0: + text += f"{key} : {finalDict[key]}\n" + + channel = bot.get_channel(1519457137234022460) + # await channel.purge(limit=1) + + text += "```" + + embed = discord.Embed(title="Estimated remaining amounts and where to get them", + colour=discord.Colour(0x29ac08), + description=text, + timestamp=datetime.now()) + embed.set_thumbnail(url="https://cdn.discordapp.com/emojis/536647643367997492.png") + + embed.set_footer(text="This message updates every 60 seconds(ish). Last updated at") + # if 'station_name' in config.config and 'station_link' in config.config: + # embed.set_author(name=u'\U0001F517 ' + config.config['station_name'] + u' \U0001F517', + # url=config.config['station_link']) + + + channel = bot.get_channel(1519457137234022460) + found = False + async for oldmsg in channel.history(limit=2): + if oldmsg.author == bot.user: + found = True + await oldmsg.edit(embed=embed) + break + if not found: + await channel.send(embed=embed)