check tasks completed
This commit is contained in:
parent
4d352c801c
commit
e96a1b9161
@ -21,7 +21,7 @@ class UserLocation:
|
|||||||
conn = sqlite3.connect(self.db_name)
|
conn = sqlite3.connect(self.db_name)
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute('''
|
cursor.execute('''
|
||||||
INSERT INTO user_locations (user_id, location) VALUES (?, ?) ON CONFLICT(user_id) DO UPDATE SET location=excluded.location''', (user_id, location))
|
INSERT INTO user_locations (username, user_id, location) VALUES (?, ?) ON CONFLICT(user_id) DO UPDATE SET location=excluded.location''', (username, user_id, location))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
@ -31,4 +31,30 @@ class UserLocation:
|
|||||||
cursor.execute('SELECT location FROM user_locations WHERE user_id = ?', (user_id,))
|
cursor.execute('SELECT location FROM user_locations WHERE user_id = ?', (user_id,))
|
||||||
row = cursor.fetchone()
|
row = cursor.fetchone()
|
||||||
conn.close()
|
conn.close()
|
||||||
return row[0] if row else None
|
return row[0] if row else None
|
||||||
|
|
||||||
|
class TaskCompleted:
|
||||||
|
def __init__(self, db_name='tasks_completed.db'):
|
||||||
|
self.db_name = db_name
|
||||||
|
self.create_table()
|
||||||
|
|
||||||
|
def create_table(self):
|
||||||
|
conn = sqlite3.connect(self.db_name)
|
||||||
|
cursor = conn.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS task_completed (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
username TEXT NOT NULL,
|
||||||
|
task TEXT NOT NULL,
|
||||||
|
time TEXT NOT NULL
|
||||||
|
)''')
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
def set_info(self, user_id:int, username: str, task: str, time: str):
|
||||||
|
conn = sqlite3.connect(self.db_name)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute('''
|
||||||
|
INSERT INTO task_completed (user_id, username, task, time) VALUES (?, ?, ?, ?)''', (user_id, username, task, time))
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
25
main.py
25
main.py
@ -5,7 +5,7 @@ from googleapiclient.discovery import build
|
|||||||
from google.oauth2.credentials import Credentials
|
from google.oauth2.credentials import Credentials
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from bot.database import UserLocation
|
from bot.database import UserLocation, TaskCompleted
|
||||||
from asyncio import to_thread
|
from asyncio import to_thread
|
||||||
from discord import app_commands
|
from discord import app_commands
|
||||||
from discord.ui import View, Select
|
from discord.ui import View, Select
|
||||||
@ -23,6 +23,7 @@ intents = discord.Intents(messages=True, guilds=True)
|
|||||||
intents.message_content = True
|
intents.message_content = True
|
||||||
bot = commands.Bot(command_prefix='!', intents=intents)
|
bot = commands.Bot(command_prefix='!', intents=intents)
|
||||||
user_location_db = UserLocation()
|
user_location_db = UserLocation()
|
||||||
|
task_completed_db = TaskCompleted()
|
||||||
TZ = datetime.datetime.now().astimezone().tzinfo
|
TZ = datetime.datetime.now().astimezone().tzinfo
|
||||||
|
|
||||||
def build_calendar_service():
|
def build_calendar_service():
|
||||||
@ -86,7 +87,7 @@ class TaskSelect(Select):
|
|||||||
await interaction.followup.send("Task already completed.", ephemeral=True)
|
await interaction.followup.send("Task already completed.", ephemeral=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()
|
now = datetime.datetime.now(TZ).isoformat()
|
||||||
body = dict(task)
|
body = dict(task)
|
||||||
body["status"] = "completed"
|
body["status"] = "completed"
|
||||||
body["completed"] = now
|
body["completed"] = now
|
||||||
@ -96,6 +97,11 @@ class TaskSelect(Select):
|
|||||||
if updated.get("status") == "completed":
|
if updated.get("status") == "completed":
|
||||||
await interaction.followup.send(f"User: {interaction.user.display_name} marked task: '{updated.get('title')}' as completed.", ephemeral=True)
|
await interaction.followup.send(f"User: {interaction.user.display_name} marked task: '{updated.get('title')}' as completed.", ephemeral=True)
|
||||||
print(f"User {interaction.user.display_name} just completed task {updated.get('title')}")
|
print(f"User {interaction.user.display_name} just completed task {updated.get('title')}")
|
||||||
|
username = interaction.user.display_name
|
||||||
|
user_id = interaction.user.id
|
||||||
|
task = updated.get('title')
|
||||||
|
time = now
|
||||||
|
task_completed_db.set_info(user_id, username, task, time)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
await interaction.followup.send(f"Error: {e}", ephemeral=True)
|
await interaction.followup.send(f"Error: {e}", ephemeral=True)
|
||||||
@ -135,6 +141,8 @@ async def today(interaction: discord.Interaction):
|
|||||||
tasklist=tl_id, showCompleted=True, showHidden=True, maxResults=250).execute() or {})
|
tasklist=tl_id, showCompleted=True, showHidden=True, maxResults=250).execute() or {})
|
||||||
items = tasks_res.get("items", []) or []
|
items = tasks_res.get("items", []) or []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for t in items:
|
for t in items:
|
||||||
if not isinstance(t, dict):
|
if not isinstance(t, dict):
|
||||||
continue
|
continue
|
||||||
@ -145,6 +153,8 @@ async def today(interaction: discord.Interaction):
|
|||||||
if due_date != today and completed_date != today:
|
if due_date != today and completed_date != today:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
print(f"API RESPONSE: {t}")
|
||||||
|
|
||||||
total += 1
|
total += 1
|
||||||
status = "✅" if t.get("status") == "completed" else "🔲"
|
status = "✅" if t.get("status") == "completed" else "🔲"
|
||||||
t_id = t.get("id")
|
t_id = t.get("id")
|
||||||
@ -203,15 +213,15 @@ async def events(interaction: discord.Interaction):
|
|||||||
orderBy='startTime'
|
orderBy='startTime'
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
print(f"API Response: {events_result}")
|
print(f"API RESPONSE: {events_result}")
|
||||||
events = events_result.get('items',[])
|
events = events_result.get('items',[])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if not events:
|
if not events:
|
||||||
embed.description = "No tasks due today"
|
await interaction.followup.send("No events this week!")
|
||||||
await interaction.followup.send(embed=embed)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
else:
|
else:
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="📅 This week's events",
|
title="📅 This week's events",
|
||||||
@ -242,7 +252,8 @@ async def events(interaction: discord.Interaction):
|
|||||||
@bot.command(name="set_location")
|
@bot.command(name="set_location")
|
||||||
async def set_location(ctx, *, location: str):
|
async def set_location(ctx, *, location: str):
|
||||||
user_id = ctx.author.id
|
user_id = ctx.author.id
|
||||||
user_location_db.set_user_location(user_id, location)
|
username = ctx.author.display_name
|
||||||
|
user_location_db.set_user_location(username, user_id, location)
|
||||||
await ctx.send(f"Location set to: {location}")
|
await ctx.send(f"Location set to: {location}")
|
||||||
|
|
||||||
@bot.tree.command(name="weather", description="Check the weather!")
|
@bot.tree.command(name="weather", description="Check the weather!")
|
||||||
@ -259,7 +270,7 @@ async def current_weather(interaction: discord.Interaction, location: str = None
|
|||||||
|
|
||||||
current_weather = weather_client.get_current_weather(location)
|
current_weather = weather_client.get_current_weather(location)
|
||||||
|
|
||||||
print(f"JSON API {current_weather}")
|
print(f"API RESPONSE {current_weather}")
|
||||||
|
|
||||||
# Check that current_weather is a dictionary and contains necessary keys
|
# Check that current_weather is a dictionary and contains necessary keys
|
||||||
if isinstance(current_weather, dict) and 'main' in current_weather and 'weather' in current_weather:
|
if isinstance(current_weather, dict) and 'main' in current_weather and 'weather' in current_weather:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user