Implemented basics of checking with czech post. Solved ssl problems and user-agent.
This commit is contained in:
133
.idea/modules/delivery-checker-bot-build.iml
generated
133
.idea/modules/delivery-checker-bot-build.iml
generated
@@ -1,133 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="delivery-checker-bot-build [file:/home/nnm/development/telegram-bot1/]" external.linked.project.path="$MODULE_DIR$/../../delivery-checker-bot/project" external.root.project.path="$MODULE_DIR$/../.." external.system.id="SBT" sbt.imports="SUB:DOLLAR2a7cf0a3aa9f47ee5733.`deliverySUB:DOLLARminuscheckerSUB:DOLLARminusbot`, SUB:DOLLAR2a7cf0a3aa9f47ee5733.`telegramSUB:DOLLARminusbot`, _root_.sbt.Keys._, _root_.sbt.ScriptedPlugin.autoImport._, _root_.sbtassembly.AssemblyPlugin.autoImport._, _root_.sbt._, _root_.sbt.plugins.IvyPlugin, _root_.sbt.plugins.JvmPlugin, _root_.sbt.plugins.CorePlugin, _root_.sbt.ScriptedPlugin, _root_.sbt.plugins.SbtPlugin, _root_.sbt.plugins.JUnitXmlReportPlugin, _root_.sbt.plugins.Giter8TemplatePlugin, _root_.sbtassembly.AssemblyPlugin, _root_.scala.xml.{TopScope=>SUB:DOLLARscope}" sbt.resolvers="https://repo1.maven.org/maven2/|maven|public, file:/home/nnm/.sbt/preloaded/|maven|local-preloaded, /home/nnm/.ivy2/cache|ivy|Local cache" type="SBT_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<output url="file://$MODULE_DIR$/../../delivery-checker-bot/project/target/idea-classes" />
|
||||
<output-test url="file://$MODULE_DIR$/../../delivery-checker-bot/project/target/idea-test-classes" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/../../delivery-checker-bot/project">
|
||||
<excludeFolder url="file://$MODULE_DIR$/../../delivery-checker-bot/project/project/target" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/../../delivery-checker-bot/project/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="telegram-bot1-build" />
|
||||
<orderEntry type="module-library">
|
||||
<library name="sbt: sbt-and-plugins">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/javax.annotation/jsr250-api/jars/jsr250-api-1.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/javax.enterprise/cdi-api/jars/cdi-api-1.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/javax.inject/javax.inject/jars/javax.inject-1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.apache.ant/ant-launcher/jars/ant-launcher-1.9.9.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.apache.ant/ant/jars/ant-1.9.9.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.apache.commons/commons-lang3/jars/commons-lang3-3.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.apache.maven/maven-artifact/jars/maven-artifact-3.3.9.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.apache.maven/maven-model/jars/maven-model-3.3.9.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.apache.maven/maven-plugin-api/jars/maven-plugin-api-3.3.9.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.codehaus.plexus/plexus-classworlds/bundles/plexus-classworlds-2.5.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.codehaus.plexus/plexus-component-annotations/jars/plexus-component-annotations-1.5.5.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.codehaus.plexus/plexus-utils/jars/plexus-utils-3.0.22.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.eclipse.sisu/org.eclipse.sisu.inject/eclipse-plugins/org.eclipse.sisu.inject-0.3.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.eclipse.sisu/org.eclipse.sisu.plexus/eclipse-plugins/org.eclipse.sisu.plexus-0.3.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.ow2.asm/asm-commons/jars/asm-commons-6.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.ow2.asm/asm-tree/jars/asm-tree-6.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.ow2.asm/asm/jars/asm-6.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.pantsbuild/jarjar/jars/jarjar-1.6.5.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/org.scalactic/scalactic_2.12/bundles/scalactic_2.12-3.0.1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.ivy2/cache/scala_2.12/sbt_1.0/com.eed3si9n/sbt-assembly/jars/sbt-assembly-0.14.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/lib/jline.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/lib/scala-compiler.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/lib/scala-library.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/lib/scala-reflect.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/lib/scala-xml_2.12.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/actions_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/apple-file-events-1.3.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/caffeine-2.5.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/collections_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/command_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/compiler-bridge_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/compiler-interface-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/completion_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/config-1.2.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/core-macros_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/disruptor-3.3.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/fastparse-utils_2.12-0.4.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/fastparse_2.12-0.4.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/gigahorse-core_2.12-0.3.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/gigahorse-okhttp_2.12-0.3.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/io_2.12-1.2.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/ipcsocket-1.0.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/ivy-2.3.0-sbt-b18f59ea3bc914a297bb6f1a4f7fb0ace399e310.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/jawn-parser_2.12-0.10.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/jline-2.14.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/jna-4.5.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/jna-platform-4.5.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/jsch-0.1.54.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/launcher-interface-1.0.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/lenses_2.12-0.4.12.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/librarymanagement-core_2.12-1.2.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/librarymanagement-ivy_2.12-1.2.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/log4j-api-2.8.1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/log4j-core-2.8.1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/log4j-slf4j-impl-2.8.1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/logic_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/main-settings_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/main_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/okhttp-3.7.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/okhttp-urlconnection-3.7.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/okio-1.12.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/protobuf-java-3.3.1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/protocol_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/reactive-streams-1.0.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/run_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/sbinary_2.12-0.5.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/sbt-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scala-parser-combinators_2.12-1.0.5.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scala-reflect-2.12.7.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scala-xml_2.12-1.0.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scalacache-caffeine_2.12-0.20.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scalacache-core_2.12-0.20.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scalapb-runtime_2.12-0.6.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scripted-plugin_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/scripted-sbt-redux_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/shaded-scalajson_2.12-1.0.0-M4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/sjson-new-core_2.12-0.8.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/sjson-new-murmurhash_2.12-0.8.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/sjson-new-scalajson_2.12-0.8.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/slf4j-api-1.7.25.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/sourcecode_2.12-0.1.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/ssl-config-core_2.12-0.2.2.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/task-system_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/tasks_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/template-resolver-0.1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/test-agent-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/test-interface-1.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/testing_2.12-1.2.6.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-cache_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-control_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-interface-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-logging_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-position_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-relation_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-scripted_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/util-tracking_2.12-1.2.3.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-apiinfo_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-classfile_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-classpath_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-compile-core_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-compile_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-core_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-ivy-integration_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc-persist_2.12-1.2.4.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.sbt/boot/scala-2.12.7/org.scala-sbt/sbt/1.2.6/zinc_2.12-1.2.4.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
</component>
|
||||
<component name="SbtModule">
|
||||
<option name="buildForId" value="delivery-checker-bot" />
|
||||
<option name="buildForURI" value="file:$MODULE_DIR$/../../" />
|
||||
<option name="imports" value="SUB:DOLLAR2a7cf0a3aa9f47ee5733.`deliverySUB:DOLLARminuscheckerSUB:DOLLARminusbot`, SUB:DOLLAR2a7cf0a3aa9f47ee5733.`telegramSUB:DOLLARminusbot`, _root_.sbt.Keys._, _root_.sbt.ScriptedPlugin.autoImport._, _root_.sbtassembly.AssemblyPlugin.autoImport._, _root_.sbt._, _root_.sbt.plugins.IvyPlugin, _root_.sbt.plugins.JvmPlugin, _root_.sbt.plugins.CorePlugin, _root_.sbt.ScriptedPlugin, _root_.sbt.plugins.SbtPlugin, _root_.sbt.plugins.JUnitXmlReportPlugin, _root_.sbt.plugins.Giter8TemplatePlugin, _root_.sbtassembly.AssemblyPlugin, _root_.scala.xml.{TopScope=>SUB:DOLLARscope}" />
|
||||
</component>
|
||||
</module>
|
||||
44
.idea/modules/delivery-checker-bot.iml
generated
44
.idea/modules/delivery-checker-bot.iml
generated
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="delivery-checker-bot [file:/home/nnm/development/telegram-bot1/]" external.linked.project.path="$MODULE_DIR$/../../delivery-checker-bot" external.root.project.path="$MODULE_DIR$/../.." external.system.id="SBT" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/../../delivery-checker-bot/target/scala-2.12/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/../../delivery-checker-bot/target/scala-2.12/test-classes" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/../../delivery-checker-bot">
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../delivery-checker-bot/target/scala-2.12/src_managed/main" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../delivery-checker-bot/target/scala-2.12/src_managed/test" isTestSource="true" generated="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/../../delivery-checker-bot/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="sbt: com.chuusai:shapeless_2.12:2.3.3:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:machinist_2.12:0.6.5:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:cats-macros_2.12:1.4.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:cats-kernel_2.12:1.4.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:cats-core_2.12:1.4.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.spire-math:jawn-parser_2.12:0.13.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.scala-lang.modules:scala-parser-combinators_2.12:1.1.1:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: io.circe:circe-parser_2.12:0.10.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: io.circe:circe-numbers_2.12:0.10.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: io.circe:circe-jawn_2.12:0.10.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: io.circe:circe-generic_2.12:0.10.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: io.circe:circe-core_2.12:0.10.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-stream_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-protobuf_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-parsing_2.12:10.1.5:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-http_2.12:10.1.5:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-http-core_2.12:10.1.5:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-actor_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-actor-typed_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe:ssl-config-core_2.12:0.2.4:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe:config:1.3.3:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:macro-compat_2.12:1.1.1:jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="sbt: org.scalatest:scalatest_2.12:3.0.5:jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="sbt: org.scalactic:scalactic_2.12:3.0.5:jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="sbt: org.scala-lang.modules:scala-xml_2.12:1.0.6:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.scala-lang.modules:scala-java8-compat_2.12:0.8.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.reactivestreams:reactive-streams:1.0.2:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.scala-lang:scala-library:2.12.7:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.scala-lang:scala-reflect:2.12.7:jar" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
5
.idea/modules/telegram-bot.iml
generated
5
.idea/modules/telegram-bot.iml
generated
@@ -14,6 +14,7 @@
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="sbt: com.chuusai:shapeless_2.12:2.3.3:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.fusesource.leveldbjni:leveldbjni-all:1.8:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: de.heikoseeberger:akka-http-circe_2.12:1.22.0:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:machinist_2.12:0.6.5:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.typelevel:cats-macros_2.12:1.4.0:jar" level="project" />
|
||||
@@ -43,5 +44,9 @@
|
||||
<orderEntry type="library" name="sbt: org.typelevel:macro-compat_2.12:1.1.1:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.scala-lang:scala-library:2.12.7:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: org.scala-lang:scala-reflect:2.12.7:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-actor-testkit-typed_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-persistence-typed_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-persistence_2.12:2.5.17:jar" level="project" />
|
||||
<orderEntry type="library" name="sbt: com.typesafe.akka:akka-testkit_2.12:2.5.17:jar" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
16
build.sbt
16
build.sbt
@@ -17,6 +17,8 @@ lazy val `telegram-bot` = (project in file("telegram-bot"))
|
||||
akkaTyped,
|
||||
akkaHttp,
|
||||
akkaStream,
|
||||
akkaPersistence,
|
||||
levelDbJni,
|
||||
circleCore,
|
||||
circleGeneric,
|
||||
circleParser,
|
||||
@@ -24,20 +26,6 @@ lazy val `telegram-bot` = (project in file("telegram-bot"))
|
||||
)
|
||||
)
|
||||
|
||||
lazy val `delivery-checker-bot` = (project in file("delivery-checker-bot"))
|
||||
.settings(
|
||||
libraryDependencies ++= Seq(
|
||||
scalaTest % Test,
|
||||
akka,
|
||||
akkaTyped,
|
||||
akkaHttp,
|
||||
akkaStream,
|
||||
circleCore,
|
||||
circleGeneric,
|
||||
circleParser
|
||||
)
|
||||
)
|
||||
|
||||
assemblyMergeStrategy in assembly := {
|
||||
case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.first
|
||||
case x =>
|
||||
|
||||
@@ -5,6 +5,8 @@ object Dependencies {
|
||||
lazy val akkaTyped = "com.typesafe.akka" %% "akka-actor-typed" % "2.5.17"
|
||||
lazy val akkaStream = "com.typesafe.akka" %% "akka-stream" % "2.5.17"
|
||||
lazy val akkaHttp = "com.typesafe.akka" %% "akka-http" % "10.1.5"
|
||||
lazy val akkaPersistence = "com.typesafe.akka" %% "akka-persistence-typed" % "2.5.17"
|
||||
lazy val levelDbJni = "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.8"
|
||||
//lazy val vkapi = "com.vk.api" % "sdk" % "0.5.12"
|
||||
lazy val circleCore = "io.circe" %% "circe-core" % "0.10.0"
|
||||
lazy val circleGeneric = "io.circe" %% "circe-generic" % "0.10.0"
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
package eu.xeppaka.bot
|
||||
|
||||
import java.security.cert.X509Certificate
|
||||
|
||||
import akka.actor.ActorSystem
|
||||
import akka.actor.typed.scaladsl.adapter._
|
||||
import akka.actor.typed.scaladsl.{Behaviors, TimerScheduler}
|
||||
import akka.actor.typed.{ActorRef, Behavior, DispatcherSelector}
|
||||
import akka.http.scaladsl.UseHttp2.Negotiated
|
||||
import akka.http.scaladsl.model._
|
||||
import akka.http.scaladsl.model.headers.{Accept, `User-Agent`}
|
||||
import akka.http.scaladsl.settings.{ClientConnectionSettings, ConnectionPoolSettings}
|
||||
import akka.http.scaladsl.unmarshalling.Unmarshal
|
||||
import akka.http.scaladsl.{Http, HttpsConnectionContext}
|
||||
import akka.persistence.typed.scaladsl.PersistentBehaviors.{CommandHandler, EventHandler}
|
||||
import akka.persistence.typed.scaladsl.{Effect, PersistentBehaviors}
|
||||
import akka.stream.ActorMaterializer
|
||||
import com.typesafe.sslconfig.akka.AkkaSSLConfig
|
||||
import de.heikoseeberger.akkahttpcirce.FailFastCirceSupport._
|
||||
import io.circe.generic.auto._
|
||||
import javax.net.ssl.{KeyManager, SSLContext, X509TrustManager}
|
||||
|
||||
import scala.collection.immutable
|
||||
import scala.concurrent.ExecutionContextExecutor
|
||||
import scala.concurrent.duration._
|
||||
import scala.util.{Failure, Success}
|
||||
|
||||
object Entities {
|
||||
case class Attributes(
|
||||
parcelType: String,
|
||||
weight: Double,
|
||||
currency: String,
|
||||
)
|
||||
|
||||
case class State(
|
||||
id: String,
|
||||
date: String,
|
||||
text: String,
|
||||
postcode: Option[String],
|
||||
postoffice: Option[String],
|
||||
idIcon: Option[String],
|
||||
publicAccess: Int,
|
||||
latitude: Option[Double],
|
||||
longitude: Option[Double],
|
||||
timeDeliveryAttempt: Option[String]
|
||||
)
|
||||
|
||||
case class States(state: Seq[State])
|
||||
|
||||
case class ParcelHistory(id: String, attributes: Attributes, states: States)
|
||||
}
|
||||
|
||||
object CheckCzechPostDelivery {
|
||||
sealed trait Command
|
||||
sealed trait Event
|
||||
case class State(
|
||||
attributes: Option[Entities.Attributes] = None,
|
||||
states: Set[Entities.State] = Set.empty
|
||||
)
|
||||
|
||||
private case object CheckParcel extends Command
|
||||
private case class ParcelHistoryData(data: Entities.ParcelHistory) extends Command
|
||||
case class DeliveryStateChanged(state: String)
|
||||
|
||||
case class HistoryStateAdded(state: Entities.State) extends Event
|
||||
case class AttributesChanged(attributes: Entities.Attributes) extends Event
|
||||
|
||||
private val trustfulSslContext: SSLContext = {
|
||||
object NoCheckX509TrustManager extends X509TrustManager {
|
||||
override def checkClientTrusted(chain: Array[X509Certificate], authType: String): Unit = ()
|
||||
override def checkServerTrusted(chain: Array[X509Certificate], authType: String): Unit = ()
|
||||
override def getAcceptedIssuers: Array[X509Certificate] = Array[X509Certificate]()
|
||||
}
|
||||
|
||||
val context = SSLContext.getInstance("TLS")
|
||||
context.init(Array[KeyManager](), Array(NoCheckX509TrustManager), null)
|
||||
context
|
||||
}
|
||||
|
||||
def behavior(chatId: String, parcelId: String, stateReporter: ActorRef[DeliveryStateChanged]): Behavior[Command] = Behaviors.setup[Command] { ctx =>
|
||||
Behaviors.withTimers(scheduler => checkParcel(chatId, parcelId, stateReporter, scheduler))
|
||||
}
|
||||
|
||||
private def checkParcel(chatId: String, parcelId: String, stateReporter: ActorRef[DeliveryStateChanged], scheduler: TimerScheduler[Command]): Behavior[Command] = Behaviors.setup { ctx =>
|
||||
implicit val actorSystem: ActorSystem = ctx.system.toUntyped
|
||||
implicit val executionContext: ExecutionContextExecutor = ctx.system.dispatchers.lookup(DispatcherSelector.default())
|
||||
implicit val materializer: ActorMaterializer = ActorMaterializer()
|
||||
val checkUri = Uri(s"https://b2c.cpost.cz/services/ParcelHistory/getDataAsJson?idParcel=$parcelId&language=en")
|
||||
val http = Http()
|
||||
val request = HttpRequest(uri = checkUri, headers = immutable.Seq(Accept(MediaTypes.`application/json`)))
|
||||
val badSslConfig = AkkaSSLConfig().mapSettings(s => s.withLoose(s.loose
|
||||
.withAcceptAnyCertificate(true)
|
||||
.withDisableHostnameVerification(true)))
|
||||
val originalCtx = http.createClientHttpsContext(badSslConfig)
|
||||
val sslContext = new HttpsConnectionContext(
|
||||
trustfulSslContext,
|
||||
originalCtx.sslConfig,
|
||||
originalCtx.enabledCipherSuites,
|
||||
originalCtx.enabledProtocols,
|
||||
originalCtx.clientAuth,
|
||||
originalCtx.sslParameters,
|
||||
Negotiated
|
||||
)
|
||||
val clientConnectionSettings = ClientConnectionSettings(actorSystem).withUserAgentHeader(Some(`User-Agent`("Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0")))
|
||||
val connectionSettings = ConnectionPoolSettings(actorSystem).withConnectionSettings(clientConnectionSettings)
|
||||
|
||||
scheduler.startPeriodicTimer("check-delivery-state", CheckParcel, 5.seconds)
|
||||
|
||||
val commandHandler: CommandHandler[Command, Event, State] = (state, cmd) => {
|
||||
cmd match {
|
||||
case CheckParcel =>
|
||||
http
|
||||
.singleRequest(request, connectionContext = sslContext, settings = connectionSettings)
|
||||
.transform {
|
||||
case Success(response) => if (response.status.isSuccess()) Success(response) else Failure(new Exception(s"Check parcel returned HTTP status: ${response.status.value}."))
|
||||
case response: Failure[HttpResponse] => response
|
||||
}
|
||||
.flatMap(response => Unmarshal(response).to[Array[Entities.ParcelHistory]])
|
||||
.andThen {
|
||||
case Success(parcelHistory) => ctx.self ! ParcelHistoryData(parcelHistory.head)
|
||||
case Failure(exception) =>
|
||||
ctx.log.error(exception, "Error checking parcel history.")
|
||||
}
|
||||
|
||||
Effect.none
|
||||
case ParcelHistoryData(parcelHistory) =>
|
||||
val attributesEvent = (if (state.attributes.isEmpty)
|
||||
Some(parcelHistory.attributes)
|
||||
else
|
||||
state.attributes.flatMap(oldAttributes => if (oldAttributes != parcelHistory.attributes) Some(parcelHistory.attributes) else None))
|
||||
.map(AttributesChanged.apply).to[collection.immutable.Seq]
|
||||
|
||||
val newStates = parcelHistory.states.state.toSet -- state.states
|
||||
val stateEvents: Seq[Event] = newStates.map(HistoryStateAdded.apply).to[collection.immutable.Seq]
|
||||
|
||||
Effect
|
||||
.persist(attributesEvent ++ stateEvents)
|
||||
.thenRun(_ => stateReporter ! DeliveryStateChanged(newStates.toString()))
|
||||
}
|
||||
}
|
||||
|
||||
val eventHandler: EventHandler[State, Event] = (state, evt) => {
|
||||
evt match {
|
||||
case HistoryStateAdded(newState) => state.copy(states = state.states + newState)
|
||||
case AttributesChanged(newAttributes) => state.copy(attributes = Some(newAttributes))
|
||||
}
|
||||
}
|
||||
|
||||
PersistentBehaviors.receive[Command, Event, State](
|
||||
persistenceId = parcelId,
|
||||
emptyState = State(),
|
||||
commandHandler = commandHandler,
|
||||
eventHandler = eventHandler
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -19,13 +19,17 @@ object CheckDeliveryDialog {
|
||||
case object ProcessMessageSuccess extends CommandResult
|
||||
case class ProcessMessageFailure(exception: Throwable) extends CommandResult
|
||||
|
||||
// internal messages
|
||||
private case class DeliveryStateChanged(state: String) extends Command
|
||||
|
||||
def behavior(chatId: Long, botUri: BotUri): Behavior[Command] = Behaviors.setup[Command] { ctx =>
|
||||
implicit val executionContext: ExecutionContext = ctx.system.dispatchers.lookup(DispatcherSelector.default())
|
||||
val http = Http()(ctx.system.toUntyped)
|
||||
val deliveryStateAdapter: ActorRef[CheckCzechPostDelivery.DeliveryStateChanged] = ctx.messageAdapter(stateChanged => DeliveryStateChanged(stateChanged.state))
|
||||
|
||||
Behaviors.receiveMessage {
|
||||
case ProcessMessage(msg, replyTo) =>
|
||||
sendResponse(http, botUri, chatId, msg.text.get)
|
||||
sendMessage(http, botUri, chatId, msg.text.get)
|
||||
.onComplete {
|
||||
case Success(response) =>
|
||||
if (response.status.isSuccess()) {
|
||||
@@ -35,11 +39,16 @@ object CheckDeliveryDialog {
|
||||
}
|
||||
case Failure(exception) => replyTo ! ProcessMessageFailure(exception)
|
||||
}
|
||||
|
||||
ctx.spawnAnonymous(CheckCzechPostDelivery.behavior(chatId.toString, "RR541190869CZ", deliveryStateAdapter))
|
||||
Behaviors.same
|
||||
case DeliveryStateChanged(state) =>
|
||||
sendMessage(http, botUri, chatId, state)
|
||||
Behaviors.same
|
||||
}
|
||||
}
|
||||
|
||||
private def sendResponse(http: HttpExt, botUri: BotUri, chatId: Long, text: String): Future[HttpResponse] = {
|
||||
private def sendMessage(http: HttpExt, botUri: BotUri, chatId: Long, text: String): Future[HttpResponse] = {
|
||||
import io.circe._
|
||||
import io.circe.generic.auto._
|
||||
import io.circe.syntax._
|
||||
|
||||
@@ -32,10 +32,10 @@ object DialogManager {
|
||||
if (update.message.isDefined) {
|
||||
val chatId = update.message.get.chat.id
|
||||
val dialogKey = ServiceKey[CheckDeliveryDialog.Command](chatId.toString)
|
||||
val receptionistMapper: ActorRef[Receptionist.Listing] = ctx.messageAdapter(listing => ReceptionistListingWrapper(chatId, dialogKey, listing, update.message.get, replyTo))
|
||||
val receptionistAdapter: ActorRef[Receptionist.Listing] = ctx.messageAdapter(listing => ReceptionistListingWrapper(chatId, dialogKey, listing, update.message.get, replyTo))
|
||||
ctx.log.debug(s"action=find_dialog id=${chatId.toString}")
|
||||
|
||||
ctx.system.receptionist ! Receptionist.Find(dialogKey, receptionistMapper)
|
||||
ctx.system.receptionist ! Receptionist.Find(dialogKey, receptionistAdapter)
|
||||
}
|
||||
|
||||
Behaviors.same
|
||||
|
||||
Reference in New Issue
Block a user