This commit is contained in:
InsanusMokrassar
2023-06-10 07:53:25 +00:00
parent 7457aea297
commit d67f0e483a
28 changed files with 859 additions and 873 deletions

View File

@@ -1222,12 +1222,12 @@ A lot of examples with using of Telegram Bot API you can find in <a href="https:
</div>
<h3 id="the-most-simple-bot">The most simple bot<a class="headerlink" href="#the-most-simple-bot" title="Permanent link">&para;</a></h3>
<p>The most simple bot will just print information about itself. All source code you can find <a href="https://github.com/InsanusMokrassar/TelegramBotAPI-examples/tree/master/GetMeBot">in this repository</a>. Our interest here will be concentrated on the next example part:</p>
<pre><code class="language-kotlin">suspend fun main(vararg args: String) {
val botToken = args.first()
val bot = telegramBot(botToken)
println(bot.getMe())
}
</code></pre>
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kd">suspend</span><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="k">vararg</span><span class="w"> </span><span class="n">args</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">botToken</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">args</span><span class="p">.</span><span class="na">first</span><span class="p">()</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">bot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">telegramBot</span><span class="p">(</span><span class="n">botToken</span><span class="p">)</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="n">bot</span><span class="p">.</span><span class="na">getMe</span><span class="p">())</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="p">}</span>
</span></code></pre></div>
<p>So, let&rsquo;s get understanding, about what is going on:</p>
<ol>
<li><code>suspend fun main(vararg args: String)</code>:<ul>
@@ -1239,8 +1239,8 @@ A lot of examples with using of Telegram Bot API you can find in <a href="https:
<li><code>println(bot.getMe())</code>: here happens calling of <a href="https://tgbotapi.inmo.dev/docs/com.github.insanusmokrassar.-telegram-bot-a-p-i.extensions.api.bot/get-me.html">getMe</a> extension</li>
</ol>
<p>As a result, we will see in the command line something like</p>
<pre><code class="language-shell">ExtendedBot(id=ChatId(chatId=123456789), username=Username(username=@first_test_ee17e8_bot), firstName=Your bot name, lastName=, canJoinGroups=false, canReadAllGroupMessages=false, supportsInlineQueries=false)
</code></pre>
<div class="language-shell highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>ExtendedBot<span class="o">(</span><span class="nv">id</span><span class="o">=</span>ChatId<span class="o">(</span><span class="nv">chatId</span><span class="o">=</span><span class="m">123456789</span><span class="o">)</span>,<span class="w"> </span><span class="nv">username</span><span class="o">=</span>Username<span class="o">(</span><span class="nv">username</span><span class="o">=</span>@first_test_ee17e8_bot<span class="o">)</span>,<span class="w"> </span><span class="nv">firstName</span><span class="o">=</span>Your<span class="w"> </span>bot<span class="w"> </span>name,<span class="w"> </span><span class="nv">lastName</span><span class="o">=</span>,<span class="w"> </span><span class="nv">canJoinGroups</span><span class="o">=</span>false,<span class="w"> </span><span class="nv">canReadAllGroupMessages</span><span class="o">=</span>false,<span class="w"> </span><span class="nv">supportsInlineQueries</span><span class="o">=</span><span class="nb">false</span><span class="o">)</span>
</span></code></pre></div>

View File

@@ -1516,38 +1516,34 @@
<h3 id="notice-about-repository">Notice about repository<a class="headerlink" href="#notice-about-repository" title="Permanent link">&para;</a></h3>
<p>To use this library, you will need to include <code>Maven Central</code> repository in your project</p>
<h6 id="buildgradle">build.gradle<a class="headerlink" href="#buildgradle" title="Permanent link">&para;</a></h6>
<pre><code class="language-groovy">mavenCentral()
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">mavenCentral</span><span class="o">()</span>
</span></code></pre></div>
<h6 id="pomxml">pom.xml<a class="headerlink" href="#pomxml" title="Permanent link">&para;</a></h6>
<pre><code class="language-xml">&lt;repository&gt;
&lt;id&gt;central&lt;/id&gt;
&lt;name&gt;mavenCentral&lt;/name&gt;
&lt;url&gt;https://repo1.maven.org/maven2&lt;/url&gt;
&lt;/repository&gt;
</code></pre>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="nt">&lt;repository&gt;</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="nt">&lt;id&gt;</span>central<span class="nt">&lt;/id&gt;</span>
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="nt">&lt;name&gt;</span>mavenCentral<span class="nt">&lt;/name&gt;</span>
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="nt">&lt;url&gt;</span>https://repo1.maven.org/maven2<span class="nt">&lt;/url&gt;</span>
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="nt">&lt;/repository&gt;</span>
</span></code></pre></div>
<h6 id="dev-channel">Dev channel<a class="headerlink" href="#dev-channel" title="Permanent link">&para;</a></h6>
<p>Besides, there is <a href="https://git.inmo.dev/InsanusMokrassar/-/packages/maven/dev.inmo-tgbotapi">developer versions repo</a>. To use it in your project, add the repo in <code>repositories</code> section:</p>
<details><summary>Gradle</summary>
<pre><code class="language-groovy">maven {
url &quot;https://git.inmo.dev/api/packages/InsanusMokrassar/maven&quot;
}
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="n">maven</span><span class="w"> </span><span class="o">{</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="n">url</span><span class="w"> </span><span class="s2">&quot;https://git.inmo.dev/api/packages/InsanusMokrassar/maven&quot;</span>
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="o">}</span>
</span></code></pre></div>
</details>
<details><summary>Maven</summary>
<pre><code class="language-xml">&lt;repository&gt;
&lt;id&gt;dev.inmo&lt;/id&gt;
&lt;name&gt;InmoDev&lt;/name&gt;
&lt;url&gt;https://git.inmo.dev/api/packages/InsanusMokrassar/maven&lt;/url&gt;
&lt;/repository&gt;
</code></pre>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="nt">&lt;repository&gt;</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="nt">&lt;id&gt;</span>dev.inmo<span class="nt">&lt;/id&gt;</span>
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="nt">&lt;name&gt;</span>InmoDev<span class="nt">&lt;/name&gt;</span>
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="nt">&lt;url&gt;</span>https://git.inmo.dev/api/packages/InsanusMokrassar/maven<span class="nt">&lt;/url&gt;</span>
</span><span id="__span-3-5"><a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="nt">&lt;/repository&gt;</span>
</span></code></pre></div>
</details>
@@ -1555,54 +1551,54 @@
<p>As <code>tgbotapi_version</code> variable in next snippets will be used variable with next last published version:</p>
<p><a href="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi"><img alt="Maven Central" src="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi/badge.svg" /></a></p>
<h6 id="buildgradle_1">build.gradle<a class="headerlink" href="#buildgradle_1" title="Permanent link">&para;</a></h6>
<pre><code class="language-groovy">implementation &quot;dev.inmo:tgbotapi:$tgbotapi_version&quot;
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="n">implementation</span><span class="w"> </span><span class="s2">&quot;dev.inmo:tgbotapi:$tgbotapi_version&quot;</span>
</span></code></pre></div>
<h6 id="pomxml_1">pom.xml<a class="headerlink" href="#pomxml_1" title="Permanent link">&para;</a></h6>
<pre><code class="language-xml">&lt;dependency&gt;
&lt;groupId&gt;dev.inmo&lt;/groupId&gt;
&lt;artifactId&gt;tgbotapi&lt;/artifactId&gt;
&lt;version&gt;${tgbotapi_version}&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="nt">&lt;dependency&gt;</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span><span class="nt">&lt;groupId&gt;</span>dev.inmo<span class="nt">&lt;/groupId&gt;</span>
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="w"> </span><span class="nt">&lt;artifactId&gt;</span>tgbotapi<span class="nt">&lt;/artifactId&gt;</span>
</span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="w"> </span><span class="nt">&lt;version&gt;</span>${tgbotapi_version}<span class="nt">&lt;/version&gt;</span>
</span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="nt">&lt;/dependency&gt;</span>
</span></code></pre></div>
<h3 id="telegrambotapi-core">TelegramBotAPI Core<a class="headerlink" href="#telegrambotapi-core" title="Permanent link">&para;</a></h3>
<p>As <code>tgbotapi_version</code> variable in next snippets will be used variable with next last published version:</p>
<p><a href="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.core"><img alt="Maven Central" src="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.core/badge.svg" /></a></p>
<h6 id="buildgradle_2">build.gradle<a class="headerlink" href="#buildgradle_2" title="Permanent link">&para;</a></h6>
<pre><code class="language-groovy">implementation &quot;dev.inmo:tgbotapi.core:$tgbotapi_version&quot;
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="n">implementation</span><span class="w"> </span><span class="s2">&quot;dev.inmo:tgbotapi.core:$tgbotapi_version&quot;</span>
</span></code></pre></div>
<h6 id="pomxml_2">pom.xml<a class="headerlink" href="#pomxml_2" title="Permanent link">&para;</a></h6>
<pre><code class="language-xml">&lt;dependency&gt;
&lt;groupId&gt;dev.inmo&lt;/groupId&gt;
&lt;artifactId&gt;tgbotapi.core&lt;/artifactId&gt;
&lt;version&gt;${tgbotapi_version}&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="nt">&lt;dependency&gt;</span>
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="nt">&lt;groupId&gt;</span>dev.inmo<span class="nt">&lt;/groupId&gt;</span>
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span><span class="nt">&lt;artifactId&gt;</span>tgbotapi.core<span class="nt">&lt;/artifactId&gt;</span>
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="w"> </span><span class="nt">&lt;version&gt;</span>${tgbotapi_version}<span class="nt">&lt;/version&gt;</span>
</span><span id="__span-7-5"><a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="nt">&lt;/dependency&gt;</span>
</span></code></pre></div>
<h3 id="telegrambotapi-api-extensions">TelegramBotAPI API Extensions<a class="headerlink" href="#telegrambotapi-api-extensions" title="Permanent link">&para;</a></h3>
<p>As <code>tgbotapi_version</code> variable in next snippets will be used variable with next last published version:</p>
<p><a href="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.api"><img alt="Maven Central" src="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.api/badge.svg" /></a></p>
<h6 id="buildgradle_3">build.gradle<a class="headerlink" href="#buildgradle_3" title="Permanent link">&para;</a></h6>
<pre><code class="language-groovy">implementation &quot;dev.inmo:tgbotapi.api:$tgbotapi_version&quot;
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="n">implementation</span><span class="w"> </span><span class="s2">&quot;dev.inmo:tgbotapi.api:$tgbotapi_version&quot;</span>
</span></code></pre></div>
<h6 id="pomxml_3">pom.xml<a class="headerlink" href="#pomxml_3" title="Permanent link">&para;</a></h6>
<pre><code class="language-xml">&lt;dependency&gt;
&lt;groupId&gt;dev.inmo&lt;/groupId&gt;
&lt;artifactId&gt;tgbotapi.api&lt;/artifactId&gt;
&lt;version&gt;${tgbotapi_version}&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="nt">&lt;dependency&gt;</span>
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="w"> </span><span class="nt">&lt;groupId&gt;</span>dev.inmo<span class="nt">&lt;/groupId&gt;</span>
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="nt">&lt;artifactId&gt;</span>tgbotapi.api<span class="nt">&lt;/artifactId&gt;</span>
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="nt">&lt;version&gt;</span>${tgbotapi_version}<span class="nt">&lt;/version&gt;</span>
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="nt">&lt;/dependency&gt;</span>
</span></code></pre></div>
<h3 id="telegrambotapi-utils-extensions">TelegramBotAPI Utils Extensions<a class="headerlink" href="#telegrambotapi-utils-extensions" title="Permanent link">&para;</a></h3>
<p>As <code>tgbotapi_version</code> variable in next snippets will be used variable with next last published version:</p>
<p><a href="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.utils"><img alt="Maven Central" src="https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.utils/badge.svg" /></a></p>
<h6 id="buildgradle_4">build.gradle<a class="headerlink" href="#buildgradle_4" title="Permanent link">&para;</a></h6>
<pre><code class="language-groovy">implementation &quot;dev.inmo:tgbotapi.utils:$tgbotapi_version&quot;
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="n">implementation</span><span class="w"> </span><span class="s2">&quot;dev.inmo:tgbotapi.utils:$tgbotapi_version&quot;</span>
</span></code></pre></div>
<h6 id="pomxml_4">pom.xml<a class="headerlink" href="#pomxml_4" title="Permanent link">&para;</a></h6>
<pre><code class="language-xml">&lt;dependency&gt;
&lt;groupId&gt;dev.inmo&lt;/groupId&gt;
&lt;artifactId&gt;tgbotapi.utils&lt;/artifactId&gt;
&lt;version&gt;${tgbotapi_version}&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="nt">&lt;dependency&gt;</span>
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="w"> </span><span class="nt">&lt;groupId&gt;</span>dev.inmo<span class="nt">&lt;/groupId&gt;</span>
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="w"> </span><span class="nt">&lt;artifactId&gt;</span>tgbotapi.utils<span class="nt">&lt;/artifactId&gt;</span>
</span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="w"> </span><span class="nt">&lt;version&gt;</span>${tgbotapi_version}<span class="nt">&lt;/version&gt;</span>
</span><span id="__span-11-5"><a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="nt">&lt;/dependency&gt;</span>
</span></code></pre></div>
<h2 id="next-steps">Next steps<a class="headerlink" href="#next-steps" title="Permanent link">&para;</a></h2>
<ul>
<li><a href="proxy-setup.html">Proxy setup</a></li>

View File

@@ -1230,20 +1230,20 @@
<h1 id="proxy-setup">Proxy setup<a class="headerlink" href="#proxy-setup" title="Permanent link">&para;</a></h1>
<p>In some locations Telegram Bots API urls will be unavailable. In this case all examples will just throw exception like:</p>
<pre><code class="language-bash">Exception in thread &quot;main&quot; java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at io.ktor.network.sockets.SocketImpl.connect$ktor_network(SocketImpl.kt:36)
at io.ktor.network.sockets.SocketImpl$connect$1.invokeSuspend(SocketImpl.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Process finished with exit code 1
</code></pre>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>Exception<span class="w"> </span><span class="k">in</span><span class="w"> </span>thread<span class="w"> </span><span class="s2">&quot;main&quot;</span><span class="w"> </span>java.net.ConnectException:<span class="w"> </span>Connection<span class="w"> </span>refused
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span>at<span class="w"> </span>sun.nio.ch.SocketChannelImpl.checkConnect<span class="o">(</span>Native<span class="w"> </span>Method<span class="o">)</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span>at<span class="w"> </span>sun.nio.ch.SocketChannelImpl.finishConnect<span class="o">(</span>SocketChannelImpl.java:717<span class="o">)</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span>at<span class="w"> </span>io.ktor.network.sockets.SocketImpl.connect<span class="nv">$ktor_network</span><span class="o">(</span>SocketImpl.kt:36<span class="o">)</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span>at<span class="w"> </span>io.ktor.network.sockets.SocketImpl<span class="nv">$connect$1</span>.invokeSuspend<span class="o">(</span>SocketImpl.kt<span class="o">)</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span>at<span class="w"> </span>kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith<span class="o">(</span>ContinuationImpl.kt:33<span class="o">)</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span>at<span class="w"> </span>kotlinx.coroutines.DispatchedTask.run<span class="o">(</span>DispatchedTask.kt:56<span class="o">)</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span>at<span class="w"> </span>kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely<span class="o">(</span>CoroutineScheduler.kt:571<span class="o">)</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span>at<span class="w"> </span>kotlinx.coroutines.scheduling.CoroutineScheduler<span class="nv">$Worker</span>.executeTask<span class="o">(</span>CoroutineScheduler.kt:738<span class="o">)</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span>at<span class="w"> </span>kotlinx.coroutines.scheduling.CoroutineScheduler<span class="nv">$Worker</span>.runWorker<span class="o">(</span>CoroutineScheduler.kt:678<span class="o">)</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span>at<span class="w"> </span>kotlinx.coroutines.scheduling.CoroutineScheduler<span class="nv">$Worker</span>.run<span class="o">(</span>CoroutineScheduler.kt:665<span class="o">)</span>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a>Process<span class="w"> </span>finished<span class="w"> </span>with<span class="w"> </span><span class="nb">exit</span><span class="w"> </span>code<span class="w"> </span><span class="m">1</span>
</span></code></pre></div>
<p>There are several ways to solve this problem:</p>
<ul>
<li>Built-in proxy config (will require some socks or http proxy server)</li>
@@ -1253,20 +1253,20 @@ Process finished with exit code 1
<h3 id="using-ktor-client-built-in-proxy">Using Ktor Client built-in proxy<a class="headerlink" href="#using-ktor-client-built-in-proxy" title="Permanent link">&para;</a></h3>
<p>First of all, you will need to use one more library:</p>
<p><strong>build.gradle</strong>:</p>
<pre><code class="language-groovy">implementation &quot;io.ktor:ktor-client-okhttp:2.0.1&quot;
</code></pre>
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="n">implementation</span><span class="w"> </span><span class="s2">&quot;io.ktor:ktor-client-okhttp:2.0.1&quot;</span>
</span></code></pre></div>
<div class="admonition note">
<p class="admonition-title">Dependency note</p>
<p>
In the snippet above was used version <code>2.0.1</code> which is actual for <code>TelegramBotAPI</code> at the moment of filling this documentation (<code>May 22 2022</code>, <code>TelegramBotAPI</code> version <code>2.0.0</code>) and you can update version of this dependency in case if it is outdated.</p>
</div>
<p>For configuring proxy for your bot inside your program, you can use next snippet:</p>
<pre><code class="language-kotlin">val botToken = &quot;HERE MUST BE YOUR TOKEN&quot;
val bot = telegramBot(botToken) {
ktorClientEngineFactory = OkHttp
proxy = ProxyBuilder.socks(&quot;127.0.0.1&quot;, 1080)
}
</code></pre>
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">botToken</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;HERE MUST BE YOUR TOKEN&quot;</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="kd">val</span><span class="w"> </span><span class="nv">bot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">telegramBot</span><span class="p">(</span><span class="n">botToken</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="n">ktorClientEngineFactory</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OkHttp</span>
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="n">proxy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ProxyBuilder</span><span class="p">.</span><span class="na">socks</span><span class="p">(</span><span class="s">&quot;127.0.0.1&quot;</span><span class="p">,</span><span class="w"> </span><span class="m">1080</span><span class="p">)</span>
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="p">}</span>
</span></code></pre></div>
<p>Explanation line by line:</p>
<ol>
<li><code>val botToken = "HERE MUST BE YOUR TOKEN"</code> - here we are just creating variable <code>botToken</code></li>