yetAnotherIdaBot/main.py

118 lines
3.3 KiB
Python

import discord
from discord.ext import commands
import requests
import json
from datetime import datetime as dt
import aiohttp
### reads token files
def readToken(filePath):
with open(filePath, 'r') as f:
return f.readline()
### 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)
return response.status
bot = commands.Bot()
# various tokens
discordToken = readToken("discord.token")
gsheetToken = readToken("sheet.token")
# default command to see if the bot has lived
@bot.listen()
async def on_connect():
print("I'm alive, bitch")
# delivery command
# guild IDs are both IDA servers
@bot.slash_command(
name="delivery",
guild_ids=[1349222984837107797, 401372086746087425],
description= "sends your delivery to the bot!"
)
async def delivery(ctx,
commodity:discord.Option(str, choices=[
"Aluminium",
"Ceramic Composites",
"CMM Composite",
"Computer Components",
"Copper",
"Food Cartridges",
"Fruit and Vegetables",
"Insulating Membrane",
"Liquid Oxygen",
"Medical Diagnostic Equipment",
"Non-Lethal Weapons",
"Polymers",
"Power Generators",
"Semiconductors",
"Steel",
"Superconductors",
"Titanium",
"Water",
"Water Purifiers"
]),
quantity: discord.Option(discord.SlashCommandOptionType.integer, description="Please be nice and input a value between 1 and 1304 (fdev definitely touched something again)", min_value=1, max_value=1304),
target: discord.Option(str, choices=['Station', 'Carrier'])
):
author = str(ctx.author)
author = author[:author.find(" ")]
await ctx.defer()
data = {
"username":author,
"commodity": commodity,
"quantity": quantity,
"target": target
}
try:
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}")
else:
await ctx.followup.send(f"Failed to log delivery (HTTP {response}). Please contact the yellow people if that keeps happening")
except Exception as e:
await ctx.followup.send(f"help : Error: {e}")
#change url command
@bot.slash_command(
name="change-sheet-url",
guild_ids=[1349222984837107797, 401372086746087425],
description= "changes the URL of the active sheet, use with caution"
)
async def changeSheetUrl(ctx,
url:discord.Option(discord.SlashCommandOptionType.string, description="the new URL")
):
global gsheetToken
await ctx.defer()
try:
with open("sheet.token",'w') as f:
f.write(url)
await ctx.followup.send(f"URL has been set to {url}")
gsheetToken = readToken("sheet.token")
except Exception as e:
await ctx.followup.send(f"something shat the bed")
#run the damn thing
bot.run(discordToken)