olexnzarov / telegraf-session-mongodb

MongoDB session middleware for Telegraf
25 stars 14 forks source link

Error MongoDB Session #18

Closed ekawibisono closed 1 year ago

ekawibisono commented 1 year ago

Hello, I want to ask, I'm getting an error while running mongodb for telegram bot. the error is Error connecting to MongoDB: TypeError: session is not a constructor. Here I show the code file database.js

const connectToDatabase = async () => {
  try {
    const uri = process.env.MONGODB_URI;
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
    await client.connect();
    console.log('Connected to MongoDB successfully');
    const db = client.db();
    const sessions = new session(db, {
      collectionName: 'session',
      sessionName: 'telegrafSessions'
    });
    return { db, sessions };
  } catch (error) {
    console.error('Error connecting to MongoDB:', error);
    throw error;
  }
};

The modules that I installed on database.js

const { MongoClient } = require('mongodb');
const { session } = require('telegraf-session-mongodb');

Here is the index.js file for connecting to the database.js file

const { Telegraf, Markup } = require('telegraf');
const { connectToDatabase, saveUserSession, saveUserLog } = require('./src/database');
// Connect database
connectToDatabase()
.then(({ db, sessions }) => {
    // Middleware session user
    bot.use(sessions.middleware());

    bot.use(async (ctx, next) => {
      ctx.session.db = db; // insert object db session
      await next();
    });

    // Middleware save user telegram
    bot.use((ctx, next) => {
      saveUserSession(db, ctx.session)
        .then(() => next())
        .catch((error) => {
          console.error('Error saving user session:', error);
          ctx.reply('Oops! Something went wrong.');
        });
    });
    // Middleware save log user telegram
    bot.use((ctx, next) => {
      const log = {
        session_id: ctx.session.session_id,
        user_id: ctx.from.id,
        timestamp: new Date(),
        message: ctx.message.text
      };
      saveUserLog(db, log);
      return next();
    });

Please help to fix error this. Thanks