vkashti-bots / master.js
master.js
Raw
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)