Compare commits

...

60 Commits

Author SHA1 Message Date
Kay Marquardt
8f23bca8a1
Update README.md 2023-04-18 00:27:39 +02:00
Kay Marquardt
420029c7f6
Update README.md 2023-04-18 00:25:50 +02:00
Kay Marquardt
02c73d432e
Update README.md 2023-04-18 00:20:06 +02:00
Kay Marquardt
1c2c07397a
Update 3_advanced.md 2023-04-17 15:36:10 +02:00
Kay Marquardt
8f742ff1fb
Explain data flow in interactive chats (finally) 2023-04-17 15:31:04 +02:00
Kay Marquardt
d0c3156e7d
Include 2023-04-17 15:26:36 +02:00
Kay Marquardt
d157f61cf2
Update 3_advanced.md 2023-04-17 14:03:29 +02:00
Kay Marquardt
af7596f69a
Update 3_advanced.md 2023-04-17 13:54:01 +02:00
Kay Marquardt
0c25a11c5c
Update 3_advanced.md 2023-04-17 13:34:53 +02:00
Kay Marquardt
5653582d68
Update 3_advanced.md 2023-04-17 13:20:03 +02:00
Kay Marquardt
b6dc3a0d93
Update 3_advanced.md 2023-04-17 13:06:21 +02:00
Kay Marquardt
4b2331b623
Update 3_advanced.md 2023-04-17 13:00:49 +02:00
Kay Marquardt
38f2cc475b
Update 4_expert.md
must use crontab -e
2023-04-12 08:18:08 +02:00
Kay Marquardt
74294f3fb4
Update bashbot.cron
change bashbot.sh to bashbot.rc
2023-04-10 09:48:50 +02:00
Kay Marquardt
4591b357d1
Merge pull request #193 from topkecleon/develop
Bashbot Version 1.52
2022-06-27 20:19:54 +02:00
Kay Marquardt (Gnadelwartz)
bc71f37a2e resolve merge conflicts 2022-06-27 20:18:58 +02:00
Kay Marquardt (Gnadelwartz)
0dae2db8ac Bashbot Version 1.52 2022-06-27 19:55:03 +02:00
Kay Marquardt (Gnadelwartz)
1a83202a07 modules/chatMember: fix missing quotes around user_id 2022-06-27 19:49:55 +02:00
Kay Marquardt (Gnadelwartz)
58e6d0aaf6 modules/sendMessage: send_file: fix double escaped caption 2022-05-12 17:46:40 +02:00
Kay Marquardt (Gnadelwartz)
479f41c80e modules/send_message: send_file: fix double escaped caption 2022-05-12 17:42:18 +02:00
Kay Marquardt (Gnadelwartz)
67d75feace bashbot.rc: fix stop warning for mode 2022-05-03 23:48:49 +02:00
Kay Marquardt (Gnadelwartz)
1ffa890428 bashbot.rc: detect if bot run in both modes 2022-05-02 14:38:43 +02:00
Kay Marquardt
6490f6756f
Merge pull request #189 from z4zz/fix-cmd-args
fix split message arguments
2022-01-19 22:17:37 +01:00
z4zz
90d3d7551d
fix split message arguments
read into array
2022-01-19 14:36:37 +03:00
Kay Marquardt (Gnadelwartz)
d06c162f16 Merge branch 'master' into develop 2021-11-06 08:32:33 +01:00
Kay Marquardt
89ac61afe7
Merge pull request #184 from konqiDAM/patch-1
Small documentaion fixes for edit_inline_buttons
2021-11-06 08:28:28 +01:00
konqi
369d7f8d4d
fix url quotes 2021-11-06 08:02:47 +01:00
konqi
93dc4a09d6
fix another edit_inline_buttons 2021-11-05 23:39:59 +01:00
konqi
738c5e5f6d
fix edit_inline_buttons
fix edit_inline_buttons instead of edit_inline_keyboard
2021-11-05 23:38:20 +01:00
Kay Marquardt (Gnadelwartz)
aad42a52fb sendMEssage: send_keyboard: send text bigger 4k seperate 2021-09-29 16:56:47 +02:00
Kay Marquardt (Gnadelwartz)
a2a3927117 hide url with token from crul argc e.g. ps command 2021-09-20 20:32:51 +02:00
Kay Marquardt (Gnadelwartz)
5205fe3990 mycommnds.sh: fix error403 example 2021-06-18 15:06:26 +02:00
Kay Marquardt (Gnadelwartz)
783bf30190 bin: send_message: implement read from stdin or file 2021-06-04 22:47:43 +02:00
Kay Marquardt
a23370645f
Merge pull request #182 Bashbot Version 1.51
Version 1.51
2021-06-03 14:41:07 +02:00
Kay Marquardt (Gnadelwartz)
36d8604cde Bashbot Version 1.51 2021-06-03 14:21:40 +02:00
Kay Marquardt (Gnadelwartz)
6e66a2877c adjust webhook readme and /help message 2021-06-03 14:12:47 +02:00
Kay Marquardt (Gnadelwartz)
52fbb14770 add timeout to interactive example 2021-06-03 13:28:29 +02:00
Kay Marquardt (Gnadelwartz)
c63f098fb0 fix: use REALME as SCRIPT if sourced 2021-06-03 13:00:37 +02:00
Kay Marquardt (Gnadelwartz)
69b1871eea fix Terminated message on stophook 2021-06-03 12:03:10 +02:00
Kay Marquardt (Gnadelwartz)
45efa80699 modules: startBot: adjust start message 2021-04-09 17:10:37 +02:00
Kay Marquardt (Gnadelwartz)
b097f088c8 modules: processUpdates: fix inform chat if blocked 2021-04-05 02:32:59 +02:00
Kay Marquardt (Gnadelwartz)
e4c13ddabe modules: processUpdates: optimize inform user if blocked 2021-04-04 11:45:37 +02:00
Kay Marquardt (Gnadelwartz)
f7f55ea45f modules: processUpdates: inform user if he is blocked 2021-04-04 11:27:39 +02:00
Kay Marquardt (Gnadelwartz)
9b6aba0586 mycommands.sh: autoblock example 2021-04-04 11:22:34 +02:00
Kay Marquardt (Gnadelwartz)
ecaecfee6f fix dev version 2021-03-24 12:07:49 +01:00
Kay Marquardt (Gnadelwartz)
4c4ba0ba5e bashbot: add error Pocessing to SendJsonRetry 2021-03-24 11:06:30 +01:00
Kay Marquardt (Gnadelwartz)
f790d73e66 modules: process_update: ignore unknown update types 2021-03-23 17:25:10 +01:00
Kay Marquardt (Gnadelwartz)
79fc511bdb Merge branch 'develop' of github.com:topkecleon/telegram-bot-bash into develop 2021-03-19 14:02:13 +01:00
Kay Marquardt (Gnadelwartz)
3501318d84 bashbot.rc: fix missing open { in pipe name 2021-03-19 14:01:30 +01:00
Kay Marquardt
443958aa5f
Merge pull request #179 from topkecleon/master
Merge pull request #177 from topkecleon/develop
2021-03-18 15:01:27 +01:00
Kay Marquardt (Gnadelwartz)
12157b380d bashbot.rc: fix hook status, harmonize messages for hook and poll 2021-03-18 14:58:18 +01:00
Kay Marquardt (Gnadelwartz)
cbd74a7f72 bashbot.rc: fix default bashbot path 2021-03-18 14:12:48 +01:00
Kay Marquardt (Gnadelwartz)
dedcc00b8c bashbot.rc: more/better run mode warnings 2021-03-18 14:09:42 +01:00
Kay Marquardt (Gnadelwartz)
721e433b47 bashbot.rc: make log for hook configurable 2021-03-18 12:44:17 +01:00
Kay Marquardt (Gnadelwartz)
cbde841bae bashbot.rc: factor out status, warn if wrong status 2021-03-18 12:35:14 +01:00
Kay Marquardt (Gnadelwartz)
f1ea49426b fix modules: jsshDB: fix removal of unwanted characters from untrusted input 2021-03-18 11:50:44 +01:00
Kay Marquardt (Gnadelwartz)
e60ada0bfe revert modules: jsshDB: fix removal of unwanted characters from untrusted input 2021-03-18 11:30:53 +01:00
Kay Marquardt (Gnadelwartz)
85f7c074f4 bin: process_batch: output logmsg first on kill 2021-03-18 10:48:43 +01:00
Kay Marquardt (Gnadelwartz)
43cab461f8 modules: sendMessage: send_dice add bowling 2021-03-17 20:02:17 +01:00
Kay Marquardt (Gnadelwartz)
99950e6518 modules: jsshDB: fix removal of unwanted characters from untrusted input 2021-03-17 19:46:31 +01:00
84 changed files with 315 additions and 329 deletions

View File

@ -6,136 +6,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Bashbot README</title> <title>Bashbot README</title>
<style> <style>
html {
line-height: 1.5;
font-family: Georgia, serif;
font-size: 20px;
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
word-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 1em;
}
}
@media print {
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
font-size: 85%;
margin: 0;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;} code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;} span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;} span.underline{text-decoration: underline;}
@ -145,7 +15,6 @@
pre > code.sourceCode { white-space: pre; position: relative; } pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; } pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; } code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; } div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; } pre.sourceCode { margin: 0; }
@ -205,7 +74,6 @@
code span.va { color: #19177c; } /* Variable */ code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */ code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style> </style>
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
@ -292,28 +160,28 @@ Written by Drew (@topkecleon) and Kay M (@gnadelwartz).
<p>To install and run bashbot you need access to a Linux/Unix command line with bash, a <a href="https://telegram.org">Telegram client</a> and a mobile phone <a href="https://telegramguide.com/create-a-telegram-account/">with a Telegram account</a>.</p> <p>To install and run bashbot you need access to a Linux/Unix command line with bash, a <a href="https://telegram.org">Telegram client</a> and a mobile phone <a href="https://telegramguide.com/create-a-telegram-account/">with a Telegram account</a>.</p>
<p>First you need to <a href="doc/1_firstbot.md">create a new Telegram Bot token</a> for your bot and write it down.</p> <p>First you need to <a href="doc/1_firstbot.md">create a new Telegram Bot token</a> for your bot and write it down.</p>
<p>Now open a Linux/Unix terminal with bash, create a new directory, change to it and install telegram-bot-bash:</p> <p>Now open a Linux/Unix terminal with bash, create a new directory, change to it and install telegram-bot-bash:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co"># create bot dir</span></span> <div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1"></a><span class="co"># create bot dir</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">mkdir</span> mybot</span> <span id="cb1-2"><a href="#cb1-2"></a><span class="fu">mkdir</span> mybot</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> mybot</span> <span id="cb1-3"><a href="#cb1-3"></a><span class="bu">cd</span> mybot</span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span> <span id="cb1-4"><a href="#cb1-4"></a></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="co"># download latest release with wget or from https://github.com/topkecleon/telegram-bot-bash/releases/latest</span></span> <span id="cb1-5"><a href="#cb1-5"></a><span class="co"># download latest release with wget or from https://github.com/topkecleon/telegram-bot-bash/releases/latest</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="fu">wget</span> <span class="st">&quot;https://github.com/</span><span class="va">$(</span><span class="fu">wget</span> <span class="at">-q</span> <span class="st">&quot;https://github.com/topkecleon/telegram-bot-bash/releases/latest&quot;</span> <span class="at">-O</span> <span class="at">-</span> <span class="kw">|</span> <span class="fu">egrep</span> <span class="st">&#39;/.*/download/.*/.*tar.gz&#39;</span> <span class="at">-o</span><span class="va">)</span><span class="st">&quot;</span></span> <span id="cb1-6"><a href="#cb1-6"></a><span class="fu">wget</span> <span class="st">&quot;https://github.com/</span><span class="va">$(</span><span class="fu">wget</span> -q <span class="st">&quot;https://github.com/topkecleon/telegram-bot-bash/releases/latest&quot;</span> -O - <span class="kw">|</span> <span class="fu">egrep</span> <span class="st">&#39;/.*/download/.*/.*tar.gz&#39;</span> -o<span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a></span> <span id="cb1-7"><a href="#cb1-7"></a></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="co"># Extract the tar archive and go into bot dir</span></span> <span id="cb1-8"><a href="#cb1-8"></a><span class="co"># Extract the tar archive and go into bot dir</span></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="fu">tar</span> <span class="at">-xzf</span> <span class="pp">*</span>.tar.gz</span> <span id="cb1-9"><a href="#cb1-9"></a><span class="fu">tar</span> -xzf *.tar.gz</span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> telegram-bot-bash</span> <span id="cb1-10"><a href="#cb1-10"></a><span class="bu">cd</span> telegram-bot-bash</span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a></span> <span id="cb1-11"><a href="#cb1-11"></a></span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a><span class="co"># initialize your bot</span></span> <span id="cb1-12"><a href="#cb1-12"></a><span class="co"># initialize your bot</span></span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a><span class="co"># Enter your bot token when asked, all other questions can be answered by hitting the \&lt;Return\&gt; key.</span></span> <span id="cb1-13"><a href="#cb1-13"></a><span class="co"># Enter your bot token when asked, all other questions can be answered by hitting the \&lt;Return\&gt; key.</span></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a><span class="ex">./bashbot.sh</span> init</span> <span id="cb1-14"><a href="#cb1-14"></a><span class="ex">./bashbot.sh</span> init</span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a></span> <span id="cb1-15"><a href="#cb1-15"></a></span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a><span class="co"># Now start your bot</span></span> <span id="cb1-16"><a href="#cb1-16"></a><span class="co"># Now start your bot</span></span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a><span class="ex">./bashbot.sh</span> start</span> <span id="cb1-17"><a href="#cb1-17"></a><span class="ex">./bashbot.sh</span> start</span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a></span> <span id="cb1-18"><a href="#cb1-18"></a></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a><span class="ex">Bottoken</span> is valid ...</span> <span id="cb1-19"><a href="#cb1-19"></a><span class="ex">Bottoken</span> is valid ...</span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a><span class="ex">Bot</span> Name: yourbotname_bot</span> <span id="cb1-20"><a href="#cb1-20"></a><span class="ex">Bot</span> Name: yourbotname_bot</span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a><span class="ex">Session</span> Name: yourbotname_bot-startbot</span> <span id="cb1-21"><a href="#cb1-21"></a><span class="ex">Session</span> Name: yourbotname_bot-startbot</span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a><span class="ex">Bot</span> started successfully.</span></code></pre></div> <span id="cb1-22"><a href="#cb1-22"></a><span class="ex">Bot</span> started successfully.</span></code></pre></div>
<p>Now open the Telegram App on your mobile phone and start a chat with your bot (<em>your bot's username is shown after 'Bot Name:'</em>):</p> <p>Now open the Telegram App on your mobile phone and start a chat with your bot (<em>your bot's username is shown after 'Bot Name:'</em>):</p>
<pre><code>/start <pre><code>/start
@ -326,7 +194,8 @@ Available commands:
/info /info
This is bashbot, the Telegram bot written entirely in bash. This is bashbot, the Telegram bot written entirely in bash.
It features background tasks and interactive chats, and can serve as an interface for CLI programs.</code></pre> It features background tasks and interactive chats, and can serve as an interface for CLI programs.
</code></pre>
<p>For more Information on how to install, customize and use your new bot, read the <a href="#Documentation">Documentation</a>.</p> <p>For more Information on how to install, customize and use your new bot, read the <a href="#Documentation">Documentation</a>.</p>
<h3>Log files</h3> <h3>Log files</h3>
<p>Bashbot actions are logged to <code>BASHBOT.log</code>. Telegram send/receive errors are logged to <code>ERROR.log</code>. Start bashbot in debug mode to see all messages sent to / received from Telegram, as well as bash command error messages.</p> <p>Bashbot actions are logged to <code>BASHBOT.log</code>. Telegram send/receive errors are logged to <code>ERROR.log</code>. Start bashbot in debug mode to see all messages sent to / received from Telegram, as well as bash command error messages.</p>
@ -336,7 +205,8 @@ It features background tasks and interactive chats, and can serve as an interfac
| |__ ERROR.log # connection errors from / to Telegram API | |__ ERROR.log # connection errors from / to Telegram API
| | | |
| |__ DEBUG.log # stdout/stderr of you bot (debug mode enabled) | |__ DEBUG.log # stdout/stderr of you bot (debug mode enabled)
| |__ MESSAGE.log # full text of all message send/received (debug mode enabled)</code></pre> | |__ MESSAGE.log # full text of all message send/received (debug mode enabled)
</code></pre>
<hr /> <hr />
<h2>Security Considerations</h2> <h2>Security Considerations</h2>
<p>Running a Telegram Bot means it is connected to the public and you never know what's send to your Bot.</p> <p>Running a Telegram Bot means it is connected to the public and you never know what's send to your Bot.</p>
@ -372,27 +242,27 @@ It features background tasks and interactive chats, and can serve as an interfac
<h3>Can I send messages from CLI and scripts?</h3> <h3>Can I send messages from CLI and scripts?</h3>
<p>Of course you can send messages from command line and scripts! Simply install bashbot as <a href="#Your-really-first-bashbot-in-a-nutshell">described here</a>, send the message '/start' to set yourself as botadmin and then stop the bot with <code>./bashbot.sh stop</code>.</p> <p>Of course you can send messages from command line and scripts! Simply install bashbot as <a href="#Your-really-first-bashbot-in-a-nutshell">described here</a>, send the message '/start' to set yourself as botadmin and then stop the bot with <code>./bashbot.sh stop</code>.</p>
<p>Bashbot provides some ready to use scripts for sending messages from command line in <code>bin/</code> dir, e.g. <code>send_message.sh</code>.</p> <p>Bashbot provides some ready to use scripts for sending messages from command line in <code>bin/</code> dir, e.g. <code>send_message.sh</code>.</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">bin/send_message.sh</span> BOTADMIN <span class="st">&quot;This is my first message send from CLI&quot;</span></span> <div class="sourceCode" id="cb4"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1"></a><span class="ex">bin/send_message.sh</span> BOTADMIN <span class="st">&quot;This is my first message send from CLI&quot;</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb4-2"><a href="#cb4-2"></a></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="ex">bin/send_message.sh</span> <span class="at">--help</span></span></code></pre></div> <span id="cb4-3"><a href="#cb4-3"></a><span class="ex">bin/send_message.sh</span> --help</span></code></pre></div>
<p>You can also source bashbot for use in your scripts, for more information see <a href="doc/4_expert.md">Expert Use</a>.</p> <p>You can also source bashbot for use in your scripts, for more information see <a href="doc/4_expert.md">Expert Use</a>.</p>
<h3>Blocked by telegram?</h3> <h3>Blocked by telegram?</h3>
<p>This may happen if too many or wrong requests are sent to api.telegram.org, e.g. using a invalid token or invalid API calls. If the block stay for longer time you can ask telegram service to unblock your IP-Address.</p> <p>This may happen if too many or wrong requests are sent to api.telegram.org, e.g. using a invalid token or invalid API calls. If the block stay for longer time you can ask telegram service to unblock your IP-Address.</p>
<p>You can check with curl or wget if you are blocked by Telegram:</p> <p>You can check with curl or wget if you are blocked by Telegram:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">curl</span> <span class="at">-m</span> 10 https://api.telegram.org/bot</span> <div class="sourceCode" id="cb5"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1"></a><span class="ex">curl</span> -m 10 https://api.telegram.org/bot</span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="co">#curl: (28) Connection timed out after 10001 milliseconds</span></span> <span id="cb5-2"><a href="#cb5-2"></a><span class="co">#curl: (28) Connection timed out after 10001 milliseconds</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a></span> <span id="cb5-3"><a href="#cb5-3"></a></span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="fu">wget</span> <span class="at">-t</span> 1 <span class="at">-T</span> 10 https://api.telegram.org/bot</span> <span id="cb5-4"><a href="#cb5-4"></a><span class="fu">wget</span> -t 1 -T 10 https://api.telegram.org/bot</span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="co">#Connecting to api.telegram.org (api.telegram.org)|46.38.243.234|:443... failed: Connection timed out.</span></span> <span id="cb5-5"><a href="#cb5-5"></a><span class="co">#Connecting to api.telegram.org (api.telegram.org)|46.38.243.234|:443... failed: Connection timed out.</span></span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a></span> <span id="cb5-6"><a href="#cb5-6"></a></span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="ex">nc</span> <span class="at">-w</span> 2 api.telegram.org 443 <span class="kw">||</span> <span class="bu">echo</span> <span class="st">&quot;your IP seems blocked by telegram&quot;</span></span> <span id="cb5-7"><a href="#cb5-7"></a><span class="ex">nc</span> -w 2 api.telegram.org 443 <span class="kw">||</span> <span class="bu">echo</span> <span class="st">&quot;your IP seems blocked by telegram&quot;</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a><span class="co">#your IP seems blocked by telegram</span></span></code></pre></div> <span id="cb5-8"><a href="#cb5-8"></a><span class="co">#your IP seems blocked by telegram</span></span></code></pre></div>
<p>Bashbot offers the option to recover from broken connections (blocked). Therefore you can provide a function named <code>bashbotBlockRecover()</code> in <code>mycommands.sh</code>, the function is called every time when a broken connection is detected.</p> <p>Bashbot offers the option to recover from broken connections (blocked). Therefore you can provide a function named <code>bashbotBlockRecover()</code> in <code>mycommands.sh</code>, the function is called every time when a broken connection is detected.</p>
<p>Possible actions are: Check if network is working, change IP-Address or simply wait some time. See <code>mycommnds.sh.dist</code> for an example.</p> <p>Possible actions are: Check if network is working, change IP-Address or simply wait some time. See <code>mycommnds.sh.dist</code> for an example.</p>
<hr /> <hr />
<p>@Gnadelwartz</p> <p>@Gnadelwartz</p>
<h2>That's it all guys!</h2> <h2>That's it all guys!</h2>
<p>If you feel that there's something missing or if you found a bug, feel free to submit a pull request!</p> <p>If you feel that there's something missing or if you found a bug, feel free to submit a pull request!</p>
<h4>$$VERSION$$ v1.5-0-g8adca9b</h4> <h4>$$VERSION$$ v1.52-0-g1a83202</h4>
</body> </body>
</html> </html>

View File

@ -10,6 +10,14 @@ Elsewhere, consider it released under the [WTFPLv2](http://www.wtfpl.net/txt/cop
Linted by [#ShellCheck](https://github.com/koalaman/shellcheck) Linted by [#ShellCheck](https://github.com/koalaman/shellcheck)
---
**Bashbot** is created by old-fashioned shell hackers to show that it's possible to write a bot in Bash.
It is designed for **simple** use cases and easily integrates with Linux tasks.
For bots that serve a lot of users or a heavy workload, I strongly recommend using a dedicated bot framework.
---
## Prerequisites ## Prerequisites
Uses [JSON.sh](http://github.com/dominictarr/JSON.sh)/[JSON.awk](https://github.com/step-/JSON.awk) and the magic of sed. Uses [JSON.sh](http://github.com/dominictarr/JSON.sh)/[JSON.awk](https://github.com/step-/JSON.awk) and the magic of sed.
@ -242,4 +250,4 @@ See `mycommnds.sh.dist` for an example.
If you feel that there's something missing or if you found a bug, feel free to submit a pull request! If you feel that there's something missing or if you found a bug, feel free to submit a pull request!
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -319,5 +319,5 @@ That's it all guys!
If you feel that there's something missing or if you found a bug, feel free to submit a If you feel that there's something missing or if you found a bug, feel free to submit a
pull request! pull request!
$$VERSION$$ v1.5-0-g8adca9b $$VERSION$$ v1.52-0-g1a83202

View File

@ -4,7 +4,7 @@
# this addon counts how many files, e.g. stickers, are sent to # this addon counts how many files, e.g. stickers, are sent to
# a chat and takes actions if threshold is reached # a chat and takes actions if threshold is reached
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# used events: # used events:
# #

View File

@ -4,7 +4,7 @@
# Addons can register to bashbot events at startup # Addons can register to bashbot events at startup
# by providing their name and a callback per event # by providing their name and a callback per event
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# #
# If an event occurs each registered event function is called. # If an event occurs each registered event function is called.
# #

View File

@ -1,11 +1,11 @@
#!/bin/sh #!/bin/bash
# description: Start or stop telegram-bash-bot # description: Start or stop telegram-bash-bot
# #
# example service script to run bashbot in background as specified user # example service script to run bashbot in background as specified user
# #
# tested on: ubuntu, opensuse, debian # tested on: ubuntu, opensuse, debian
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# shellcheck disable=SC2009 # shellcheck disable=SC2009
# shellcheck disable=SC2181 # shellcheck disable=SC2181
# shellcheck disable=SC2250 # shellcheck disable=SC2250
@ -37,61 +37,91 @@ runas="nobody"
# edit the values of the following lines to fit your config: # edit the values of the following lines to fit your config:
# your bot name as given to botfather, e.g. mysomething_bot # your bot name as given to botfather, e.g. mysomething_bot
name="" name=""
[ -z "${name}" ] && name="unknown"
# your bot installation dir # your bot installation dir
bashbotdir="/usr/local/telegram-bot-bash" bashbotdir="/usr/local/telegram-bot-bash"
databotdir="${bashbotdir}/data-bot-bash" databotdir="${bashbotdir}/data-bot-bash"
FIFO="${databotdir}/webhook-fifo-${name}"
# programs to run # programs to run
bashbot="cd ${bashbotdir}; ${bashbotdir}/bashbot.sh" bashbot="cd ${bashbotdir}; ${bashbotdir}/bashbot.sh"
webhook="cd ${bashbotdir}; nohup ${bashbotdir}/bin/process_batch.sh --startbot --watch ${databotdir}/webhook-fifo-${name}" webhook="cd ${bashbotdir}; nohup ${bashbotdir}/bin/process_batch.sh --startbot --watch ${FIFO}"
# set additionl parameter, e.g. debug # set additionl parameter, e.g. debug
mode="" mode=""
# select logfile for webhook start stop and script errors
hooklog="DEBUG"
hooklog="WEBHOOK"
# END Configuration # END Configuration
####################### #######################
[ "${name}" = "" ] && name="${runas}"
# check for bot status
stat=""
ps -f -u "${runas}" | grep "${name}" | grep -qF "bashbot.sh startbot"
if [ "$?" = "0" ]; then
# printf "bashbot (%s) is running in poll mode\n" "${name}"
stat="${stat} polling"
fi
ps -f -u "${runas}" | grep "${name}" | grep -qF "process_batch.sh --startbot"
if [ "$?" = "0" ]; then
#printf "bashbot (%s) is running in webhook mode\n" "${name}"
stat="${stat} webhook"
elif [ "${name}" != "unknown" ]; then
#printf "bashbot (%s) is stopped\n" "${name}"
stat="stop"
else
stat="unknown"
fi
case "$1" in case "$1" in
'start') 'start')
[ "${stat}" != "stop" ] && printf "Warning, bot is already running in mode: %s\n" "${stat}"
$runcmd "$bashbot start $mode" # >/dev/null 2>&1 </dev/null $runcmd "$bashbot start $mode" # >/dev/null 2>&1 </dev/null
RETVAL=$? RETVAL=$?
;; ;;
'starthook') 'starthook')
[ -p "${FIFO}" ] || printf "Warning, webhook pipe not found: %s\n" "${FIFO##*/}"
[ "${stat}" != "stop" ] && printf "Warning, bot is already running in mode: %s\n" "${stat}"
printf "Starting bashbot in webhook mode ... " printf "Starting bashbot in webhook mode ... "
$runcmd "$webhook $mode </dev/null &>>${bashbotdir}/logs/WEBHOOK.log &" # >/dev/null 2>&1 </dev/null $runcmd "$webhook $mode </dev/null &>>${bashbotdir}/logs/${hooklog}.log &" # >/dev/null 2>&1 </dev/null
sleep 1 sleep 1
$0 status $0 status
RETVAL=$? RETVAL=$?
;; ;;
'stop') 'stop')
[[ "${stat}" != *"poll"* ]] && printf "Warning, bot is not in poll mode: %s\n" "${stat}"
$runcmd "$bashbot stop $mode" $runcmd "$bashbot stop $mode"
RETVAL=$? RETVAL=$?
;; ;;
'stophook') 'stophook')
[[ "${stat}" != *"hook"* ]] && printf "Warning, bot is not in webhook mode: %s\n" "${stat}"
printf "Stopping bashbot webhook mode ... " printf "Stopping bashbot webhook mode ... "
KILLID="$(ps -f -u "${runas}" | grep "process_batch.sh --startbot" | sed -E 's/[^0-9]+([0-9]+).*/\1/')" KILLID="$(ps -f -u "${runas}" | grep "process_batch.sh --startbot" | sed -E 's/[^0-9]+([0-9]+).*/\1/' | tr -s "\r\n" " ")"
if [ -n "${KILLID}" ]; then if [ -n "${KILLID}" ]; then
$runcmd "kill $(printf "%s" "${KILLID}" | tr -s "\r\n" " " )" $runcmd "kill ${KILLID} 2>/dev/null; wait ${KILLID} 2>/dev/null"
sleep 1 sleep 1
$0 status
fi fi
RETVAL=$? RETVAL=$?
$0 status
;; ;;
'status') 'status')
ps -f -u "${runas}" | grep "${name}" | grep -qF "bashbot.sh startbot" case "${stat}" in
if [ "$?" = "0" ]; then *"poll"*) printf "bashbot (%s) is running in polling mode\n" "${name}"
printf "bashbot (%s) is running in poll mode\n" "${name}"
RETVAL=0
else
ps -f -u "${runas}" | grep "${name}" | grep -qF "process_batch.sh --startbot"
if [ "$?" = "0" ]; then
printf "bashbot (%s) is running in webhook mode\n" "${name}"
RETVAL=0 RETVAL=0
else ;;&
printf "bashbot (%s) is stopped\n" "${name}" *"hook"*) printf "bashbot (%s) is running in webhook mode\n" "${name}"
RETVAL=0
;;
*"stop"*) printf "bashbot (%s) is not running\n" "${name}"
RETVAL=1 RETVAL=1
fi ;;
fi *) printf "bashbot (%s) status is %s\n" "${name}" "${stat}"
RETVAL=2
;;
esac
;; ;;
'restart'|'reload') 'restart'|'reload')
$0 stop; $0 start $0 stop; $0 start
@ -107,7 +137,7 @@ case "$1" in
;; ;;
'suspendback'|'resumeback'|'killback') 'suspendback'|'resumeback'|'killback')
# shellcheck disable=SC2250 # shellcheck disable=SC2250
$runcmd "$bashbot $1 $mode" $runcmd "$bashbot $1"
RETVAL=$? RETVAL=$?
# kill inotifywait from runuser # kill inotifywait from runuser
if [ "$1" != "resumeback" ]; then if [ "$1" != "resumeback" ]; then

View File

@ -30,7 +30,7 @@ BOTCOMMANDS="-h help init start stop status suspendback resumeback killb
# 8 - curl/wget missing # 8 - curl/wget missing
# 10 - not bash! # 10 - not bash!
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
################################################################## ##################################################################
# are we running in a terminal? # are we running in a terminal?
@ -181,6 +181,7 @@ MODULEDIR="${SCRIPTDIR}/modules"
exit_source() { exit "$1"; } exit_source() { exit "$1"; }
if [[ "${SCRIPT}" != "${REALME}" || "$1" == "source" ]]; then if [[ "${SCRIPT}" != "${REALME}" || "$1" == "source" ]]; then
SOURCE="yes" SOURCE="yes"
SCRIPT="${REALME}"
[ -z "$1" ] && exit_source() { printf "Exit from source ...\n"; return "$1"; } [ -z "$1" ] && exit_source() { printf "Exit from source ...\n"; return "$1"; }
fi fi
@ -549,14 +550,14 @@ if detect_curl ; then
# $1 URL, $2 hack: log getJson if not "" # $1 URL, $2 hack: log getJson if not ""
getJson(){ getJson(){
# shellcheck disable=SC2086 # shellcheck disable=SC2086
"${BASHBOT_CURL}" -sL -k ${BASHBOT_CURL_ARGS} -m "${TIMEOUT}" "$1" "${BASHBOT_CURL}" -sL -k ${BASHBOT_CURL_ARGS} -m "${TIMEOUT}" -K - <<<"url=$1"
} }
# curl variant for sendJson # curl variant for sendJson
# usage: "JSON" "URL" # usage: "JSON" "URL"
sendJson_do(){ sendJson_do(){
# shellcheck disable=SC2086 # shellcheck disable=SC2086
"${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} -m "${TIMEOUT}"\ "${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} -m "${TIMEOUT}"\
-d "$1" -X POST "$2" -H "Content-Type: application/json" | "${JSONSHFILE}" -b -n 2>/dev/null -d "$1" -X POST -K - <<<"url=$2" -H "Content-Type: application/json" | "${JSONSHFILE}" -b -n 2>/dev/null
} }
#$1 Chat, $2 what, $3 file, $4 URL, $5 caption #$1 Chat, $2 what, $3 file, $4 URL, $5 caption
sendUpload() { sendUpload() {
@ -565,11 +566,11 @@ if detect_curl ; then
[ -n "${BASHBOTDEBUG}" ] &&\ [ -n "${BASHBOTDEBUG}" ] &&\
log_update "sendUpload CHAT=$1 WHAT=$2 FILE=$3 CAPT=$5" log_update "sendUpload CHAT=$1 WHAT=$2 FILE=$3 CAPT=$5"
# shellcheck disable=SC2086 # shellcheck disable=SC2086
res="$("${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} "$4" -F "chat_id=$1"\ res="$("${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} -K - <<<"url=$4" -F "chat_id=$1"\
-F "$2=@$3;${3##*/}" -F "caption=$5" | "${JSONSHFILE}" -b -n 2>/dev/null )" -F "$2=@$3;${3##*/}" -F "caption=$5" | "${JSONSHFILE}" -b -n 2>/dev/null )"
else else
# shellcheck disable=SC2086 # shellcheck disable=SC2086
res="$("${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} "$4" -F "chat_id=$1"\ res="$("${BASHBOT_CURL}" -s -k ${BASHBOT_CURL_ARGS} -K - <<<"url=$4" -F "chat_id=$1"\
-F "$2=@$3;${3##*/}" | "${JSONSHFILE}" -b -n 2>/dev/null )" -F "$2=@$3;${3##*/}" | "${JSONSHFILE}" -b -n 2>/dev/null )"
fi fi
sendJsonResult "${res}" "sendUpload (curl)" "$@" sendJsonResult "${res}" "sendUpload (curl)" "$@"
@ -580,14 +581,14 @@ else
if _exists wget; then if _exists wget; then
getJson(){ getJson(){
# shellcheck disable=SC2086 # shellcheck disable=SC2086
wget --no-check-certificate -t 2 -T "${TIMEOUT}" ${BASHBOT_WGET_ARGS} -qO - "$1" wget --no-check-certificate -t 2 -T "${TIMEOUT}" ${BASHBOT_WGET_ARGS} -qO - -i <<<"$1"
} }
# curl variant for sendJson # curl variant for sendJson
# usage: "JSON" "URL" # usage: "JSON" "URL"
sendJson_do(){ sendJson_do(){
# shellcheck disable=SC2086 # shellcheck disable=SC2086
wget --no-check-certificate -t 2 -T "${TIMEOUT}" ${BASHBOT_WGET_ARGS} -qO - --post-data="$1" \ wget --no-check-certificate -t 2 -T "${TIMEOUT}" ${BASHBOT_WGET_ARGS} -qO - --post-data="$1" \
--header='Content-Type:application/json' "$2" | "${JSONSHFILE}" -b -n 2>/dev/null --header='Content-Type:application/json' -i <<<"$2" | "${JSONSHFILE}" -b -n 2>/dev/null
} }
sendUpload() { sendUpload() {
log_error "Sorry, wget does not support file upload" log_error "Sorry, wget does not support file upload"
@ -675,25 +676,25 @@ sendJsonResult(){
# timeout, failed connection or blocked # timeout, failed connection or blocked
if [ "${BOTSENT[ERROR]}" == "999" ];then if [ "${BOTSENT[ERROR]}" == "999" ];then
# check if default curl and args are OK # check if default curl and args are OK
if ! curl -sL -k -m 2 "${URL}" >/dev/null 2>&1 ; then if ! curl -sL -k -m 2 "${URL}" >/dev/null 2>&1 ; then
printf "%(%c)T: BASHBOT IP Address seems blocked!\n" -1 printf "%(%c)T: BASHBOT IP Address seems blocked!\n" -1
# user provided function to recover or notify block # user provided function to recover or notify block
if _exec_if_function bashbotBlockRecover; then if _exec_if_function bashbotBlockRecover; then
BASHBOT_RETRY="2" BASHBOT_RETRY="2"
printf "bashbotBlockRecover returned true, retry %s ...\n" "$2" printf "bashbotBlockRecover returned true, retry %s ...\n" "$2"
sendJsonRetry "$2" "${BASHBOT_RETRY}" "${@:3}"
unset BASHBOT_RETRY
fi
return
fi
# are not blocked, default curl and args are working
if [ -n "${BASHBOT_CURL_ARGS}" ] || [ "${BASHBOT_CURL}" != "curl" ]; then
printf "Problem with \"%s %s\"? retry %s with default config ...\n"\
"${BASHBOT_CURL}" "${BASHBOT_CURL_ARGS}" "$2"
BASHBOT_RETRY="2"; BASHBOT_CURL="curl"; BASHBOT_CURL_ARGS=""
sendJsonRetry "$2" "${BASHBOT_RETRY}" "${@:3}" sendJsonRetry "$2" "${BASHBOT_RETRY}" "${@:3}"
unset BASHBOT_RETRY unset BASHBOT_RETRY
fi fi
# seems not blocked, try if blockrecover and default curl args working
elif [ -n "${BASHBOT_CURL_ARGS}" ] || [ "${BASHBOT_CURL}" != "curl" ]; then
printf "Problem with \"%s %s\"? retry %s with default config ...\n"\
"${BASHBOT_CURL}" "${BASHBOT_CURL_ARGS}" "$2"
BASHBOT_RETRY="2"; BASHBOT_CURL="curl"; BASHBOT_CURL_ARGS=""
_exec_if_function bashbotBlockRecover
sendJsonRetry "$2" "${BASHBOT_RETRY}" "${@:3}"
unset BASHBOT_RETRY
fi
[ -n "${BOTSENT[ERROR]}" ] && processError "$3" "${BOTSENT[ERROR]}" "$4" "" "${BOTSENT[DESCRIPTION]}" "$5" "$6"
fi fi
fi fi
} >>"${ERRORLOG}" } >>"${ERRORLOG}"

View File

@ -21,7 +21,7 @@ USAGE='any_command.sh [-h|--help] [--force|--reference] bot_command args ...'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 30.01.2021 10:24 # CREATED: 30.01.2021 10:24
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -13,7 +13,7 @@
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 18.12.2020 12:27 # CREATED: 18.12.2020 12:27
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
############ ############

View File

@ -11,7 +11,7 @@
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 27.01.2021 13:42 # CREATED: 27.01.2021 13:42
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# shellcheck disable=SC2059 # shellcheck disable=SC2059

View File

@ -17,7 +17,7 @@ USAGE='bashbot_stats.sh [-h|--help] [debug]'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 23.12.2020 20:34 # CREATED: 23.12.2020 20:34
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# set bashbot environment # set bashbot environment

View File

@ -20,7 +20,7 @@ USAGE='delete_message.sh [-h|--help] "CHAT[ID]" "MESSAGE[ID]" [debug]'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 03.01.2021 15:37 # CREATED: 03.01.2021 15:37
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -26,7 +26,7 @@ USAGE='send_message.sh [-h|--help] "CHAT[ID]" "MESSAGE[ID]" "text|url" ...'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 21.01.2021 08:10 # CREATED: 21.01.2021 08:10
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -23,7 +23,7 @@ USAGE='send_edit_message.sh [-h|--help] [format|caption] "CHAT[ID]" "MESSAGE[ID]
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 23.12.2020 16:52 # CREATED: 23.12.2020 16:52
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -20,7 +20,7 @@ USAGE='kickban_user.sh [-h|--help] [-u|--unban] "CHAT[ID]" "USER[ID]" [debug]'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 25.01.2021 20:34 # CREATED: 25.01.2021 20:34
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -4,7 +4,7 @@
# #
# FILE: bin/process_batch.sh # FILE: bin/process_batch.sh
# #
USAGE='process_update.sh [-h|--help] [-s|--startbot] [-w|--watch] [-n|--lines n] [file] [debug]' USAGE='process_batch.sh [-h|--help] [-s|--startbot] [-w|--watch] [-n|--lines n] [file] [debug]'
# #
# DESCRIPTION: processes last 10 telegram updates in file, one update per line # DESCRIPTION: processes last 10 telegram updates in file, one update per line
# #
@ -21,13 +21,14 @@ USAGE='process_update.sh [-h|--help] [-s|--startbot] [-w|--watch] [-n|--lines n]
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 27.02.2021 13:14 # CREATED: 27.02.2021 13:14
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####
# parse args # parse args
COMMAND="process_multi_updates" COMMAND="process_multi_updates"
lines="-n 10" lines="-n 10"
mode="batch"
opt=0 opt=0
while [[ "${opt}" -lt 5 && "$1" == "-"* ]] while [[ "${opt}" -lt 5 && "$1" == "-"* ]]
@ -40,6 +41,7 @@ do
;; ;;
"-w"|"--watch") "-w"|"--watch")
follow="-f" follow="-f"
mode="webhook"
shift shift
;; ;;
"-n"|"--lines") "-n"|"--lines")
@ -61,8 +63,8 @@ file="${WEBHOOK}"
if [ -n "${startbot}" ]; then if [ -n "${startbot}" ]; then
# warn when starting bot without pipe # warn when starting bot without pipe
[ -p "${file}" ] || printf "%(%c)T: %b\n" -1 "${ORANGE}Warning${NC}: File is not a pipe:${GREY} ${file##*/}${NC}" [ -p "${file}" ] || printf "%(%c)T: %b\n" -1 "${ORANGE}Warning${NC}: File is not a pipe:${GREY} ${file##*/}${NC}"
start_bot "$2" "webhook" start_bot "$2" "${mode}"
printf "%(%c)T: %b\n" -1 "${GREEN}Bot start actions done, start reading updates ....${NC}" printf "%(%c)T: %b\n" -1 "${GREEN}Bot startup actions done, start ${mode} updates ...${NC}"
fi fi
# check file exist # check file exist
if [[ ! -r "${file}" || -d "${file}" ]]; then if [[ ! -r "${file}" || -d "${file}" ]]; then
@ -74,14 +76,14 @@ fi
# ready, do stuff here ----- # ready, do stuff here -----
# kill all sub processes on exit # kill all sub processes on exit
trap 'kill $(jobs -p) 2>/dev/null; send_normal_message "'"${BOTADMIN}"'" "Bot '"${BOTNAME}"' webhook stopped ..."; printf "%(%c)T: %s\n" -1 "Bot in batch mode stopped!"' EXIT HUP QUIT trap 'printf "%(%c)T: %s\n" -1 "Bot in '"${mode}"' mode stopped"; kill $(jobs -p) 2>/dev/null; wait $(jobs -p) 2>/dev/null; send_normal_message "'"${BOTADMIN}"'" "Bot '"${BOTNAME} ${mode}"' stopped ..."' EXIT HUP QUIT
# wait after (first) update to avoid processing to many in parallel # wait after (first) update to avoid processing to many in parallel
UPDWAIT="0.5" UPDWAIT="0.5"
# use tail to read appended updates # use tail to read appended updates
# shellcheck disable=SC2086,SC2248 # shellcheck disable=SC2086,SC2248
tail ${follow} ${lines} "${file}" |\ tail ${follow} ${lines} "${file}" 2>/dev/null |\
while IFS="" read -r input while IFS="" read -r input 2>/dev/null
do do
# read json from stdin and convert update format # read json from stdin and convert update format
# replace any ID named BOTADMIN with ID of bot admin # replace any ID named BOTADMIN with ID of bot admin

View File

@ -15,7 +15,7 @@ USAGE='process_update.sh [-h|--help] [debug] [<file]'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 30.01.2021 19:14 # CREATED: 30.01.2021 19:14
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -25,7 +25,7 @@ USAGE='promote_user.sh [-h|--help] "CHAT[ID]" "USER[ID]" "right[:true|false]" ..
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 25.01.2021 22:34 # CREATED: 25.01.2021 22:34
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -28,7 +28,7 @@ USAGE='broadcast_message.sh [-h|--help] [--doit] [--groups|--both|--db=file] [fo
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 16.12.2020 16:14 # CREATED: 16.12.2020 16:14
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -26,7 +26,7 @@ USAGE='send_message.sh [-h|--help] "CHAT[ID]" "message" "text|url" ...'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 18.01.2021 11:34 # CREATED: 18.01.2021 11:34
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -9,8 +9,8 @@ USAGE='send_dice.sh [-h|--help] "CHAT[ID]" "emoji" [debug]'
# DESCRIPTION: send an animated emoji (dice) to given chat # DESCRIPTION: send an animated emoji (dice) to given chat
# #
# OPTIONS: CHAT[ID] - ID number of CHAT or BOTADMIN to send to yourself # OPTIONS: CHAT[ID] - ID number of CHAT or BOTADMIN to send to yourself
# emoji - must be one of: “🎲”, “🎯”, “🏀”, “⚽”, or “🎰” # emoji - must be one of: “🎲”, “🎯”, “🏀”, “⚽” “🎰” "🎳"
# ":game_die:" ":dart:" ":basketball:" ":soccer:" :slot_machine:" # :game_die: :dart: :basketball: :soccer: :slot_machine: :bowling:
# #
# -h - display short help # -h - display short help
# --help - this help # --help - this help
@ -21,7 +21,7 @@ USAGE='send_dice.sh [-h|--help] "CHAT[ID]" "emoji" [debug]'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 07.02.2021 18:45 # CREATED: 07.02.2021 18:45
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -25,7 +25,7 @@ USAGE='send_file.sh [-h|--help] "CHAT[ID]" "file|URL" "caption ...." [type] [deb
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 25.12.2020 20:24 # CREATED: 25.12.2020 20:24
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####

View File

@ -8,11 +8,15 @@ USAGE='send_message.sh [-h|--help] [format] "CHAT[ID]" "message ...." [debug]'
# #
# DESCRIPTION: send a message to the given user/group # DESCRIPTION: send a message to the given user/group
# #
# OPTIONS: format - normal, markdown, html (optional) # OPTIONS: format - normal, markdown, html, stdin, - (optional)
# CHAT[ID] - ID number of CHAT or BOTADMIN to send to yourself # CHAT[ID] - ID number of CHAT or BOTADMIN to send to yourself
# message - message to send in specified format # message - message to send in specified format
# if no format is givern send_message() format is used # if no format is givern send_message() format is used
# #
# use format "stdin" to read message from stdin or from a file:
# send_message.sh stdin "CHAT[ID]" <file
# df -h | send_message.sh - "CHAT[ID]"
#
# -h - display short help # -h - display short help
# --help - this help # --help - this help
# #
@ -22,7 +26,7 @@ USAGE='send_message.sh [-h|--help] [format] "CHAT[ID]" "message ...." [debug]'
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# CREATED: 16.12.2020 11:34 # CREATED: 16.12.2020 11:34
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
#### ####
@ -41,6 +45,10 @@ case "$1" in
SEND="send_html_message" SEND="send_html_message"
shift shift
;; ;;
"stdin"|"-")
FILE="stdin"
shift
;;
esac esac
# set bashbot environment # set bashbot environment
@ -56,7 +64,10 @@ else
fi fi
# send message in selected format # send message in selected format
"${SEND}" "${CHAT}" "$2" if [ "${FILE}" = "stdin" ]; then
"${SEND}" "${CHAT}" "$(cat)"
else
"${SEND}" "${CHAT}" "$2"
fi
# output send message result # output send message result
print_result print_result

View File

@ -15,7 +15,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# #
# bashbot locale defaults to c.UTF-8, adjust locale in mycommands.sh if needed # bashbot locale defaults to c.UTF-8, adjust locale in mycommands.sh if needed
@ -48,8 +48,10 @@ Additional commands from mycommands.dist ...
*• /game*: _throw a die_. *• /game*: _throw a die_.
*• /question*: _Start interactive chat_. *• /question*: _Start interactive chat_.
*• /cancel*: _Cancel any currently running interactive chat_. *• /cancel*: _Cancel any currently running interactive chat_.
*• /run_notify*: _Start background job_.
*• /stop_notify*: _Stop notify background job_.
Written by Drew (@topkecleon) and KayM (@gnadelwartz). Written by Drew (@topkecleon) and KayM (@gnadelwartz).
Get the code in my [GitHub](http://github.com/topkecleon/telegram-bot-bash) Get the code on [GitHub](http://github.com/topkecleon/telegram-bot-bash)
' '
# load modules on startup and always on on debug # load modules on startup and always on on debug

View File

@ -5,7 +5,7 @@
# #
# Description: run all tests, exit after failed test # Description: run all tests, exit after failed test
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############################################################# #############################################################
#shellcheck disable=SC1090 #shellcheck disable=SC1090

View File

@ -5,7 +5,7 @@
# #
# Description: common stuff for all dev scripts # Description: common stuff for all dev scripts
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############################################################# #############################################################
# magic to ensure that we're always inside the root of our application, # magic to ensure that we're always inside the root of our application,

View File

@ -3,7 +3,7 @@
# #
# works together with git pre-push.sh and ADD all changed files since last push # works together with git pre-push.sh and ADD all changed files since last push
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#shellcheck disable=SC1090 #shellcheck disable=SC1090
source "${0%/*}/dev.inc.sh" source "${0%/*}/dev.inc.sh"

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############ ############
# NOTE: you MUST run install-hooks.sh again when updating this file! # NOTE: you MUST run install-hooks.sh again when updating this file!

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############ ############
# NOTE: you MUST run install-hooks.sh again when updating this file! # NOTE: you MUST run install-hooks.sh again when updating this file!

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############ ############
# NOTE: you MUST run install-hooks.sh again when updating this file! # NOTE: you MUST run install-hooks.sh again when updating this file!

View File

@ -7,7 +7,7 @@
# #
# Usage: source inject-json.sh # Usage: source inject-json.sh
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############################################################## ##############################################################
# download JSON.sh # download JSON.sh

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# this has to run once atfer git clone # this has to run once atfer git clone
# and every time we create new hooks # and every time we create new hooks
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#shellcheck disable=SC1090 #shellcheck disable=SC1090
source "${0%/*}/dev.inc.sh" source "${0%/*}/dev.inc.sh"

View File

@ -7,7 +7,7 @@
# #
# Options: --notest - skip tests # Options: --notest - skip tests
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############################################################## ##############################################################
#shellcheck disable=SC1090 #shellcheck disable=SC1090

View File

@ -7,7 +7,7 @@
# #
# Usage: source make-hmtl # Usage: source make-hmtl
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
############################################################## ##############################################################
# check for correct dir # check for correct dir

View File

@ -11,7 +11,7 @@
# If you your bot is finished you can use make-standalone.sh to create the # If you your bot is finished you can use make-standalone.sh to create the
# the old all-in-one bashbot: bashbot.sh and commands.sh only! # the old all-in-one bashbot: bashbot.sh and commands.sh only!
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
################################################################### ###################################################################
# include git config and change to base dir # include git config and change to base dir

View File

@ -2,7 +2,7 @@
# #
# joke hack to obfuscate bashbot.min.sh # joke hack to obfuscate bashbot.min.sh
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# shellcheck disable=SC2028,SC2016,SC1117 # shellcheck disable=SC2028,SC2016,SC1117
infile="bashbot.sh" infile="bashbot.sh"

View File

@ -1,5 +1,5 @@
# list of additional files to check from shellcheck # list of additional files to check from shellcheck
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
bashbot.rc bashbot.rc
mycommands.conf mycommands.conf
mycommands.sh.clean mycommands.sh.clean

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# shellcheck disable=SC2016 # shellcheck disable=SC2016
# #
# Easy Versioning in git: # Easy Versioning in git:

View File

@ -132,5 +132,5 @@ You must update to [Version 1.20](https://github.com/topkecleon/telegram-bot-bas
#### [Next Create Bot](1_firstbot.md) #### [Next Create Bot](1_firstbot.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -65,5 +65,5 @@ group. This step is up to you actually.
#### [Prev Installation](0_install.md) #### [Prev Installation](0_install.md)
#### [Next Getting started](2_usage.md) #### [Next Getting started](2_usage.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -392,5 +392,5 @@ send_action "${CHAT[ID]}" "action"
#### [Prev Create Bot](1_firstbot.md) #### [Prev Create Bot](1_firstbot.md)
#### [Next Advanced Usage](3_advanced.md) #### [Next Advanced Usage](3_advanced.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -73,18 +73,31 @@ You must use the function `user_is_allowed` to check if a user has the capabilit
**See also [Bashbot User Access Control functions](6_reference.md#User-Access-Control)** **See also [Bashbot User Access Control functions](6_reference.md#User-Access-Control)**
### Interactive Chats ### Interactive Chats
Interactive chats are short running scripts, reading user input and echo data to the user. Interactive chats are simple Bash scripts, reading user input as TEXT and output TEXT to the user.
To create a new interactive chat script copy `scripts/interactive.sh.clean` to e.g. `scripts/mynewinteractive.sh`, make it executable To create a new interactive chat script copy `scripts/interactive.sh.clean` to e.g. `scripts/mynewinteractive.sh`, make it executable
and then use `start_proc` function from your bot, it's possible to pass two arguments. You find more examples for interactive scripts in 'examples' and then use `start_proc` function from your bot, it's possible to pass two arguments. You find more examples for interactive scripts in 'examples'
**Important**: The script runs standalone in a [pipeline](https://www.geeksforgeeks.org/piping-in-unix-or-linux/), it's **not possible** to use bashbot functions and variables!
```bash
commands.sh send user input as TEXT | script reads TEXT | bashbot.sh recieve output as formated TEXT (see below)
```
In case you want to process any other data then message TEXT, I recommend to switch to a more advanced bot framework.
In Bashbot you have to implement methods yourself to pass additional information in the message TEXT to the script.
(only recommended for advanced bash experts).
#### Example script
*usage*: start_proc chat_id script arg1 arg2 *usage*: start_proc chat_id script arg1 arg2
*usage*: kill_proc chat_id *usage*: kill_proc chat_id
*usage*: check_prog chat_id *usage*: check_prog chat_id
**IMPORTANT:** Scripts must read user input from '$3' instead of stdin!
**Note:** Scripts must read user input from '$3' instead of stdin!
```bash ```bash
#!/bin/bash #!/bin/bash
@ -302,5 +315,5 @@ Note: If you disable automatic retry, se above, you disable also connection prob
#### [Prev Getting started](2_usage.md) #### [Prev Getting started](2_usage.md)
#### [Next Expert Use](4_expert.md) #### [Next Expert Use](4_expert.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -154,8 +154,9 @@ To use bashbot as a system service include a working `bashbot.rc` in your init s
An example crontab is provided in `examples/bashbot.cron`. An example crontab is provided in `examples/bashbot.cron`.
- If you are running bashbot with your user-ID, copy the examples lines to your crontab and remove username `nobody`. - If you are running bashbot with your user-ID, copy the examples lines to your crontab and remove username `nobody`.
- if you run bashbot as an other user or a system service edit `examples/bashbot.cron` to fit your needs and replace username `nobody` with the username you want to run bashbot. Copy the modified file to `/etc/cron.d/bashbot` - if you run bashbot as an other user or a system service edit `examples/bashbot.cron` to fit your needs and replace username `nobody` with the username you want to run bashbot. Insert the modified lines to systm crontab file or copy to `/etc/cron.d/bashbot`
**Warning:** You must use `contab -e` command to modify sytem and user crontabs, see [Cron How-To](https://help.ubuntu.com/community/CronHowto)
### Use bashbot from CLI and scripts ### Use bashbot from CLI and scripts
You can use bashbot to send *messages*, *locations*, *venues*, *pictures* etc. from command line and scripts You can use bashbot to send *messages*, *locations*, *venues*, *pictures* etc. from command line and scripts
@ -434,5 +435,5 @@ for every poll until the maximum of BASHBOT_SLEEP ms.
#### [Prev Advanced Use](3_advanced.md) #### [Prev Advanced Use](3_advanced.md)
#### [Next Best Practice](5_practice.md) #### [Next Best Practice](5_practice.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -160,5 +160,5 @@ The second warning is about an unused variable, this is true because in our exam
#### [Prev Best Practice](5_practice.md) #### [Prev Best Practice](5_practice.md)
#### [Next Functions Reference](6_reference.md) #### [Next Functions Reference](6_reference.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -308,10 +308,10 @@ echo ${BOTSEND[ID]}
567 567
# add one button row # add one button row
edit_inline_keyboard "${CHAT[ID]}" "567" "button 1|http://rrr.de" "button 2|http://rrr.de" edit_inline_buttons "${CHAT[ID]}" "567" "button 1|http://rrr.de" "button 2|http://rrr.de"
# change buttons # change buttons
edit_inline_keyboard "${CHAT[ID]}" "567" "Success edit_inline_keyboard|http://rrr.de" edit_inline_buttons "${CHAT[ID]}" "567" "Success edit_inline_buttons|http://rrr.de"
# delete button by replace whole message # delete button by replace whole message
edit_markdownv2_message "${CHAT[ID]}" "*HI* this is a _markdown_ message inline *removed*..." edit_markdownv2_message "${CHAT[ID]}" "*HI* this is a _markdown_ message inline *removed*..."
@ -408,7 +408,7 @@ An URL Button opens the given URL, a CALLBACK button sends an update the bot mus
send_inline_keyboard "${CHAT[ID]}" "Best Dealz!" '[{"text":"Visit my Shop", "url":"https://dealz.rrr.de"}]' send_inline_keyboard "${CHAT[ID]}" "Best Dealz!" '[{"text":"Visit my Shop", "url":"https://dealz.rrr.de"}]'
# send_inline_button # send_inline_button
send_inline_keyboard "${CHAT[ID]}" "message" '[{"text":"button 1", url"":"http://rrr.de"}, {"text":"button 2", "url":"http://rrr.de"} ]' send_inline_keyboard "${CHAT[ID]}" "message" '[{"text":"button 1", "url":"http://rrr.de"}, {"text":"button 2", "url":"http://rrr.de"} ]'
# multiple button rows # multiple button rows
send_inline_keyboard "${CHAT[ID]}" "message" '[{"text":"b1", "url":"http://rrr.de"}, {"text":"b2", "url":"http://rrr.de"}], [{"text":"b3", "url":"http://rrr.de"}, "text":"b4", "url":"http://rrr.de"}]' send_inline_keyboard "${CHAT[ID]}" "message" '[{"text":"b1", "url":"http://rrr.de"}, {"text":"b2", "url":"http://rrr.de"}], [{"text":"b3", "url":"http://rrr.de"}, "text":"b4", "url":"http://rrr.de"}]'
@ -1673,5 +1673,5 @@ The name of your bot is available as bash variable "$ME", there is no need to ca
#### [Prev Best Practice](5_practice.md) #### [Prev Best Practice](5_practice.md)
#### [Next Notes for Developers](7_develop.md) #### [Next Notes for Developers](7_develop.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -387,5 +387,5 @@ fi
#### [Prev Function Reference](6_reference.md) #### [Prev Function Reference](6_reference.md)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -60,6 +60,6 @@ plus use of keyboards in private chats. It's an extended version of mycommands.s
**Webhook** contains instructions on how use webhook API to get updates from telegram instead polling Telegram server. **Webhook** contains instructions on how use webhook API to get updates from telegram instead polling Telegram server.
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -4,7 +4,7 @@
# #
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
###### ######
# parameters # parameters

View File

@ -2,7 +2,7 @@
# file: run_filename # file: run_filename
# background job to display content of all new files in WATCHDIR # background job to display content of all new files in WATCHDIR
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
###### ######
# parameters # parameters

View File

@ -2,7 +2,7 @@
# file: run_filename # file: run_filename
# background job to display all new files in WATCHDIR # background job to display all new files in WATCHDIR
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
###### ######
# parameters # parameters

View File

@ -4,7 +4,7 @@
# #
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
###### ######
# parameters # parameters

View File

@ -6,7 +6,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# shellcheck disable=SC1117 # shellcheck disable=SC1117
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# adjust your language setting here # adjust your language setting here
# https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment # https://github.com/topkecleon/telegram-bot-bash#setting-up-your-environment

View File

@ -2,7 +2,7 @@
# file. multibot.sh # file. multibot.sh
# description: run multiple telegram bots from one installation # description: run multiple telegram bots from one installation
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
if [ "$2" = "" ] || [ "$2" = "-h" ]; then if [ "$2" = "" ] || [ "$2" = "-h" ]; then
echo "Usage: $0 botname command" echo "Usage: $0 botname command"

View File

@ -7,7 +7,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
SHELL=/bin/sh SHELL=/bin/sh
@ -23,13 +23,14 @@ MAILTO=root
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday; # │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems) # │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │ # │ │ │ │ │
# │ │ │ │ │ # │ │ │ │ │ ┌───────────── run as user (must be omited in users crontab
# │ │ │ │ │ |
# * * * * * USER command to execute # * * * * * USER command to execute
# * * * * * root echo "run every minute!" # * * * * * root echo "run every minute!"
# run as www every day at 0:00 plus random sleep between 0-3h # run as www every day at 0:00 plus random sleep between 0-3h
0 0 * * * nobody sleep "$((RANDOM \% 180 ))m" ; /usr/local/telegram-bot-bash/bashbot.sh start # (re)start bot 0 0 * * * nobody sleep "$((RANDOM \% 180 ))m" ; /usr/local/telegram-bot-bash/bashbot.rc start # (re)start bot
0 0 * * * nobody sleep "$((RANDOM \% 180 ))m" ; /usr/local/telegram-bot-bash/bashbot.sh resumeback # (re)start background jobs 0 0 * * * nobody sleep "$((RANDOM \% 180 ))m" ; /usr/local/telegram-bot-bash/bashbot.rc resumeback # (re)start background jobs
# run as www on 24 of Dec, 12:00 # run as www on 24 of Dec, 12:00
0 12 24 12 * nobody /usr/local/telegram-bot-bash/bashbot.sh broadcast "X-Mas shopping is over!" # broadcast a message 0 12 24 12 * nobody /usr/local/telegram-bot-bash/bashbot.sh broadcast "X-Mas shopping is over!" # broadcast a message

View File

@ -11,7 +11,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
######################################################################## ########################################################################
###### ######

View File

@ -10,7 +10,7 @@
# AUTHOR: KayM (), kay@rrr.de # AUTHOR: KayM (), kay@rrr.de
# DATE: 19.12.2020 19:03 # DATE: 19.12.2020 19:03
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# shellcheck disable=SC2154 # shellcheck disable=SC2154
# shellcheck disable=SC2034 # shellcheck disable=SC2034

View File

@ -13,7 +13,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
######################################################################## ########################################################################
###### ######

View File

@ -10,7 +10,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
######################################################################## ########################################################################
###### ######
@ -29,6 +29,10 @@ export 'LANGUAGE=C.UTF-8'
unset IFS unset IFS
# set -f # if you are paranoid use set -f to disable globbing # set -f # if you are paranoid use set -f to disable globbing
# kill interactive script if not finished in time, e.g. user away or error
MAXWAIT="1m"
{ sleep "${MAXWAIT}"; printf "Stopping Questionnaire after %s, you need to much time to finish ... BYE\n" "${MAXWAIT}"; kill $$; wait 2>/dev/null ;} &
# simple yes/no question, defaults to no # simple yes/no question, defaults to no
printf "Hi, hello there\nWould you like some tea (y/n)?\n" printf "Hi, hello there\nWould you like some tea (y/n)?\n"
read -r answer <"${INPUT}" read -r answer <"${INPUT}"

View File

@ -1,7 +1,7 @@
# file: botacl # file: botacl
# a user not listed here, will return false from 'user_is_allowed' # a user not listed here, will return false from 'user_is_allowed'
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# Format: # Format:
# user:resource:chat # user:resource:chat

View File

@ -5,7 +5,7 @@
# to show how you can customize bashbot by only editing mycommands.sh # to show how you can customize bashbot by only editing mycommands.sh
# NOTE: this is not tested, simply copied from original source and reworked! # NOTE: this is not tested, simply copied from original source and reworked!
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# #
# shellcheck disable=SC2154 # shellcheck disable=SC2154
# shellcheck disable=SC2034 # shellcheck disable=SC2034

View File

@ -46,15 +46,13 @@ Even it seems overhead to source Bashbot for every update, it's more responsive
Nevertheles there are some limitations compared to polling mode: Nevertheles there are some limitations compared to polling mode:
- no startup actions - no startup actions
- no background* and interactive jobs
- `addons` and `TIMER_EVENTS` are not working - `addons` and `TIMER_EVENTS` are not working
\* Workaround for background jobs is to execute `./bashbot.sh resumeback` if a new background job was started. Interactive and background jobs are working as of Bashbot Version 1.51.
#### Full webhook processing #### Full webhook processing
Full webhook processing use an external script to imitate Bashbot polling mode with webhook. Full webhook processing use an external script to imitate Bashbot polling mode with webhook.
*Warning:* This method is not much testet and may not work in all cases.
1. Default webook method must work first! 1. Default webook method must work first!
2. run `bashbot.sh init` to setup bashbot to run with your user id 2. run `bashbot.sh init` to setup bashbot to run with your user id
@ -98,5 +96,5 @@ webhook updates only over secure TLS connections with a valid SSL certificate ch
`socat` looks like a tool to listen for Telegram updates from bash scripts, let's see ... `socat` looks like a tool to listen for Telegram updates from bash scripts, let's see ...
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db

View File

@ -11,7 +11,7 @@
* @license http://www.wtfpl.net/txt/copying/ WTFPLv2 * @license http://www.wtfpl.net/txt/copying/ WTFPLv2
* @since 30.01.2021 20:24 * @since 30.01.2021 20:24
* *
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
***********************************************************/ ***********************************************************/
// bashbot home dir // bashbot home dir

View File

@ -5,7 +5,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# #
# will be automatically sourced from bashbot # will be automatically sourced from bashbot

View File

@ -5,7 +5,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# will be automatically sourced from bashbot # will be automatically sourced from bashbot

View File

@ -6,7 +6,7 @@
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
# shellcheck disable=SC1117,SC2059 # shellcheck disable=SC1117,SC2059
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# will be automatically sourced from bashbot # will be automatically sourced from bashbot

View File

@ -5,7 +5,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# will be automatically sourced from bashbot # will be automatically sourced from bashbot
@ -73,11 +73,11 @@ chat_member_count() {
} }
kick_chat_member() { kick_chat_member() {
sendJson "$1" 'user_id: '"$2"'' "${URL}/kickChatMember" sendJson "$1" '"user_id": '"$2"'' "${URL}/kickChatMember"
} }
unban_chat_member() { unban_chat_member() {
sendJson "$1" 'user_id: '"$2"'' "${URL}/unbanChatMember" sendJson "$1" '"user_id": '"$2"'' "${URL}/unbanChatMember"
} }
leave_chat() { leave_chat() {

View File

@ -5,7 +5,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# #
# source from commands.sh to use jsonDB functions # source from commands.sh to use jsonDB functions
# #
@ -355,10 +355,10 @@ function jssh_updateArray_async() {
# read JSON.sh style data and asssign to an ARRAY # read JSON.sh style data and asssign to an ARRAY
# $1 ARRAY name, must be declared with "declare -A ARRAY" before calling # $1 ARRAY name, must be declared with "declare -A ARRAY" before calling
Json2Array() { Json2Array() {
# match ["....."]\t and replace \t with = and print delete ` quote true false escape not escaped $
# shellcheck disable=SC1091,SC1090 # shellcheck disable=SC1091,SC1090
# step 1: output only basic pattern
[ -z "$1" ] || source <( printf "$1"'=( %s )'\ [ -z "$1" ] || source <( printf "$1"'=( %s )'\
"$(sed -E -n -e '/\["[-0-9a-zA-Z_,."]+"\]\+*\t/ s/\t/=/p' -e 's/[`´]//g' -e 's/=(true|false)/="\1"/' -e 's/([^\]|^)\$/\1\\$/g')" ) "$(sed -E -n -e 's/[`´]//g' -e 's/\t(true|false)/\t"\1"/' -e 's/([^\]|^)\$/\1\\$/g' -e '/\["[-0-9a-zA-Z_,."]+"\]\+*\t/ s/\t/=/p')" )
} }
# get Config Key from jssh file without jsshDB # get Config Key from jssh file without jsshDB
# output ARRAY as JSON.sh style data # output ARRAY as JSON.sh style data

View File

@ -4,7 +4,7 @@
# File: processUpdates.sh # File: processUpdates.sh
# Note: DO NOT EDIT! this file will be overwritten on update # Note: DO NOT EDIT! this file will be overwritten on update
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
################################################################## ##################################################################
############## ##############
@ -62,14 +62,19 @@ process_multi_updates() {
# processing of a single array item of update # processing of a single array item of update
# $1 array index # $1 array index
process_update() { process_update() {
local num="$1" debug="$2" local chatuser="Chat" num="$1" debug="$2"
pre_process_message "${num}" pre_process_message "${num}"
# log message on debug # log message on debug
[[ -n "${debug}" ]] && log_message "New Message ==========\n$(grep -F '["result",'"${num}" <<<"${UPDATE}")" [[ -n "${debug}" ]] && log_message "New Message ==========\n$(grep -F '["result",'"${num}" <<<"${UPDATE}")"
# check for users / groups to ignore # check for users / groups to ignore, inform them ...
jssh_updateArray_async "BASHBOTBLOCKED" "${BLOCKEDFILE}" jssh_updateArray_async "BASHBOTBLOCKED" "${BLOCKEDFILE}"
[ -n "${USER[ID]}" ] && [[ -n "${BASHBOTBLOCKED[${USER[ID]}]}" || -n "${BASHBOTBLOCKED[${CHAT[ID]}]}" ]] && return if [ -n "${USER[ID]}" ] && [[ -n "${BASHBOTBLOCKED[${USER[ID]}]}" || -n "${BASHBOTBLOCKED[${CHAT[ID]}]}" ]];then
[ -n "${BASHBOTBLOCKED[${USER[ID]}]}" ] && chatuser="User"
[ "${NOTIFY_BLOCKED_USERS}" == "yes" ] &&\
send_normal_message "${CHAT[ID]}" "${chatuser} blocked because: ${BASHBOTBLOCKED[${USER[ID]}]} ${BASHBOTBLOCKED[${CHAT[ID]}]}" &
return
fi
# process per message type # process per message type
if [ -n "${iQUERY[ID]}" ]; then if [ -n "${iQUERY[ID]}" ]; then
@ -91,6 +96,10 @@ process_update() {
printf "%(%c)T: update received FROM=%s CHAT=%s CMD=%s\n" -1 "${USER[USERNAME]:0:20} (${USER[ID]})"\ printf "%(%c)T: update received FROM=%s CHAT=%s CMD=%s\n" -1 "${USER[USERNAME]:0:20} (${USER[ID]})"\
"${CHAT[USERNAME]:0:20}${CHAT[TITLE]:0:30} (${CHAT[ID]})"\ "${CHAT[USERNAME]:0:20}${CHAT[TITLE]:0:30} (${CHAT[ID]})"\
"${MESSAGE:0:30}${CAPTION:0:30}${URLS[*]}" >>"${UPDATELOG}" "${MESSAGE:0:30}${CAPTION:0:30}${URLS[*]}" >>"${UPDATELOG}"
if [[ -z "${USER[ID]}" || -z "${CHAT[ID]}" ]]; then
printf "%(%c)T: IGNORE unknown update type: %s\n" -1 "$(grep '\["result",'"${num}"'.*,"id"\]' <<<"${UPDATE}")" >>"${UPDATELOG}"
return 1
fi
fi fi
##### #####
# process inline and message events # process inline and message events
@ -282,7 +291,7 @@ process_message() {
fi fi
# split message in command and args # split message in command and args
[[ "${MESSAGE[0]}" == "/"* ]] && read -r CMD <<<"${MESSAGE[0]}" && CMD[0]="${CMD[0]%%@*}" [[ "${MESSAGE[0]}" == "/"* ]] && read -ra CMD <<<"${MESSAGE[0]}" && CMD[0]="${CMD[0]%%@*}"
# everything went well # everything went well
return 0 return 0
} }
@ -293,7 +302,7 @@ declare -A BASHBOTBLOCKED
start_bot() { start_bot() {
local DEBUGMSG local DEBUGMSG
# startup message # startup message
DEBUGMSG="Start BASHBOT updates in Mode \"${1:-normal}\" ==========" DEBUGMSG="BASHBOT startup actions, mode set to \"${1:-normal}\" =========="
log_update "${DEBUGMSG}" log_update "${DEBUGMSG}"
# redirect to Debug.log # redirect to Debug.log
if [[ "$1" == *"debug" ]]; then if [[ "$1" == *"debug" ]]; then
@ -336,6 +345,7 @@ get_updates(){
local nextsleep="100" local nextsleep="100"
local stepsleep="${BASHBOT_SLEEP_STEP:-100}" local stepsleep="${BASHBOT_SLEEP_STEP:-100}"
local maxsleep="${BASHBOT_SLEEP:-5000}" local maxsleep="${BASHBOT_SLEEP:-5000}"
printf "%(%c)T: %b\n" -1 "Bot startup actions done, start polling updates ..."
while true; do while true; do
# adaptive sleep in ms rounded to next 0.1 s # adaptive sleep in ms rounded to next 0.1 s
sleep "$(_round_float "${nextsleep}e-3" "1")" sleep "$(_round_float "${nextsleep}e-3" "1")"

View File

@ -6,7 +6,7 @@
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
# shellcheck disable=SC1117 # shellcheck disable=SC1117
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# will be automatically sourced from bashbot # will be automatically sourced from bashbot
@ -144,6 +144,12 @@ send_keyboard() {
text="$(JsonEscape "$2")" text="$(JsonEscape "$2")"
text='"text":"'"${text//$'\n'/\\n}"'"' text='"text":"'"${text//$'\n'/\\n}"'"'
fi fi
# text longer than 4096, send text and keyboard separate
if [ "${#2}" -gt 4096 ]; then
send_normal_message "$1" "$2"
send_keyboard "$1" "..." "$3"
return
fi
local one_time=', "one_time_keyboard":true' && [ -n "$4" ] && one_time="" local one_time=', "one_time_keyboard":true' && [ -n "$4" ] && one_time=""
# '"text":"$2", "reply_markup": {"keyboard": [ $3 ], "one_time_keyboard": true}' # '"text":"$2", "reply_markup": {"keyboard": [ $3 ], "one_time_keyboard": true}'
sendJson "$1" "${text}"', "reply_markup": {"keyboard": [ '"$3"' ] '"${one_time}"'}' "${MSG_URL}" sendJson "$1" "${text}"', "reply_markup": {"keyboard": [ '"$3"' ] '"${one_time}"'}' "${MSG_URL}"
@ -266,8 +272,7 @@ fi
# supports local file, URL and file_id # supports local file, URL and file_id
# $1 chat, $2 file https::// file_id:// , $3 caption, $4 extension (optional) # $1 chat, $2 file https::// file_id:// , $3 caption, $4 extension (optional)
send_file(){ send_file(){
local url what num stat media capt file="$2" ext="$4" local url what num stat media capt="$3" file="$2" ext="$4"
capt="$(JsonEscape "$3")"
if [[ "${file}" =~ ^https*:// ]]; then if [[ "${file}" =~ ^https*:// ]]; then
media="URL" media="URL"
elif [[ "${file}" == file_id://* ]]; then elif [[ "${file}" == file_id://* ]]; then
@ -333,7 +338,7 @@ send_action() {
[ -n "${BOTSENT[ERROR]}" ] && processError "${FUNCNAME[0]}" "${BOTSENT[ERROR]}" "$1" "" "${BOTSENT[DESCRIPTION]}" "$2" [ -n "${BOTSENT[ERROR]}" ] && processError "${FUNCNAME[0]}" "${BOTSENT[ERROR]}" "$1" "" "${BOTSENT[DESCRIPTION]}" "$2"
} }
# $1 chat $2 emoji “🎲”, “🎯”, “🏀”, “⚽”, “🎰" # $1 chat $2 emoji “🎲”, “🎯”, “🏀”, “⚽”, “🎰" "🎳"
# code: "\ud83c\udfb2" "\ud83c\udfaf" "\ud83c\udfc0" "\u26bd" "\ud83c\udfb0" # code: "\ud83c\udfb2" "\ud83c\udfaf" "\ud83c\udfc0" "\u26bd" "\ud83c\udfb0"
# text: ":game_die:" ":dart:" ":basketball:" ":soccer:" :slot_machine:" # text: ":game_die:" ":dart:" ":basketball:" ":soccer:" :slot_machine:"
# $3 reply_to_id # $3 reply_to_id
@ -346,6 +351,7 @@ send_dice() {
*🏀*|*basket*|*'dfc0'*|*'DFC0'*) emoji='\ud83c\udfc0' ;; *🏀*|*basket*|*'dfc0'*|*'DFC0'*) emoji='\ud83c\udfc0' ;;
*⚽*|*soccer*|*'26bd'*|*'26BD'*) emoji='\u26bd' ;; *⚽*|*soccer*|*'26bd'*|*'26BD'*) emoji='\u26bd' ;;
*🎰*|*slot* |*'dfb0'*|*'DFB0'*) emoji='\ud83c\udfb0' ;; *🎰*|*slot* |*'dfb0'*|*'DFB0'*) emoji='\ud83c\udfb0' ;;
*🎳*|*bowl* |*'dfb3'*|*'DFB3'*) emoji='\ud83c\udfb3' ;;
esac esac
sendJson "$1" '"emoji": "'"${emoji}"'"'"${reply}" "${URL}/sendDice" sendJson "$1" '"emoji": "'"${emoji}"'"'"${reply}" "${URL}/sendDice"
if [ "${BOTSENT[OK]}" = "true" ]; then if [ "${BOTSENT[OK]}" = "true" ]; then

View File

@ -12,7 +12,7 @@
# Author: KayM (gnadelwartz), kay@rrr.de # Author: KayM (gnadelwartz), kay@rrr.de
# Created: 09.01.2021 07:27 # Created: 09.01.2021 07:27
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
####################################################### #######################################################
########## ##########
@ -96,6 +96,9 @@ WELCOME_MSG="Welcome"
# export REPORT_NEWMEMBER="yes" # export REPORT_NEWMEMBER="yes"
# export REPORT_LEFTMEMBER="yes" # export REPORT_LEFTMEMBER="yes"
# uncomment to send user blocked by bot a warning if they send commands
# export NOTIFY_BLOCKED_USERS="yes"
# messages for admin only commands # messages for admin only commands
NOTADMIN="Sorry, this command is allowed for admin or owner only" NOTADMIN="Sorry, this command is allowed for admin or owner only"
NOTBOTADMIN="Sorry, this command is allowed for bot owner only" NOTBOTADMIN="Sorry, this command is allowed for bot owner only"

View File

@ -13,7 +13,7 @@
# License: WTFPLv2 http://www.wtfpl.net/txt/copying/ # License: WTFPLv2 http://www.wtfpl.net/txt/copying/
# Author: KayM (gnadelwartz), kay@rrr.de # Author: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
####################################################### #######################################################
# shellcheck disable=SC1117 # shellcheck disable=SC1117
@ -324,8 +324,21 @@ else
# func="$1" err="$2" chat="$3" user="$4" emsg="$5" remaining args # func="$1" err="$2" chat="$3" user="$4" emsg="$5" remaining args
bashbotError_403() { bashbotError_403() {
log_debug "custom errorProcessing error 403: FUNC=$1 CHAT=$3 USER=${4:-no-user} MSGID=$6 ERTXT=$5" log_debug "custom errorProcessing error 403: FUNC=$1 CHAT=$3 USER=${4:-no-user} MSGID=$6 ERTXT=$5"
local user="$4"; [[ -z "$4" && -n "$3" ]] && user="$3"
if [ -n "${user}" ]; then
# block chat/user
case "$5" in
*"blocked"*)
jssh_insertKeyDB "${user}" "User blocked bot on $(LANG=C date)" "${BLOCKEDFILE}";;
*"kicked"*)
jssh_insertKeyDB "${user}" "Bot kicked from chat on $(LANG=C date)" "${BLOCKEDFILE}";;
*)
jssh_insertKeyDB "${user}" "Reason: $6 on $(LANG=C date)" "${BLOCKEDFILE}";;
esac
fi
} }
########################### ###########################
# place your processing functions here -------------- # place your processing functions here --------------

View File

@ -10,7 +10,7 @@
# License: WTFPLv2 http://www.wtfpl.net/txt/copying/ # License: WTFPLv2 http://www.wtfpl.net/txt/copying/
# Author: KayM (gnadelwartz), kay@rrr.de # Author: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
####################################################### #######################################################
# shellcheck disable=SC1117 # shellcheck disable=SC1117
@ -126,4 +126,17 @@ else
done <<<"${result}" done <<<"${result}"
} }
###########################
# example error processing
# called when delete Message failed
# func="$1" err="$2" chat="$3" user="$4" emsg="$5" remaining args
bashbotError_delete_message() {
log_debug "custom errorProcessing delete_message: ERR=$2 CHAT=$3 MSGID=$6 ERTXT=$5"
}
# called when error 403 is returned (and no func processing)
# func="$1" err="$2" chat="$3" user="$4" emsg="$5" remaining args
bashbotError_403() {
log_debug "custom errorProcessing error 403: FUNC=$1 CHAT=$3 USER=${4:-no-user} MSGID=$6 ERTXT=$5"
}
fi fi

View File

@ -12,7 +12,7 @@
# This file is public domain in the USA and all free countries. # This file is public domain in the USA and all free countries.
# Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying) # Elsewhere, consider it to be WTFPLv2. (wtfpl.net/txt/copying)
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
######################################################################## ########################################################################
###### ######

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# magic to ensure that we're always inside the root of our application, # magic to ensure that we're always inside the root of our application,

View File

@ -11,7 +11,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# common variables # common variables

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
../dev/hooks/pre-commit.sh ../dev/hooks/pre-commit.sh

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
# include common functions and definitions # include common functions and definitions
# shellcheck source=test/ALL-tests.inc.sh # shellcheck source=test/ALL-tests.inc.sh

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions

View File

@ -10,7 +10,7 @@
# LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/ # LICENSE: WTFPLv2 http://www.wtfpl.net/txt/copying/
# AUTHOR: KayM (gnadelwartz), kay@rrr.de # AUTHOR: KayM (gnadelwartz), kay@rrr.de
# #
#### $$VERSION$$ v1.5-0-g8adca9b #### $$VERSION$$ v1.52-1-g0dae2db
#=============================================================================== #===============================================================================
# include common functions and definitions # include common functions and definitions