From 913b2d6964a29abb00876a900ec86b5274f0426d Mon Sep 17 00:00:00 2001 From: gsd Date: Mon, 27 Feb 2023 19:50:35 +0300 Subject: [PATCH] first init --- .gitignore | 33 ++++++++++++ pom.xml | 50 ++++++++++++++++++ src/main/java/marusia/MarusiaApplication.java | 13 +++++ .../marusia/controllers/FileController.java | 33 ++++++++++++ .../marusia/controllers/SkillsController.java | 32 +++++++++++ .../java/marusia/entities/BaseRequest.java | 30 +++++++++++ .../java/marusia/entities/MarusiaRequest.java | 43 +++++++++++++++ src/main/java/marusia/enums/AudioType.java | 5 ++ src/main/resources/application.yaml | 2 + src/main/resources/files/i_za_moe_ochko.mp3 | Bin 0 -> 26250 bytes .../java/marusia/MarusiaApplicationTests.java | 13 +++++ 11 files changed, 254 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/marusia/MarusiaApplication.java create mode 100644 src/main/java/marusia/controllers/FileController.java create mode 100644 src/main/java/marusia/controllers/SkillsController.java create mode 100644 src/main/java/marusia/entities/BaseRequest.java create mode 100644 src/main/java/marusia/entities/MarusiaRequest.java create mode 100644 src/main/java/marusia/enums/AudioType.java create mode 100644 src/main/resources/application.yaml create mode 100644 src/main/resources/files/i_za_moe_ochko.mp3 create mode 100644 src/test/java/marusia/MarusiaApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..7c41a99 --- /dev/null +++ b/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.0.3 + + + com.example + marusia + 0.0.1-SNAPSHOT + marusia + marusia + + 17 + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + 3.0.2 + + + com.fasterxml.jackson.core + jackson-core + 2.14.2 + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/marusia/MarusiaApplication.java b/src/main/java/marusia/MarusiaApplication.java new file mode 100644 index 0000000..1095ca8 --- /dev/null +++ b/src/main/java/marusia/MarusiaApplication.java @@ -0,0 +1,13 @@ +package marusia; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MarusiaApplication { + + public static void main(String[] args) { + SpringApplication.run(MarusiaApplication.class, args); + } + +} diff --git a/src/main/java/marusia/controllers/FileController.java b/src/main/java/marusia/controllers/FileController.java new file mode 100644 index 0000000..7520d48 --- /dev/null +++ b/src/main/java/marusia/controllers/FileController.java @@ -0,0 +1,33 @@ +package marusia.controllers; + +import org.apache.tomcat.util.http.fileupload.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +@RequestMapping("api/file") +@RestController +public class FileController { + + //бля дяд ну ты дурачек сюда инжектить + @Autowired + ResourceLoader resourceLoader; + + @GetMapping("{filename}") + public ResponseEntity getFile(@PathVariable("filename") String filename) throws IOException { + Resource resource = resourceLoader.getResource("classpath:files/%s".formatted(filename)); + return ResponseEntity + .ok() + .header(HttpHeaders.CONTENT_TYPE, "audio/mpeg") + .body(new InputStreamResource(resource.getInputStream())); + } +} diff --git a/src/main/java/marusia/controllers/SkillsController.java b/src/main/java/marusia/controllers/SkillsController.java new file mode 100644 index 0000000..da6220c --- /dev/null +++ b/src/main/java/marusia/controllers/SkillsController.java @@ -0,0 +1,32 @@ +package marusia.controllers; + +import marusia.entities.MarusiaRequest; +import marusia.enums.AudioType; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +//https://github.com/nonstandardmail/marusia-skill-echo-python/blob/master/handler.py +//https://skill-debugger.marusia.mail.ru/ +//https://dev.vk.com/marusia/api + +@RequestMapping("/api/skills") +@RestController +public class SkillsController { + @PostMapping + public ResponseEntity handler(@RequestBody MarusiaRequest request_json){ + System.out.println(request_json); + System.out.println(request_json.get("command")); + switch (request_json.getCommand()) { + case ("кайф"): + return new ResponseEntity<>(request_json.createTextResponse("всем привет"), HttpStatus.OK); + case ("за ваше здоровье"): + return new ResponseEntity<>(request_json.createAudioResponse(AudioType.vk, "27919760_456239588"), HttpStatus.OK); + default: + return new ResponseEntity<>(request_json.createTextResponse("мммммм"), HttpStatus.OK); + } + } +} diff --git a/src/main/java/marusia/entities/BaseRequest.java b/src/main/java/marusia/entities/BaseRequest.java new file mode 100644 index 0000000..27272da --- /dev/null +++ b/src/main/java/marusia/entities/BaseRequest.java @@ -0,0 +1,30 @@ +package marusia.entities; + +import java.util.HashMap; +import java.util.Map; + +public class BaseRequest extends HashMap { + public Map getSessionInfo() { + return Map.of( + "session_id", ((HashMap) this.get("session")).get("session_id"), + "user_id", ((HashMap) this.get("session")).get("user_id"), + "message_id", ((HashMap) this.get("session")).get("message_id") + ); + } + + public HashMap getRequest() { + return (HashMap) this.get("request"); + } + + public Object getVersion() { + return this.get("version"); + } + + public String getCommand() { + return (String) getRequest().get("command"); + } + + public boolean checkCommand(String text) { + return getCommand().equals(text); + } +} diff --git a/src/main/java/marusia/entities/MarusiaRequest.java b/src/main/java/marusia/entities/MarusiaRequest.java new file mode 100644 index 0000000..14b608d --- /dev/null +++ b/src/main/java/marusia/entities/MarusiaRequest.java @@ -0,0 +1,43 @@ +package marusia.entities; + +import marusia.enums.AudioType; + +import java.util.List; +import java.util.Map; + +public class MarusiaRequest extends BaseRequest { + public Map createTextResponse(String text, String tts) { + return Map.of( + "response", Map.of( + "text", text, + "tts", tts, + "end_session", false + ), + "session", getSessionInfo(), + "version", getVersion() + ); + } + + public Map createTextResponse(String text) { + return createTextResponse(text, text); + } + + public Map createAudioResponse(AudioType audioType, String source) { + return Map.of( + "session", getSessionInfo(), + "version", getVersion(), + "response", Map.of("audio_player", Map.of( + "seek_track", 0, + "seek_second", 0, + "playlist", List.of( + Map.of("stream", Map.of( + "source_type", audioType.name(), + "source", source, + "track_id", source + )) + ) + ), "end_session", false + ) + ); + } +} diff --git a/src/main/java/marusia/enums/AudioType.java b/src/main/java/marusia/enums/AudioType.java new file mode 100644 index 0000000..ae5c109 --- /dev/null +++ b/src/main/java/marusia/enums/AudioType.java @@ -0,0 +1,5 @@ +package marusia.enums; + +public enum AudioType { + vk, url +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..5217df1 --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,2 @@ +server: + port: 8889 \ No newline at end of file diff --git a/src/main/resources/files/i_za_moe_ochko.mp3 b/src/main/resources/files/i_za_moe_ochko.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2e1f4c05f6a6d77c1eb52ea73a4acff4a2afe5d9 GIT binary patch literal 26250 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 literal 0 HcmV?d00001 diff --git a/src/test/java/marusia/MarusiaApplicationTests.java b/src/test/java/marusia/MarusiaApplicationTests.java new file mode 100644 index 0000000..4077da1 --- /dev/null +++ b/src/test/java/marusia/MarusiaApplicationTests.java @@ -0,0 +1,13 @@ +package marusia; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class MarusiaApplicationTests { + + @Test + void contextLoads() { + } + +}