Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 49 additions & 22 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,72 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- Cambiar la versión de Spring Boot a 2.7.15 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<version>2.7.15</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>umg.TelegramBot</groupId>
<artifactId>TelegramBot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>TelegramBot</name>
<description>Proyecto para Crear un Bot de Telegram y conectarlo con la API de ChatGpt</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>

<properties>
<java.version>17</java.version>
</properties>
<dependencies>

<dependencies>
<!-- Dependencia para Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>


<!-- Dependencia para Telegram Bots -->
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-spring-boot-starter</artifactId>
<version>6.1.0</version>
</dependency>




<!-- Dependencia para Spring Boot DevTools (opcional) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>

<!-- Dependencia para Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

<!-- Dependencia para Spring Boot Starter Test (opcional) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!-- Dependencia para Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- Dependencia para MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<!-- Dependencias de JAXB para Java 9+ -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>

<!-- Dependencia para Swagger/OpenAPI (si la necesitas) -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.15</version>
</dependency>

</dependencies>
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/umg/TelegramBot/ClienteService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package umg.TelegramBot.Service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class ClienteService {

@Autowired
private JdbcTemplate jdbcTemplate;

public void guardarCliente(String nombre) {
String sql = "INSERT INTO clientes (nombre) VALUES (?)";
jdbcTemplate.update(sql, nombre);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package umg.TelegramBot.Controller;

import org.springframework.web.bind.annotation.*;
import umg.TelegramBot.Model.Request;
import umg.TelegramBot.Repository.RequestRepository;

import java.util.List;

@RestController
@RequestMapping("/api/requests")
public class TelegramBotController {

private final RequestRepository requestRepository;

public TelegramBotController(RequestRepository requestRepository) {
this.requestRepository = requestRepository;
}

@GetMapping
public List<Request> getAllRequests() {
return requestRepository.findAll();
}

@GetMapping("/{id}")
public Request getRequestById(@PathVariable Integer id) {
return requestRepository.findById(id).orElse(null);
}
}
20 changes: 20 additions & 0 deletions src/main/java/umg/TelegramBot/Model/Client.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package umg.TelegramBot.Model;

import jakarta.persistence.*;
import lombok.Data;

@Data
@Entity
@Table(name = "clients")
public class Client {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer client;

@Column(nullable = false)
private Long chatId; // ID único del usuario en Telegram

@Column(nullable = false)
private String name;
}
25 changes: 25 additions & 0 deletions src/main/java/umg/TelegramBot/Model/Request.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package umg.TelegramBot.Model;

import jakarta.persistence.*;
import lombok.Data;

@Data
@Entity
@Table(name = "requests")
public class Request {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer request;

@Column(nullable = false, length = 2000)
private String question;

@Lob
@Column(nullable = false)
private String response;

@ManyToOne
@JoinColumn(name = "cliente", nullable = false)
private Client cliente;
}
12 changes: 12 additions & 0 deletions src/main/java/umg/TelegramBot/Repository/ClientRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package umg.TelegramBot.Repository;

import org.springframework.stereotype.Repository;
import umg.TelegramBot.Model.Client;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;
@Repository
public interface ClientRepository extends JpaRepository<Client, Integer> {
Optional<Client> findByName(String name);
}
11 changes: 11 additions & 0 deletions src/main/java/umg/TelegramBot/Repository/RequestRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package umg.TelegramBot.Repository;

import org.springframework.stereotype.Repository;
import umg.TelegramBot.Model.Request;
import org.springframework.data.jpa.repository.JpaRepository;

@Repository
public interface RequestRepository extends JpaRepository<Request, Integer> {
// Métodos personalizados si son necesarios
}

80 changes: 59 additions & 21 deletions src/main/java/umg/TelegramBot/Service/TelegramBotService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import umg.TelegramBot.Model.Client;
import umg.TelegramBot.Model.Request;
import umg.TelegramBot.Repository.ClientRepository;
import umg.TelegramBot.Repository.RequestRepository;
import java.util.Optional;

@Service
public class TelegramBotService extends TelegramLongPollingBot {
Expand All @@ -20,42 +25,75 @@ public class TelegramBotService extends TelegramLongPollingBot {
@Autowired
private OpenAIService openAIService;

@Autowired
private ClientRepository clientRepository;

@Autowired
private RequestRepository requestRepository;

@Override
public void onUpdateReceived(Update update) {
// Verificar que el mensaje sea de texto
if (update.hasMessage() && update.getMessage().hasText()) {
String messageTextReceived = update.getMessage().getText();
long chatId = update.getMessage().getChatId();

System.out.println("Mensaje recibido: " + messageTextReceived);

// Obtener la respuesta de OpenAI
String botResponse = openAIService.getChatResponse(messageTextReceived);

// Enviar la respuesta al usuario
SendMessage message = new SendMessage();
message.setChatId(String.valueOf(chatId));
message.setText(botResponse);

try {
execute(message);
} catch (TelegramApiException e) {
e.printStackTrace();
Long chatId = update.getMessage().getChatId();
String userName = update.getMessage().getChat().getFirstName();

// Buscamos si el usuario ya está registrado por su chatId
Optional<Client> optionalClient = clientRepository.findById(chatId.intValue());

if (optionalClient.isEmpty()) {
// Si no está registrado, le pedimos su nombre
if (messageTextReceived.equalsIgnoreCase("/start")) {
sendMessage(chatId, "Hola, ¿cómo te llamas?");
} else {
// Registramos al usuario
Client client = new Client();
client.setClient(chatId.intValue());
client.setName(messageTextReceived);
clientRepository.save(client);

sendMessage(chatId, "Hola " + messageTextReceived + ", ¿cuál es tu pregunta?");
}
} else {
// Usuario registrado, procedemos con ChatGPT
Client client = optionalClient.get();

// Obtenemos la respuesta de OpenAI
String botResponse = openAIService.getChatResponse(messageTextReceived);

// Guardamos la interacción en la base de datos
Request request = new Request();
request.setQuestion(messageTextReceived);
request.setResponse(botResponse);
request.setCliente(client);
requestRepository.save(request);

// Enviamos la respuesta al usuario
sendMessage(chatId, botResponse);
}
}
}

private void sendMessage(Long chatId, String text) {
SendMessage message = new SendMessage();
message.setChatId(chatId.toString());
message.setText(text);

try {
execute(message);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}

@Override
public String getBotUsername() {

return botUsername;
return botUsername; // Define el nombre de usuario de tu bot
}

@Override
public String getBotToken() {

return botToken;
return botToken; // Define el token de tu bot
}


Expand Down
1 change: 1 addition & 0 deletions src/main/java/umg/TelegramBot/TelegramBotApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import umg.TelegramBot.Service.TelegramBotService;

@SpringBootApplication

public class TelegramBotApplication implements CommandLineRunner {

@Autowired
Expand Down
19 changes: 18 additions & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,21 @@ telegram.bot.username=G4Proga2_bot
telegram.bot.token=7632187479:AAHy2vvL_cyZKs36X_8u5NTYuyZjROWlRJU

# ApiKey de OpenAI
openai.api.key=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
openai.api.key=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


#Configuraci�n JPA
spring.datasource.url=jdbc:mysql://localhost:3306/telegram_bot?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=



# Para poder visualizar las consultas
spring.jpa.show-sql=true

# Actualizar el esquema cada vez que se ejecute
spring.jpa.hibernate.ddl-auto=update


spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect