import dotenv from 'dotenv'
dotenv.config()
import { handleDeliveryMessage } from './delivery.js'
import { handleReservationMessage } from './reservations.js'
import { Client, GatewayIntentBits, Partials } from 'discord.js'
import { logger } from './utils.js'
import {extractIntentAndAgent} from './openai/master_functions.js'
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.DirectMessages,
],
partials: [Partials.Channel],
})
const botToken = process.env.DISCORD_BOT_TOKEN
const activityChannelId = process.env.DISCORD_ACTIVITY_CHANNEL_ID
client.on('ready', () => {
logger(`Logged in as ${client.user.tag}!`)
})
client.on('messageCreate', async (message) => {
if (message.channel.isDMBased() && !message.author.bot) {
logger(`Received DM from ${message.author.username}: ${message.content}`)
const intent = await extractIntentAndAgent(message.content)
if (intent) {
const { agent, messageContent } = intent
switch (agent) {
case 'ReservationAgent':
message.reply('Служителя за резервации се заема...')
logActivity(`${message.author.username}: ${message.content}`)
handleReservationMessage(message)
break
case 'DeliveryAgent':
message.reply('Служителя за доставки се заема...')
logActivity(`${message.author.username}: ${message.content}`)
handleDeliveryMessage(message)
break
case 'Unknown':
default:
message.reply(messageContent)
}
} else {
// In case something goes wrong, provide a generic fallback
message.reply('Извинявайте, възникна проблем. Опитайте отново по-късно.')
}
}
})
const logActivity = async (activityMessage) => {
const channel = await client.channels.fetch(activityChannelId)
await channel.send(activityMessage)
}
client.login(botToken)