Skip to content

Commit 65fd6ff

Browse files
committed
feat: reminder bot cron job
1 parent 3ed2b18 commit 65fd6ff

File tree

4 files changed

+49
-20
lines changed

4 files changed

+49
-20
lines changed

api/cron.ts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { sendDirectMessage, getPendingReminders, markReminderAsProcessed } from "../lib/db.js";
2+
3+
export default async function handler(req: Request) {
4+
if (req.headers.get("Authorization") !== `Bearer ${process.env.CRON_SECRET}`) {
5+
return new Response("Unauthorized", { status: 401 });
6+
}
7+
8+
console.log("Running reminder cron job...");
9+
try {
10+
const pendingReminders = await getPendingReminders();
11+
12+
for (const reminder of pendingReminders) {
13+
await sendDirectMessage(reminder.castId, reminder.userFid, reminder.authorUsername);
14+
await markReminderAsProcessed(reminder.id);
15+
console.log(`Processed reminder ${reminder.id} for cast ${reminder.castId}`);
16+
}
17+
18+
return new Response("Success", { status: 200 });
19+
} catch (error) {
20+
console.error('Error processing reminders:', error);
21+
return new Response("Error processing reminders", { status: 500 });
22+
}
23+
}

api/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { devtools } from 'frog/dev'
33
import { handle } from 'frog/next'
44
import { serveStatic } from 'frog/serve-static'
55
import { isValidDuration, parseDurationToTimestamp } from '../lib/utils.js'
6-
import { addReminder, startReminderService } from '../lib/db.js';
6+
import { addReminder } from '../lib/db.js';
77
import { neynar as neynarHub } from 'frog/hubs'
88
import { neynar } from 'frog/middlewares'
99
import { shareComposeUrl } from '../lib/constants.js';
@@ -192,7 +192,7 @@ const isEdgeFunction = typeof EdgeFunction !== 'undefined'
192192
const isProduction = isEdgeFunction || import.meta.env?.MODE !== 'development'
193193
devtools(app, isProduction ? { assetsPath: '/.frog' } : { serveStatic })
194194

195-
startReminderService();
195+
// startReminderService();
196196

197197
export const GET = handle(app)
198198
export const POST = handle(app)

lib/db.ts

+18-18
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export const markReminderAsProcessed = async (id: number) => {
3535
})
3636
}
3737

38-
async function sendDirectMessage(castId: string, userFid: string, authorUsername: string) {
38+
export const sendDirectMessage = async (castId: string, userFid: string, authorUsername: string) => {
3939
try {
4040
const response = await fetch('https://api.warpcast.com/v2/ext-send-direct-cast', {
4141
method: 'PUT',
@@ -58,22 +58,22 @@ async function sendDirectMessage(castId: string, userFid: string, authorUsername
5858
}
5959
}
6060

61-
export async function startReminderService() {
62-
console.log('Starting reminder service...');
61+
// export async function startReminderService() {
62+
// console.log('Starting reminder service...');
6363

64-
// Check for due reminders every minute
65-
setInterval(async () => {
66-
console.log("Checking for pending reminders...")
67-
try {
68-
const pendingReminders = await getPendingReminders();
64+
// // Check for due reminders every minute
65+
// setInterval(async () => {
66+
// console.log("Checking for pending reminders...")
67+
// try {
68+
// const pendingReminders = await getPendingReminders();
6969

70-
for (const reminder of pendingReminders) {
71-
await sendDirectMessage(reminder.castId, reminder.userFid, reminder.authorUsername);
72-
await markReminderAsProcessed(reminder.id);
73-
console.log(`Processed reminder ${reminder.id} for cast ${reminder.castId}`);
74-
}
75-
} catch (error) {
76-
console.error('Error processing reminders:', error);
77-
}
78-
}, 60000); // 60000ms = 1 minute
79-
}
70+
// for (const reminder of pendingReminders) {
71+
// await sendDirectMessage(reminder.castId, reminder.userFid, reminder.authorUsername);
72+
// await markReminderAsProcessed(reminder.id);
73+
// console.log(`Processed reminder ${reminder.id} for cast ${reminder.castId}`);
74+
// }
75+
// } catch (error) {
76+
// console.error('Error processing reminders:', error);
77+
// }
78+
// }, 60000); // 60000ms = 1 minute
79+
// }

vercel.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"crons": [{
3+
"path": "/api/cron",
4+
"schedule": "* * * * *"
5+
}]
6+
}

0 commit comments

Comments
 (0)