Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
1177161
Create jekyll-gh-pages.yml
devgopher Jul 20, 2025
18f40d2
Merge pull request #14 from devgopher/devgopher-patch-11
devgopher Jul 20, 2025
0c05df5
Update README.md
devgopher Aug 9, 2025
1cd60b4
Merge pull request #15 from devgopher/devgopher-patch-12
devgopher Aug 9, 2025
9ff2293
Update README.md
devgopher Aug 9, 2025
32f3de7
Update README.md
devgopher Aug 9, 2025
38cfadc
Update README.md
devgopher Aug 9, 2025
cbca927
Merge pull request #16 from devgopher/devgopher-patch-13
devgopher Aug 9, 2025
c689747
Update README.md
devgopher Aug 9, 2025
96f3a13
Update README.md
devgopher Aug 9, 2025
44a628c
Update README.md
devgopher Aug 9, 2025
503c740
Merge pull request #17 from devgopher/release/0.8
devgopher Oct 6, 2025
321246a
Update README.md
devgopher Oct 6, 2025
e8eabbf
Merge pull request #18 from devgopher/devgopher-patch-14
devgopher Oct 6, 2025
782d4b5
- bugfix: multiple event handler appointment in case of Reloading a t…
Oct 15, 2025
2e38b0b
Update README.md
devgopher Nov 28, 2025
d9756e4
Merge pull request #19 from devgopher/devgopher-patch-15
devgopher Nov 28, 2025
b2fe900
Update README.md
devgopher Nov 28, 2025
42c2969
Merge pull request #20 from devgopher/devgopher-patch-16
devgopher Nov 28, 2025
3ef1683
Update README.md
devgopher Nov 28, 2025
0f1e204
Merge pull request #21 from devgopher/devgopher-patch-17
devgopher Nov 28, 2025
e9eafcb
Update README.md
devgopher Nov 28, 2025
03ef10b
Update README.md
devgopher Nov 28, 2025
1c027a6
Update README.md
devgopher Dec 8, 2025
568d2ee
Merge pull request #22 from devgopher/devgopher-patch-18
devgopher Dec 8, 2025
b9ffbef
Update README.md
devgopher Jan 2, 2026
68f4572
Update README.md
devgopher Jan 2, 2026
773a53c
Update README.md
devgopher Jan 12, 2026
2909dfe
Merge pull request #23 from devgopher/devgopher-patch-19
devgopher Jan 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions Botticelli.Framework.Telegram/TelegramBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class TelegramBot : BaseBot<TelegramBot>
private readonly IBotDataAccess _data;
private readonly IBotUpdateHandler _handler;
private readonly ITextTransformer _textTransformer;
private bool _handlerLoaded = false;
protected readonly ITelegramBotClient Client;

// ReSharper disable once MemberCanBeProtected.Global
Expand Down Expand Up @@ -512,13 +513,16 @@ protected override Task<StartBotResponse> InnerStartBotAsync(StartBotRequest req
BotStatusKeeper.IsStarted = true;

// Rethrowing events from BotUpdateHandler
_handler.MessageReceived += (sender, e)
if (!_handlerLoaded)
{
_handler.MessageReceived += (sender, e)
=> MessageReceived?.Invoke(sender, e);
_handler.ContactShared += (sender, e)
=> ContactShared?.Invoke(sender, e);
_handler.NewChatMembers += (sender, e)
=> NewChatMembers?.Invoke(sender, e);

_handler.ContactShared += (sender, e)
=> ContactShared?.Invoke(sender, e);
_handler.NewChatMembers += (sender, e)
=> NewChatMembers?.Invoke(sender, e);
_handlerLoaded = true;
}
Client.StartReceiving(_handler, cancellationToken: token);

Logger.LogInformation($"{nameof(StartBotAsync)}: started");
Expand Down
55 changes: 41 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
# Botticelli
# Botticelli 🤖 – Universal .NET Framework for AI-Powered Bots

<img src="https://github.com/user-attachments/assets/004b4af6-5bfb-4f23-90f0-d5da6c998027" alt="Logo" style="width: 100%; height: auto;"/>

Build smart chatbots in minutes for Telegram, WhatsApp, and beyond.
Seamless integration with ChatGPT, DeepSeek, YandexGPT, databases, queues, speech, and scheduling.
Fully open-source · Cross-platform

**Botticelli** framework: a chat bot development platform for .NET

[![License](https://img.shields.io/badge/GPL-license-orange)](https://github.com/devgopher/botticelli?tab=GPL-3.0-1-ov-file)
[![Release](https://img.shields.io/badge/Release-0.6-orange)](https://github.com/devgopher/botticelli/releases/tag/0.6)
[![Release](https://img.shields.io/badge/Release-0.8.3-orange)](https://github.com/devgopher/botticelli/releases/tag/v0.8.3)
[![Documentations](https://img.shields.io/badge/Documentation-docs-orange.svg?style=flat-square)](http://botticellibots.com/documentation/)
[![Youtrack Dashboard](https://img.shields.io/badge/Youtrack-dashboard-orange.svg?style=flat-square)](https://botticelli.youtrack.cloud/dashboard)

[![Quickstart](https://img.shields.io/badge/Quickstart-docs-orange)](http://botticellibots.com/quick-start)
[![Telegram](https://img.shields.io/badge/Telegram-channel-orange)](https://t.me/botticelli_bots)

**There are several reasons to choose Botticelli:**
- cross-platform
- supports a wide range of messengers (Telegram, Facebook, VK)
- extensible (you may add support of any other messenger, that has an open API)
- reliable
- easy to use
- easy to deploy
- easy to manage/administrate bots
- easy to integrate with **databases**
- easy to integrate with **AI** (**ChatGPT**, **YandexGPT**, **DeepSeek**) solutions (Botticelli.AI)
- easy to integrate with **speech synthesizers** (Botticelli.Talks)
- easy to integrate with queue brokers for highload systems (Botticelli.Bus)
- easy to schedule (Botticelli.Scheduler)

✅ **Multi-platform** – Telegram + custom providers
✅ **AI integrations out-of-the-box** – ChatGPT, DeepSeek, YandexGPT, GPT-J
✅ **Databases & queues** – SQL/NoSQL + RabbitMQ/Kafka support
✅ **Voice & speech** – built-in TTS/STT (Botticelli.Talks)
✅ **Task scheduler** – cron jobs & delayed messages
✅ **Web admin panel** – monitor and control all bots from one place
✅ **Minimal boilerplate** – production bot in 20–50 lines
✅ **Production-ready** – Docker, logging, health checks
✅ **100 % open-source** – no hidden paid features
✅ **.NET 8+** – runs everywhere (Windows / Linux / macOS / ARM)

# Getting Started

Expand All @@ -38,6 +44,27 @@ On a bot side we can implement any business logic we want.


## Application examples
### Air quality bot
<img src="https://github.com/devgopher/air_quality_bot/blob/master/WeatherQuality/air_new_logo.jpg" alt="Alt Text" width="512" height="auto">

[Air quality info bot](https://t.me/air_quality_info_bot) - this Telegram bot gets an air quality for your location

[Air quality info bot sources](https://github.com/devgopher/air_quality_bot) - Air quality bot sources


### Recipes finder bot
<img src="https://github.com/devgopher/cookbook_bot/blob/main/logo.png" alt="Alt Text" width="512" height="auto">

[Recipes finder bot](https://t.me/cooking_recipes903_bot) - Recipes finder Telegram bot

[Recipes finder bot sources](https://github.com/devgopher/cookbook_bot) - Recipes finder bot sources


### WikiBooks finder bot
<img src="https://github.com/devgopher/wikibooks_bot/blob/main/WikiBooksBot/WikiBooksBot/logo.png" alt="Alt Text" width="512" height="auto">

[WikiBooks finder bot](https://t.me/wikibooks_search_bot) - WikiBooks finder Telegram bot

[WikiBooks finder bot sources](https://github.com/devgopher/wikibooks_bot) - WikiBooks finder bot sources

[![Star History Chart](https://api.star-history.com/svg?repos=devgopher/botticelli&type=date&legend=top-left)](https://www.star-history.com/#devgopher/botticelli&type=date&legend=top-left)
Loading