Awesome
TelegramSmalltalkBot
A Telegram bot that connects you to a remote Squeak/Smalltalk image and allows you to explore it by sending Smalltalk expressions to the bot. Implemented using the TelegramBot framework and SimulationStudio for sandboxed execution.
<p align="center"> <a href="https://github.com/LinqLover/TelegramSmalltalkBot/blob/master/img/screenshot1.png"><img src="https://github.com/LinqLover/TelegramSmalltalkBot/raw/master/img/screenshot1.png" width="42%" hspace="5%" alt="Screenshot of a Telegram chat with the following messages sent to the bot: `Smalltalk version`, `3 + 4 * 6`, and `Display := Form extent: 600 asPoint depth: 32. Pen new mandala: 30. Display`."></img></a> <a href="https://youtu.be/HZCeThLqQmg"><img src="https://github.com/LinqLover/TelegramSmalltalkBot/raw/master/img/screencast.gif" width="38.6%" alt="Screencast of a Telegram chat."></img></a> </p>Currently available features include, but are not limited to:
- Evaluate arbitrary Smalltalk expressions
- Multi-user object memory with isolated execution to rule out global side effects in the image
- Select the receiver context (
self
) for your expressions by replying to a specific previous message of the bot - Edit your messages and answers from the bot will be updated as well
- Multi-media representations of various Smalltalk objects such as
Text
,Form
,AnimatedImageMorph
,AbstractSound
, and others - Bot commands to create different views of expression results such as
/do
,/print
, andinspect
To learn more about all capabilities, just try it out and send the /help
command.
There is also a screencast available on YouTube.
Try it out!
An instance of the bot is live under @SqueakSmalltalkBot. Just send it a message and say hello!
<a href="https://t.me/SqueakSmalltalkBot"><img src="https://github.com/LinqLover/TelegramSmalltalkBot/raw/master/img/banner.svg" height="50px" alt="@SqueakSmalltalkBot"></img></a>
If you experience any problems, please create an issue.
Self-Hosting the Bot
-
Install the latest Trunk updates in your image, then evaluate the following in a Workspace:
Metacello new baseline: 'TelegramSmalltalkBot'; githubUser: 'LinqLover' project: 'TelegramSmalltalkBot' path: 'src'; load.
-
Chat with @BotFather to register your very own bot. He will send you a secret bot token.
-
To start a bot instance, do something like:
bot := TelegramSmalltalkBot withToken: '<your_bot_token>'. bot spawnNewProcess.
-
Send a message to your bot and enjoy!
-
If you do not want that everyone from all over the world has access to your bot, you can define an allow-list of chat IDs and provide it via the
TBTestBotChatIds
global variable (experimental):Smalltalk at: #TBTestBotChatIds put: #(<your_chat_id_integer>).
You can find out your own chat ID by browsing the sessions object of your running bot instance using an object explorer, or by inspecting the result of
bot peekUpdates
after sending a message to the bot.For more information on how to run the bot, read the docs of the TelegramBot framework.
Configuration of the bot (e.g. to turn off isolation and quota mechanisms) is currently only supported by editing the source code, though it contains some applicable hooks such as TelegramSmalltalkSession >> #isolationEnabled
.
If you miss a certain configuration hook or extension point, please create an issue or a pull request.
For more information on the architecture and set-up of this bot, please refer to this overview.
There is also an inofficial setup tutorial available that was written by @cstes: Running a TelegramSmalltalkBot in a minimal zone on Oracle Solaris 11 (mirror)
Development
Version control is run using Squot. Your contribution is welcome! I'm always happy about bug reports, new feature proposals, or even pull requests ... :-)
Carpe Squeak!