Как правильно организовать соединение tg WebApp с tg ботом

Не знал как организовать сессию что бы пользователь открыв WebApp видел свои данные из БД. Попытался через GPT сделать и чет не работает подскажите пожалуйста. Надо в класс Dragons во фронте вывести значение из БД.

Backend:

const express = require('express')
const TelegramApi = require('node-telegram-bot-api')
const mysql = require('mysql2')
const PORT = process.env.PORT || 3002
const {useState, useEffect} = require('react')
const bodyParser =require('body-parser')
const cookieParser = require('cookie-parser');
const session = require('express-session');
const cors = require('cors')

let chatids = null;
const app = express()
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(bodyParser())
app.listen(PORT, () =>{
    console.log(`Сервер запущен на ${PORT} порту`)
})
const WebApps = "https://backend-drc.ru/"
const token = ""
const connection = mysql.createConnection({
  host: "",
  user: "",
  database: "",
  password: ""
})
connection.connect(function(err){
  if(err) {
      return console.error(`Ошибка подключения! Код: `+ err)
  }else{
      console.log(`Покдлючение к БД успешно установлено!`)
  }
})
app.use(session({
  secret: 'telegram-api-game-session-ids-bindex',
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: true,
    maxAge: 1000 * 60 * 60 * 24 // 1 день
  }
}));
const bot = new TelegramApi(token, {polling: true})
  bot.on('message', async msg =>{
  const text = msg.text;
  const uggs = msg.chat.username;
  chatids = msg.chat.id;
  if(text === '/start'){
      /*const ins = "INSERT INTO `users` (`idteleg`,`chatids`, `usnames`, `Dragons`, `Hunters`, `Defends`, `DRCcoin`, `DRGcoin`) VALUES (NULL,?,?,10,0,0,10,100)"
      const into = [chatids, uggs]
      await connection.execute(ins, into,(err, results) =>{
      })
      console.log('Пользователь создан!')*/
    await bot.sendPhoto(chatids, "Logo.png")
    await bot.sendMessage(chatids,"Dragon Village is build on ....",{
      reply_markup: {
        inline_keyboard:[
          [{text:'Go to Dragon village', web_app:{url: WebApps}}]
        ]
      }
    })
  }
  app.get('/user', async (req, res) => {
    const telegramId = req.session.telegramId;
    try {
      // Получение данных пользователя из базы данных
      const [rows] = await connection.execute('SELECT * FROM users WHERE telegram_id = ?', [telegramId]);
  
      // Сохранение данных пользователя в сессию
      req.session.user = rows[0];
      // Отправка данных пользователю
      res.json(rows[0]);
    } catch (err) {
      console.error(err);
      res.status(500).send('Internal server error');
    }
  });
  app.get('/init', (req, res) => {
    // Получение telegramId из запроса
    const telegramId = req.query.telegramId;
  
    // Сохранение telegramId в сессию
    req.session.telegramId = telegramId;
  
    res.send('Session initialized!');
  });

})
  app.post('/chatback', (req, res) => {
  let data = [req.body.Hunters]
  const zapros = "UPDATE `users` SET `Dragons`=? WHERE `users`.`usnames` = ?"
  const params = [data, uggs]
  connection.execute(zapros,params,(err, results) =>{
    !err ? res.json(results) : res.json(err)
  })
  console.log(JSON.stringify(data))
  })
  app.get('/back1',(req, res) =>{
    connection.execute("SELECT `totBank` FROM `stage`",(err, results) => {
        if (err) {
          console.log(err)
          return;
        }
          res.json({
          banks: results[0].totBank
        });
      });
  })
  app.get('/back2',(req, res) =>{
    connection.execute("SELECT `Seasons` FROM `stage`", (err, results) => {
        if (err) {
            console.log(err)
            return;
        }
            res.json({
              seasons: results[0].Seasons
      });
   });
  })
  app.get('/back3',(req, res) =>{
    connection.execute("SELECT `toStage` FROM `stage`", (err, results) => {
      if (err) {
          console.log(err)
          return;
        }
          res.json({
          stages: results[0].toStage
      });
    });
  })
  app.get('/back4',(req, res) =>{
    connection.execute("SELECT `tOnline` FROM `stage`", (err, results) => {
        if (err) {
          console.log(err)
          return;
        }
          res.json({
          online: results[0].tOnline
        });
      });
  })
  app.use(cors());

Кусок Frontend'а:

import './Menu.scss'
import React,{useState, useEffect} from 'react';
import axios from 'axios';
export const Menu =()=>{
  const [userData, setUserData] = useState(null);

  useEffect(() => {
    // Получение telegramId из window.tg.initDataUnsafe
    const telegramId = window.tg.initDataUnsafe.user.id;

    // Инициализация сессии
    fetch('http://localhost:3000/init?telegramId='+telegramId)
      .then(res => res.json())
      .then(() => {
        // Получение данных пользователя с сервера
        fetch('http://localhost:3000/user')
          .then(res => res.json())
          .then(data => setUserData(data))
          .catch(err => console.error(err));
      })
      .catch(err => console.error(err));
  }, []);
    const ClickedInfo = () =>{
       alert('Инфо!!')
    }
    return(
        <div className="Menu">
            <div className="Info_Bar" onClick={ClickedInfo}></div>
            <div className="Dragons">Dragon dynasty:{userData.Dragons}</div>
            <div className="Info"> The main inhabitants of the village</div>
        </div>
        )
}

В БД есть таблица users с полями telegram_id, usnames, Dragons, надо отсюда взять значение dragons по telegram_id и правильно передать на фронт. Если что напишите на @alihan003 может за услугу договоримся?!


Ответы (0 шт):