From 384eec43fa6aa79ad2cb49a7bbec15f4f3491206 Mon Sep 17 00:00:00 2001 From: Julien Lengrand-Lambert Date: Fri, 5 Mar 2021 15:17:18 +0100 Subject: [PATCH] Create repository --- .gitignore | 88 +++ LICENSE | 96 +++ ask-resources.json | 23 + lambda/pom.xml | 61 ++ .../GithubTemplatesStreamHandler.java | 40 + .../data/GithubDataGrabber.java | 72 ++ .../handlers/CancelandStopIntentHandler.java | 35 + .../CreateRepositoryIntentHandler.java | 62 ++ .../handlers/FallbackIntentHandler.java | 31 + .../handlers/HelloWorldIntentHandler.java | 36 + .../handlers/HelpIntentHandler.java | 37 + .../handlers/LaunchRequestHandler.java | 38 + .../handlers/LoggedInIntentHandler.java | 39 + .../handlers/SessionEndedRequestHandler.java | 35 + skill-package/assets/en-GB_largeIcon.png | Bin 0 -> 41316 bytes skill-package/assets/en-GB_smallIcon.png | Bin 0 -> 12447 bytes .../interactionModels/custom/en-GB.json | 725 ++++++++++++++++++ skill-package/skill.json | 29 + 18 files changed, 1447 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 ask-resources.json create mode 100644 lambda/pom.xml create mode 100644 lambda/src/com/amazon/ask/githubtemplates/GithubTemplatesStreamHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/data/GithubDataGrabber.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/CancelandStopIntentHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/CreateRepositoryIntentHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/FallbackIntentHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/HelloWorldIntentHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/HelpIntentHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/LaunchRequestHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/LoggedInIntentHandler.java create mode 100644 lambda/src/com/amazon/ask/githubtemplates/handlers/SessionEndedRequestHandler.java create mode 100644 skill-package/assets/en-GB_largeIcon.png create mode 100644 skill-package/assets/en-GB_smallIcon.png create mode 100644 skill-package/interactionModels/custom/en-GB.json create mode 100644 skill-package/skill.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..41a7ed9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,88 @@ +############################## +## Java +############################## +.mtj.tmp/ +*.class +*.jar +*.war +*.ear +*.nar +hs_err_pid* + +############################## +## Maven +############################## +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +pom.xml.bak +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +############################## +## Gradle +############################## +bin/ +build/ +.gradle +.gradletasknamecache +gradle-app.setting +!gradle-wrapper.jar + +############################## +## IntelliJ +############################## +out/ +.idea/ +.idea_modules/ +*.iml +*.ipr +*.iws + +############################## +## Eclipse +############################## +.settings/ +bin/ +tmp/ +.metadata +.classpath +.project +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath +.factorypath + +############################## +## NetBeans +############################## +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml + +############################## +## Visual Studio Code +############################## +.vscode/ +.code-workspace + +############################## +## OS X +############################## +.DS_Store + +.githubconfig +.ask +.github/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..44b3db7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,96 @@ +Amazon Software License 1.0 + +This Amazon Software License ("License") governs your use, reproduction, and +distribution of the accompanying software as specified below. + +1. Definitions + + "Licensor" means any person or entity that distributes its Work. + + "Software" means the original work of authorship made available under this + License. + + "Work" means the Software and any additions to or derivative works of the + Software that are made available under this License. + + The terms "reproduce," "reproduction," "derivative works," and + "distribution" have the meaning as provided under U.S. copyright law; + provided, however, that for the purposes of this License, derivative works + shall not include works that remain separable from, or merely link (or bind + by name) to the interfaces of, the Work. + + Works, including the Software, are "made available" under this License by + including in or with the Work either (a) a copyright notice referencing the + applicability of this License to the Work, or (b) a copy of this License. + +2. License Grants + + 2.1 Copyright Grant. Subject to the terms and conditions of this License, + each Licensor grants to you a perpetual, worldwide, non-exclusive, + royalty-free, copyright license to reproduce, prepare derivative works of, + publicly display, publicly perform, sublicense and distribute its Work and + any resulting derivative works in any form. + + 2.2 Patent Grant. Subject to the terms and conditions of this License, each + Licensor grants to you a perpetual, worldwide, non-exclusive, royalty-free + patent license to make, have made, use, sell, offer for sale, import, and + otherwise transfer its Work, in whole or in part. The foregoing license + applies only to the patent claims licensable by Licensor that would be + infringed by Licensor's Work (or portion thereof) individually and + excluding any combinations with any other materials or technology. + +3. Limitations + + 3.1 Redistribution. You may reproduce or distribute the Work only if + (a) you do so under this License, (b) you include a complete copy of this + License with your distribution, and (c) you retain without modification + any copyright, patent, trademark, or attribution notices that are present + in the Work. + + 3.2 Derivative Works. You may specify that additional or different terms + apply to the use, reproduction, and distribution of your derivative works + of the Work ("Your Terms") only if (a) Your Terms provide that the use + limitation in Section 3.3 applies to your derivative works, and (b) you + identify the specific derivative works that are subject to Your Terms. + Notwithstanding Your Terms, this License (including the redistribution + requirements in Section 3.1) will continue to apply to the Work itself. + + 3.3 Use Limitation. The Work and any derivative works thereof only may be + used or intended for use with the web services, computing platforms or + applications provided by Amazon.com, Inc. or its affiliates, including + Amazon Web Services, Inc. + + 3.4 Patent Claims. If you bring or threaten to bring a patent claim against + any Licensor (including any claim, cross-claim or counterclaim in a + lawsuit) to enforce any patents that you allege are infringed by any Work, + then your rights under this License from such Licensor (including the + grants in Sections 2.1 and 2.2) will terminate immediately. + + 3.5 Trademarks. This License does not grant any rights to use any + Licensor's or its affiliates' names, logos, or trademarks, except as + necessary to reproduce the notices described in this License. + + 3.6 Termination. If you violate any term of this License, then your rights + under this License (including the grants in Sections 2.1 and 2.2) will + terminate immediately. + +4. Disclaimer of Warranty. + + THE WORK IS PROVIDED "AS IS" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + EITHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OR CONDITIONS OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR + NON-INFRINGEMENT. YOU BEAR THE RISK OF UNDERTAKING ANY ACTIVITIES UNDER + THIS LICENSE. SOME STATES' CONSUMER LAWS DO NOT ALLOW EXCLUSION OF AN + IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO YOU. + +5. Limitation of Liability. + + EXCEPT AS PROHIBITED BY APPLICABLE LAW, IN NO EVENT AND UNDER NO LEGAL + THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE + SHALL ANY LICENSOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, + INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR + RELATED TO THIS LICENSE, THE USE OR INABILITY TO USE THE WORK (INCLUDING + BUT NOT LIMITED TO LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOST PROFITS + OR DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY OTHER COMM ERCIAL DAMAGES + OR LOSSES), EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. diff --git a/ask-resources.json b/ask-resources.json new file mode 100644 index 0000000..d16882b --- /dev/null +++ b/ask-resources.json @@ -0,0 +1,23 @@ +{ + "askcliResourcesVersion": "2020-03-31", + "profiles": { + "default": { + "skillMetadata": { + "src": "./skill-package" + }, + "code": { + "default": { + "src": "./lambda" + } + }, + "skillInfrastructure": { + "userConfig": { + "runtime": "java11", + "handler": "com.amazon.ask.githubtemplates.GithubTemplatesStreamHandler", + "awsRegion": "eu-west-1" + }, + "type": "@ask-cli/lambda-deployer" + } + } + } +} \ No newline at end of file diff --git a/lambda/pom.xml b/lambda/pom.xml new file mode 100644 index 0000000..014469f --- /dev/null +++ b/lambda/pom.xml @@ -0,0 +1,61 @@ + + 4.0.0 + alexa-skills-kit-samples + helloworld + jar + 1.0 + helloworld + http://developer.amazon.com/ask + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + Alexa Skills Kit + ask-sdk-java@amazon.com + Alexa + http://developer.amazon.com/ask + + + + scm:git:https://github.com/amzn/alexa-skills-kit-java.git + scm:git:https://github.com/amzn/alexa-skills-kit-java.git + https://github.com/amzn/alexa-skills-kit-java.git + + + + + com.amazon.alexa + ask-sdk + 2.20.2 + + + org.kohsuke + github-api + 1.122 + + + + + src + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + 11 + 11 + true + + + + + + + diff --git a/lambda/src/com/amazon/ask/githubtemplates/GithubTemplatesStreamHandler.java b/lambda/src/com/amazon/ask/githubtemplates/GithubTemplatesStreamHandler.java new file mode 100644 index 0000000..5caa6c8 --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/GithubTemplatesStreamHandler.java @@ -0,0 +1,40 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates; + +import com.amazon.ask.Skill; +import com.amazon.ask.Skills; +import com.amazon.ask.SkillStreamHandler; +import com.amazon.ask.githubtemplates.handlers.*; + +public class GithubTemplatesStreamHandler extends SkillStreamHandler { + + private static Skill getSkill() { + return Skills.standard() + .addRequestHandlers( + new CancelandStopIntentHandler(), + new HelloWorldIntentHandler(), + new LoggedInIntentHandler(), + new HelpIntentHandler(), + new LaunchRequestHandler(), + new SessionEndedRequestHandler(), + new FallbackIntentHandler(), + new CreateRepositoryIntentHandler() + ) + .withSkillId("amzn1.ask.skill.e88f24da-5860-4ff8-a674-338c62768016") + .build(); + } + + public GithubTemplatesStreamHandler() { + super(getSkill()); + } + +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/data/GithubDataGrabber.java b/lambda/src/com/amazon/ask/githubtemplates/data/GithubDataGrabber.java new file mode 100644 index 0000000..e83f77c --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/data/GithubDataGrabber.java @@ -0,0 +1,72 @@ +package com.amazon.ask.githubtemplates.data; + +import org.kohsuke.github.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +public class GithubDataGrabber { + + private Map languagesAndTemplates = + Map.of( + "java", "https://github.com/Spring-Boot-Framework/Spring-Boot-Application-Template", + "typescript", "https://github.com/carsonfarmer/ts-template" + ); + + private GitHub githubApi; + + public GithubDataGrabber(GitHub gitHub){ + this.githubApi = gitHub; + } + +// public static void main(String[] args) throws IOException { +// System.out.println("Grabbing data from your GitHub profile!"); +// +// Path githubConfigPath = Paths.get(Paths.get(System.getProperty("user.dir")).toString(), ".github"); +// if(!new File(githubConfigPath.toString()).exists()){ +// System.out.println("No GitHub config file found, exiting."); +// System.exit(0); +// } +// +// GitHub github = GitHubBuilder.fromPropertyFile(githubConfigPath.toString()).build(); +// +// GithubDataGrabber githubHello = new GithubDataGrabber(github); +// +// githubHello.getLanguages("jlengrand").forEach(System.out::println); +// System.out.println("------"); +// githubHello.getRepositories("jlengrand").forEach(System.out::println); +// } + + public Set getLanguages(String username) throws IOException { + PagedIterable repos = this.githubApi.getUser(username).listRepositories(); + + return StreamSupport.stream(repos.spliterator(), false) + .map(repo -> repo.getLanguage()) + .filter(s -> s != null) + .collect(Collectors.toSet()); + } + + public List getRepositories(String username) throws IOException { + PagedIterable repos = this.githubApi.getUser(username).listRepositories(); + + return StreamSupport.stream(repos.spliterator(), false) + .map(repo -> sanitize(repo.getName())) + .filter(s -> s != null) + .collect(Collectors.toList()); + } + + public String sanitize(String value) { + return value + .replace("-", " ") + .replace("_", " "); + } + +} \ No newline at end of file diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/CancelandStopIntentHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/CancelandStopIntentHandler.java new file mode 100644 index 0000000..4175b56 --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/CancelandStopIntentHandler.java @@ -0,0 +1,35 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.Response; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.intentName; + +public class CancelandStopIntentHandler implements RequestHandler { + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(intentName("AMAZON.StopIntent").or(intentName("AMAZON.CancelIntent"))); + } + + @Override + public Optional handle(HandlerInput input) { + String speechText = "Got you. Till next time!"; + return input.getResponseBuilder() + .withSpeech(speechText) + .build(); + } +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/CreateRepositoryIntentHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/CreateRepositoryIntentHandler.java new file mode 100644 index 0000000..f9a6df4 --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/CreateRepositoryIntentHandler.java @@ -0,0 +1,62 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.IntentRequest; +import com.amazon.ask.model.Response; +import com.amazon.ask.model.Slot; + +import java.util.Map; +import java.util.Optional; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static com.amazon.ask.request.Predicates.intentName; + +public class CreateRepositoryIntentHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(intentName("CreateRepositoryIntent")); + } + + @Override + public Optional handle(HandlerInput input) { + Logger logger = Logger.getAnonymousLogger(); + + String username = System.getenv("GH_USERNAME"); + String key = System.getenv("GH_APIKEY"); + + IntentRequest intentRequest = (IntentRequest) input.getRequestEnvelope().getRequest(); + Map slots = intentRequest.getIntent().getSlots(); + + for (Map.Entry entry : slots.entrySet()) { + logger.log(Level.SEVERE, entry.getKey() + ":" + entry.getValue().getValue() + ":" + entry.getValue().getName()); + } + String speechText; + if(username != null && key != null) { + String language = slots.get("language").getValue(); + String title = slots.get("title").getValue(); + + speechText = "Let's go with " + language + " and " + title + " !"; + } + else{ + speechText = "Sorry, you are not logged in! I cannot create new repositories"; + } + + return input.getResponseBuilder() + .withSpeech(speechText) + .build(); + } + +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/FallbackIntentHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/FallbackIntentHandler.java new file mode 100644 index 0000000..8b97ae4 --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/FallbackIntentHandler.java @@ -0,0 +1,31 @@ +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.Response; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.intentName; + +// 2018-July-09: AMAZON.FallackIntent is only currently available in en-US locale. +// This handler will not be triggered except in that locale, so it can be +// safely deployed for any locale. +public class FallbackIntentHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(intentName("AMAZON.FallbackIntent")); + } + + @Override + public Optional handle(HandlerInput input) { + String speechText = "Sorry, I didn't get that. Care to try again ?"; + String repromptText = "Still didn' get that, sorry."; + return input.getResponseBuilder() + .withSpeech(speechText) + .withReprompt(repromptText) + .build(); + } + +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/HelloWorldIntentHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/HelloWorldIntentHandler.java new file mode 100644 index 0000000..8436650 --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/HelloWorldIntentHandler.java @@ -0,0 +1,36 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.Response; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.intentName; + +public class HelloWorldIntentHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(intentName("HelloWorldIntent")); + } + + @Override + public Optional handle(HandlerInput input) { + String speechText = "Hey there! Looking forward what you're going to ask me!"; + return input.getResponseBuilder() + .withSpeech(speechText) + .build(); + } + +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/HelpIntentHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/HelpIntentHandler.java new file mode 100644 index 0000000..ee15f78 --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/HelpIntentHandler.java @@ -0,0 +1,37 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.Response; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.intentName; + +public class HelpIntentHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(intentName("AMAZON.HelpIntent")); + } + + @Override + public Optional handle(HandlerInput input) { + String speechText = "Hey there. Try asking me to create a Java repository!"; + String repromptText = "You can also ask me if you are still logged in Github!"; + return input.getResponseBuilder() + .withSpeech(speechText) + .withReprompt(repromptText) + .build(); + } +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/LaunchRequestHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/LaunchRequestHandler.java new file mode 100644 index 0000000..80bdadd --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/LaunchRequestHandler.java @@ -0,0 +1,38 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.LaunchRequest; +import com.amazon.ask.model.Response; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.requestType; + +public class LaunchRequestHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(requestType(LaunchRequest.class)); + } + + @Override + public Optional handle(HandlerInput input) { + String speechText = "Welcome to GitHub templates! Let's create a repository!"; + return input.getResponseBuilder() + .withSpeech(speechText) + .withReprompt(speechText) + .build(); + } + +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/LoggedInIntentHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/LoggedInIntentHandler.java new file mode 100644 index 0000000..1012b7b --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/LoggedInIntentHandler.java @@ -0,0 +1,39 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.Response; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.intentName; + +public class LoggedInIntentHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(intentName("LoggedInIntent")); + } + + @Override + public Optional handle(HandlerInput input) { + String username = System.getenv("GH_USERNAME"); + String key = System.getenv("GH_APIKEY"); + + String speechText = username == null || key == null ? "Sorry, you are not logged in!" : "Logged in as " + username; + return input.getResponseBuilder() + .withSpeech(speechText) + .build(); + } + +} diff --git a/lambda/src/com/amazon/ask/githubtemplates/handlers/SessionEndedRequestHandler.java b/lambda/src/com/amazon/ask/githubtemplates/handlers/SessionEndedRequestHandler.java new file mode 100644 index 0000000..cea266a --- /dev/null +++ b/lambda/src/com/amazon/ask/githubtemplates/handlers/SessionEndedRequestHandler.java @@ -0,0 +1,35 @@ +/* + Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file + except in compliance with the License. A copy of the License is located at + http://aws.amazon.com/apache2.0/ + or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. +*/ + +package com.amazon.ask.githubtemplates.handlers; + +import com.amazon.ask.dispatcher.request.handler.HandlerInput; +import com.amazon.ask.dispatcher.request.handler.RequestHandler; +import com.amazon.ask.model.Response; +import com.amazon.ask.model.SessionEndedRequest; + +import java.util.Optional; + +import static com.amazon.ask.request.Predicates.requestType; + +public class SessionEndedRequestHandler implements RequestHandler { + + @Override + public boolean canHandle(HandlerInput input) { + return input.matches(requestType(SessionEndedRequest.class)); + } + + @Override + public Optional handle(HandlerInput input) { + // any cleanup logic goes here + return input.getResponseBuilder().build(); + } + +} diff --git a/skill-package/assets/en-GB_largeIcon.png b/skill-package/assets/en-GB_largeIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..28ee1aa79a66324cb0af6accc1f4976c94455927 GIT binary patch literal 41316 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 gmwX)05Dp}WtI4TCu=L6Au=FXG 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%0AQQ+A;%U}qpL#z%U_@L04;4Ir~mB% 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 S`Rio}_|w-h(yrHZ#QYzmZGqAN literal 0 HcmV?d00001 diff --git a/skill-package/assets/en-GB_smallIcon.png b/skill-package/assets/en-GB_smallIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1e0daf5b6208d9263cf7c688899eb4b6ea6522 GIT binary patch literal 12447 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 literal 0 HcmV?d00001 diff --git a/skill-package/interactionModels/custom/en-GB.json b/skill-package/interactionModels/custom/en-GB.json new file mode 100644 index 0000000..2f82060 --- /dev/null +++ b/skill-package/interactionModels/custom/en-GB.json @@ -0,0 +1,725 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "github templates", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "HelloWorldIntent", + "slots": [], + "samples": [ + "say hello", + "say hello world", + "hello", + "say hi", + "say hi world", + "hi", + "how are you" + ] + }, + { + "name": "AMAZON.FallbackIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "LoggedInIntent", + "slots": [], + "samples": [ + "please tell me my username", + "what s my github username", + "am i in github", + "what is my username", + "am i logged in" + ] + }, + { + "name": "CreateRepositoryIntent", + "slots": [ + { + "name": "language", + "type": "GITHUB_LANGUAGE", + "samples": [ + "I want {language}", + "I need {language}", + "{language}" + ] + }, + { + "name": "title", + "type": "GITHUB_TITLE" + } + ], + "samples": [ + "make me a repo called {title}", + "I want a new {language} repo called {title}", + "new {language} repo with name {title}", + "new {language} repository please", + "Create a new repo", + "I need a new repo", + "Create a {language} repository called title in Github", + "I want a new {language} repository in GitHub.", + "Create title and I want it to be a {language} repository", + "I need a new {language} repo. Call it title", + "Create a {language} repository called title" + ] + } + ], + "types": [ + { + "name": "GITHUB_LANGUAGE", + "values": [ + { + "name": { + "value": "CSS" + } + }, + { + "name": { + "value": "Shell" + } + }, + { + "name": { + "value": "Typescript" + } + }, + { + "name": { + "value": "Kotlin" + } + }, + { + "name": { + "value": "HTML" + } + }, + { + "name": { + "value": "Elm" + } + }, + { + "name": { + "value": "Scala" + } + }, + { + "name": { + "value": "c" + } + }, + { + "name": { + "value": "java" + } + } + ] + }, + { + "name": "GITHUB_TITLE", + "values": [ + { + "name": { + "value": "advent of code 2018" + } + }, + { + "name": { + "value": "advent of code 2020" + } + }, + { + "name": { + "value": "alpine node rethinkdb" + } + }, + { + "name": { + "value": "assistant conversation java" + } + }, + { + "name": { + "value": "baker" + } + }, + { + "name": { + "value": "baker recipe tuto" + } + }, + { + "name": { + "value": "batchWaterMarking" + } + }, + { + "name": { + "value": "carbon" + } + }, + { + "name": { + "value": "cellar" + } + }, + { + "name": { + "value": "cellar driver" + } + }, + { + "name": { + "value": "check html links action" + } + }, + { + "name": { + "value": "check html links action test" + } + }, + { + "name": { + "value": "check html links netlify plugin" + } + }, + { + "name": { + "value": "closeme" + } + }, + { + "name": { + "value": "Coding4Interviews" + } + }, + { + "name": { + "value": "coffee voyance" + } + }, + { + "name": { + "value": "conversations" + } + }, + { + "name": { + "value": "create" + } + }, + { + "name": { + "value": "create elm app" + } + }, + { + "name": { + "value": "d3 progress meter" + } + }, + { + "name": { + "value": "design patterns" + } + }, + { + "name": { + "value": "design patterns drawio" + } + }, + { + "name": { + "value": "dialogflow fun" + } + }, + { + "name": { + "value": "dolfijn2.0" + } + }, + { + "name": { + "value": "dotfiles" + } + }, + { + "name": { + "value": "elm dungeon" + } + }, + { + "name": { + "value": "elm firebase" + } + }, + { + "name": { + "value": "elm issues" + } + }, + { + "name": { + "value": "elm language client vscode" + } + }, + { + "name": { + "value": "elm memory" + } + }, + { + "name": { + "value": "elm plural rules" + } + }, + { + "name": { + "value": "elm ports" + } + }, + { + "name": { + "value": "elm webgl playground" + } + }, + { + "name": { + "value": "epaper dashboard blog" + } + }, + { + "name": { + "value": "epaper.js" + } + }, + { + "name": { + "value": "EssentialScala" + } + }, + { + "name": { + "value": "Exposed" + } + }, + { + "name": { + "value": "exposed imdb" + } + }, + { + "name": { + "value": "FaceMovie" + } + }, + { + "name": { + "value": "fortnoxovertime" + } + }, + { + "name": { + "value": "functional programming scala" + } + }, + { + "name": { + "value": "FunctionalProgrammingScalaCoursera" + } + }, + { + "name": { + "value": "fuzzy date" + } + }, + { + "name": { + "value": "github project" + } + }, + { + "name": { + "value": "gitignore" + } + }, + { + "name": { + "value": "gitlab recipes" + } + }, + { + "name": { + "value": "google send money talk" + } + }, + { + "name": { + "value": "hackerrank" + } + }, + { + "name": { + "value": "helidon" + } + }, + { + "name": { + "value": "homemade products" + } + }, + { + "name": { + "value": "image processing" + } + }, + { + "name": { + "value": "ing psd2 test" + } + }, + { + "name": { + "value": "isochrone with google map" + } + }, + { + "name": { + "value": "Ivolution" + } + }, + { + "name": { + "value": "IvolutionWebsite" + } + }, + { + "name": { + "value": "jenkinsArduinoNotification" + } + }, + { + "name": { + "value": "jlengrand.github.io" + } + }, + { + "name": { + "value": "keep a changelog" + } + }, + { + "name": { + "value": "KnowMySize" + } + }, + { + "name": { + "value": "kotlin spring boot elm starter" + } + }, + { + "name": { + "value": "ktor" + } + }, + { + "name": { + "value": "LAFF" + } + }, + { + "name": { + "value": "Leaflet 1" + } + }, + { + "name": { + "value": "linux conf" + } + }, + { + "name": { + "value": "locator" + } + }, + { + "name": { + "value": "MachineLearningCoursera" + } + }, + { + "name": { + "value": "map web component example" + } + }, + { + "name": { + "value": "native utils" + } + }, + { + "name": { + "value": "Observer" + } + }, + { + "name": { + "value": "open wc" + } + }, + { + "name": { + "value": "picasa" + } + }, + { + "name": { + "value": "picocli" + } + }, + { + "name": { + "value": "picocli jfall bitesize 2020" + } + }, + { + "name": { + "value": "pluxml theme darkFuture" + } + }, + { + "name": { + "value": "polymer 3 example" + } + }, + { + "name": { + "value": "polymer array bubble up example" + } + }, + { + "name": { + "value": "polymer dashboard pluralsight" + } + }, + { + "name": { + "value": "polymer hot reloading example" + } + }, + { + "name": { + "value": "polymer summit whose flag" + } + }, + { + "name": { + "value": "polymer summit whose flag polymer 3" + } + }, + { + "name": { + "value": "Programming Tips" + } + }, + { + "name": { + "value": "project euler" + } + }, + { + "name": { + "value": "quarkus" + } + }, + { + "name": { + "value": "quarkus workshop" + } + }, + { + "name": { + "value": "redirectsJekyllToGhost" + } + }, + { + "name": { + "value": "RoBottle" + } + }, + { + "name": { + "value": "rocket" + } + }, + { + "name": { + "value": "scala intro for java guys" + } + }, + { + "name": { + "value": "schopenhauer jfall ignite 2020" + } + }, + { + "name": { + "value": "sheepgame" + } + }, + { + "name": { + "value": "ShowMeYourBigSatellite" + } + }, + { + "name": { + "value": "simpleFoodDiary" + } + }, + { + "name": { + "value": "soundcloud web component application" + } + }, + { + "name": { + "value": "swacli" + } + }, + { + "name": { + "value": "tailwind app" + } + }, + { + "name": { + "value": "therobottle" + } + }, + { + "name": { + "value": "Tippy" + } + }, + { + "name": { + "value": "toggl button" + } + }, + { + "name": { + "value": "twiderboard client" + } + }, + { + "name": { + "value": "twidersite" + } + }, + { + "name": { + "value": "twitterboard" + } + }, + { + "name": { + "value": "undercover" + } + }, + { + "name": { + "value": "vert.x" + } + }, + { + "name": { + "value": "vscode elm signature" + } + }, + { + "name": { + "value": "web components workshop" + } + }, + { + "name": { + "value": "web components workshop deprecated" + } + }, + { + "name": { + "value": "web components workshop polymer" + } + }, + { + "name": { + "value": "webcomponentsjs" + } + }, + { + "name": { + "value": "xuggle xuggler" + } + } + ] + } + ] + }, + "dialog": { + "intents": [ + { + "name": "CreateRepositoryIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "language", + "type": "GITHUB_LANGUAGE", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.1247776455707.488691447960" + } + }, + { + "name": "title", + "type": "GITHUB_TITLE", + "confirmationRequired": false, + "elicitationRequired": false, + "prompts": {} + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.1247776455707.488691447960", + "variations": [ + { + "type": "PlainText", + "value": "Which language do you need" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/skill-package/skill.json b/skill-package/skill.json new file mode 100644 index 0000000..b63f5d1 --- /dev/null +++ b/skill-package/skill.json @@ -0,0 +1,29 @@ +{ + "manifest": { + "publishingInformation": { + "locales": { + "en-GB": { + "summary": "Sample Short Description", + "examplePhrases": [ + "Alexa open github templates", + "github templates please" + ], + "name": "github-templates", + "description": "A skill to create new GitHub repositories from templates" + } + }, + "isAvailableWorldwide": true, + "testingInstructions": "Sample Testing Instructions.", + "category": "KNOWLEDGE_AND_TRIVIA", + "distributionCountries": [] + }, + "apis": { + "custom": { + "endpoint": { + "uri": "arn:aws:lambda:eu-west-1:618362251982:function:ask-github-templates-default-default-1614862691817" + } + } + }, + "manifestVersion": "1.0" + } +} \ No newline at end of file