{"id":18450776,"url":"https://github.com/xooniverse/televerse","last_synced_at":"2026-01-03T17:13:09.496Z","repository":{"id":65133092,"uuid":"582727042","full_name":"xooniverse/televerse","owner":"xooniverse","description":"Televerse is a Telegram Bot API Framework written completely in Dart. 💙","archived":false,"fork":false,"pushed_at":"2024-07-23T17:57:29.000Z","size":5873,"stargazers_count":57,"open_issues_count":0,"forks_count":10,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-07-23T19:52:42.052Z","etag":null,"topics":["dart","framework","telegram","telegram-bot-api"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/televerse","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xooniverse.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://www.buymeacoffee.com/heysreelal"]}},"created_at":"2022-12-27T17:42:37.000Z","updated_at":"2024-07-23T19:52:47.823Z","dependencies_parsed_at":"2023-11-11T12:27:15.548Z","dependency_job_id":"1855320f-07c1-4bc2-9d67-17cbdce0ab83","html_url":"https://github.com/xooniverse/televerse","commit_stats":{"total_commits":160,"total_committers":3,"mean_commits":"53.333333333333336","dds":0.03125,"last_synced_commit":"17a799dda330503843305ae0149707107cb6aa82"},"previous_names":["xooniverse/televerse","heysreelal/televerse"],"tags_count":136,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooniverse%2Fteleverse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooniverse%2Fteleverse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooniverse%2Fteleverse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooniverse%2Fteleverse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xooniverse","download_url":"https://codeload.github.com/xooniverse/televerse/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248812338,"owners_count":21165416,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","framework","telegram","telegram-bot-api"],"created_at":"2024-11-06T07:26:25.227Z","updated_at":"2026-01-03T17:13:09.490Z","avatar_url":"https://github.com/xooniverse.png","language":"Dart","funding_links":["https://www.buymeacoffee.com/heysreelal"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e Televerse \u003c/h1\u003e\n\n[![Pub Version](https://img.shields.io/pub/v/televerse?color=blue\u0026logo=blue)](https://pub.dev/packages/televerse)\n![GitHub](https://img.shields.io/github/license/xooniverse/televerse?color=green)\n![](https://shields.io/badge/Latest-Bot%20API%209.3-blue)\n\n  \u003ca href=\"https://telegram.me/TeleverseDart\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Telegram%2F@TeleverseDart-2CA5E0?style=for-the-badge\u0026logo=telegram\u0026logoColor=white\"/\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n---\n\n🤖 `Bot API version: Bot API 9.3 (December 31, 2025)`\n\nTeleverse is a powerful, easy-to-use, and highly customizable Telegram bot framework built with Dart programming language. It provides a complete and well-structured API that enables developers to create and deploy complex Telegram bots with ease. Televerse provides a total of 0 dynamic types on its public interface, making it easy for developers to write strictly typed code with full generic support.\n\n## 💻 Getting Started\n\nCreating a bot with Televerse is very easy! First, you need to import the Televerse package:\n\n## 👨🏻‍💻 Installation\n\nAdd this to your package's pubspec.yaml file:\n\n```yaml\ndependencies:\n  televerse: \u003clatest\u003e\n```\n\nNow in your Dart code, you can import the Televerse package:\n\n```dart\nimport 'package:televerse/televerse.dart';\n```\n\nAfter importing the package, you can create a new bot instance by providing your bot token:\n\n```dart\nBot bot = Bot('YOUR_BOT_TOKEN');\n```\n\nNow, you can start listening for updates such as messages, commands, etc. To start polling updates from Telegram servers, simply call:\n\n```dart\nawait bot.start();\n```\n\nThat's it! Your bot is now ready to receive updates from Telegram.\n\n\u003e [!NOTE]\n\u003e Remember to await the `bot.start()` call! This call initializes the bot and fetches details like its username. Starting the bot without awaiting could lead to unexpected behavior if initialization fails.\n\nIf you want to handle a specific command, such as the `/start` command, you can use the `bot.command` method. For example:\n\n```dart\nbot.command('start', (ctx) async {\n  await ctx.reply('Hello, World!');\n});\n```\n\nAnd that's all you need to get started with Televerse!\n\n## 📚 Documentation\n\nTeleverse has a powerful API that is much simpler and easier to use. You can now use the `bot` instance to access the powerful Televerse methods and properties, and if you want to access the Telegram Bot API methods, you can use the `bot.api` getter. Simple, and clean.\n\nNow, when you're inside a callback function, you can use the `Context` parameter which also provides you with the `api` property.\n\nFor example, if you want to send a message to a specific chat you can do it like this:\n\n```dart\nbot.api.sendMessage(ChatID(123456), \"Hello, World!\");\n\n// or with the context\nctx.api.sendMessage(ChatID(123456), \"Hello, World!\");\n```\n\n## 🔊 Listening for Updates\n\nTeleverse offers a set of custom methods to simplify your development process. Some of these methods include:\n\n- `bot.command` to listen for commands\n- `bot.on` to listen for specific filters\n- `bot.hears` to listen for text patterns\n\nLet's see an example:\n\n```dart\nbot.command(\"hello\", (ctx) async {\n  await ctx.reply(\"Hello World 👋\");\n});\n```\n\nSimilarly, you have access to many listener methods including `bot.hears`, `bot.on`, `bot.callbackQuery` etc to listen to specific events.\n\n### 🎯 Revolutionary Filter System\n\nTeleverse now features a powerful filter system with **82 built-in filters** that can be combined using logical operators!\n\n```dart\n// Simple filters\nbot.on(bot.filters.photo, (ctx) async {\n  await ctx.reply('Nice photo! 📸');\n});\n\nbot.on(bot.filters.cmd('start'), (ctx) async {\n  await ctx.reply('Welcome to the bot! 🚀');\n});\n\n// Combinable filters with logical operators\nbot.on(\n  bot.filters.photo + bot.filters.privateChat, // OR operation\n  (ctx) async {\n    await ctx.reply('Photo in private chat!');\n  },\n);\n\nbot.on(\n  bot.filters.text * bot.filters.groupChat, // AND operation\n  (ctx) async {\n    await ctx.reply('Text message in group!');\n  },\n);\n\nbot.on(\n  bot.filters.anyMessage - bot.filters.command, // Any message but NOT commands\n  (ctx) async {\n    await ctx.reply('Non-command message received!');\n  },\n);\n```\n\nYou can also create custom filters:\n\n```dart\nbot.filter(\n  (ctx) =\u003e (ctx.text?.length ?? 0) \u003e 100,\n  (ctx) async {\n    await ctx.reply('That was a long message!');\n  },\n);\n```\n\n## 🔑 Key Features\n\n### 1. 🎯 Strictly Typed with Generics\n\nTeleverse uses 0 dynamic types on the public interface and supports full generic typing, ensuring type safety and reliability throughout your bot development process.\n\n```dart\n// Custom context with full type safety\nclass MyContext extends Context {\n  MyContext(super.update, super.api, super.me);\n  \n  String get userName =\u003e from?.firstName ?? 'Unknown';\n  bool get isVip =\u003e get\u003cbool\u003e('vip') ?? false;\n}\n\nfinal bot = Bot('token', contextFactory: MyContext.new);\n\nbot.command('profile', (MyContext ctx) async {\n  await ctx.reply('Hello ${ctx.userName}! VIP: ${ctx.isVip}');\n});\n```\n\n### 2. 🏠 Local Bot API Server Support\n\nHost your own Bot API server and listen to updates effortlessly with Televerse. Simply use the `Bot.local` constructor to configure your bot with a custom base URL.\n\n```dart\n/// Creates the bot instance with local Bot API server.\nfinal Bot bot = Bot.local(\n  \"YOUR_BOT_TOKEN\",\n  \"http://localhost:8081\",\n);\n```\n\n### 3. 🌐 Serverless Setup Compatibility\n\nWhether you're using Cloud Functions or Lambda Functions, Televerse has you covered. Utilize `Bot.handleUpdate` to handle updates manually in your serverless environment.\n\n```dart\n// Create bot instance, and setup listeners\n// ...\n\nfinal json = jsonDecode(event.body);\nfinal update = Update.fromJson(json);\nbot.handleUpdate(update);\n```\n\n### 4. 🔧 Custom HTTP Client Support\n\nSay goodbye to uncertainty with Televerse's flexible HTTP client system. You can now pass your own HTTP client with custom interceptors for complete control over network requests.\n\n```dart\nimport 'package:dio/dio.dart';\n\nfinal httpClient = DioHttpClient();\n\n// Add custom interceptors\nhttpClient.dio.interceptors.add(LogInterceptor(\n  requestBody: true,\n  responseBody: true,\n));\n\nfinal bot = Bot(\n  \"YOUR_BOT_TOKEN\",\n  httpClient: httpClient,\n);\n```\n\nAlternatively, use the built-in `LoggingPlugin` for easy request logging:\n\n```dart\nbot.plugin(LoggingPlugin());\n```\n\n### 5. ⌨️ `Keyboard` and `InlineKeyboard` Utility Classes\n\nEasily create Keyboard Reply Markup and Inline Keyboard Markup with Televerse's intuitive utility classes.\n\n```dart\nbot.command('keyboard', (ctx) async {\n  final keyboard = Keyboard()\n    .text(\"Account\")\n    .text(\"Referral\")\n    .row()\n    .text(\"Settings\")\n    .resized();\n\n  await ctx.reply(\n    \"Choose an option:\",\n    replyMarkup: keyboard,\n  );\n});\n```\n\n### 6. 🎧 Extensive Listener Methods\n\nTeleverse offers a wide array of listener methods to cater to your bot's needs:\n\n| Method              | Description                                                      |\n| ------------------- | ---------------------------------------------------------------- |\n| `bot.command`       | For listening commands                                           |\n| `bot.hears`         | For listening to specified Regular Expression                    |\n| `bot.on`            | For listening using powerful filter system                       |\n| `bot.inlineQuery`   | For listening to inline query with specified query text         |\n| `bot.text`          | For listening to message with specified text                     |\n| `bot.callbackQuery` | For listening to specified callback data                         |\n| `bot.onDocument`    | For listening to messages that contain a document               |\n| `bot.onPhoto`       | For listening to photo messages                                  |\n| `bot.chatType`      | For filtering updates on specific type of chat                   |\n| `bot.entity`        | Sets up handler method for messages that contains specified entity type |\n| `bot.myChatMember`  | Listens to change in Bot's chat member status                   |\n\n- And much much more! 🎉\n\n### 7. 🛠️ Advanced Filter System\n\nWith **80+ built-in filters**, you can handle virtually any type of update:\n\n```dart\n// Media filters\nbot.on(bot.filters.photo, photoHandler);\nbot.on(bot.filters.video, videoHandler);\nbot.on(bot.filters.document, documentHandler);\n\n// Chat type filters\nbot.on(bot.filters.privateChat, privateHandler);\nbot.on(bot.filters.groupChat, groupHandler);\n\n// Content filters\nbot.on(bot.filters.forwarded, forwardedHandler);\nbot.on(bot.filters.reply, replyHandler);\n\n// Service message filters\nbot.on(bot.filters.newChatTitle, newTitleHandler);\nbot.on(bot.filters.videoChatStarted, vcStartedHandler);\n\n// Entity filters\nbot.on(bot.filters.url, urlHandler);\nbot.on(bot.filters.mention, mentionHandler);\nbot.on(bot.filters.hashtag, hashtagHandler);\n\n// Business filters\nbot.on(bot.filters.businessMessage, businessHandler);\nbot.on(bot.filters.paidMedia, paidMediaHandler);\n```\n\nCreate complex combinations:\n\n```dart\n// Admin-only commands in private chat\nbot.on(\n  bot.filters.cmd('admin') * bot.filters.privateChat * bot.filters.user(adminId),\n  adminHandler,\n);\n\n// Media in groups but not from bots\nbot.on(\n  bot.filters.media * bot.filters.groupChat - bot.filters.bot,\n  groupMediaHandler,\n);\n```\n\n### 8. 🚀 Latest Telegram Bot API Support\n\nStay up-to-date with the latest version of the Telegram Bot API, supported by Televerse. That's a promise.\n\n### 9. 🛡️ Enhanced Error Handling\n\nHandle errors gracefully with comprehensive error handling system:\n\n```dart\nimport 'dart:developer';\n\n// Global error handler\nbot.onError((err) {\n  log(\n    \"Something went wrong: $err\",\n    error: err.error,\n    stackTrace: err.stackTrace,\n  );\n});\n\n// Error boundaries for specific middleware\nbot.errorBoundary(\n  (err, next) async {\n    await err.ctx?.reply('Something went wrong, but we handled it!');\n    await next(); // Continue processing\n  },\n  [\n    // Protected middleware\n    (ctx, next) async {\n      // This might throw an error\n      await riskyOperation();\n      await next();\n    },\n  ],\n);\n```\n\n### 10. 💬 Advanced Conversation API\n\nEngage users in complex conversations with the powerful Conversation Plugin:\n\n```dart\n// Install the conversation plugin\nbot.plugin(ConversationPlugin\u003cContext\u003e());\n\n// Define a conversation function\nFuture\u003cvoid\u003e askUserInfo(Conversation\u003cContext\u003e conversation, Context ctx) async {\n  try {\n    await ctx.reply(\"What's your name?\");\n    \n    // Wait for text message with timeout\n    final nameCtx = await conversation.waitFor(\n      bot.filters.text.matches,\n      timeout: Duration(minutes: 2),\n    );\n    \n    await nameCtx.reply(\"Nice to meet you, ${nameCtx.text}!\");\n    \n    await nameCtx.reply(\"How old are you?\");\n    \n    // Wait for a number with validation\n    final ageCtx = await conversation.waitUntil(\n      (ctx) =\u003e int.tryParse(ctx.text ?? '') != null,\n      timeout: Duration(minutes: 1),\n      otherwise: (ctx) async {\n        await ctx.reply(\"Please send a valid number.\");\n      },\n    );\n    \n    final age = int.parse(ageCtx.text!);\n    await ageCtx.reply(\"Great! You are $age years old.\");\n    \n  } on ConversationTimeoutException {\n    await ctx.reply(\"Sorry, you took too long to respond.\");\n  }\n}\n\n// Register the conversation\nbot.use(createConversation('userInfo', askUserInfo));\n\n// Start the conversation\nbot.command('info', (ctx) async {\n  await ctx.conversation.enter('userInfo');\n});\n```\n\n### 11. 📲 `InlineMenu` and `KeyboardMenu` Utility Classes\n\nEffortlessly build Interactive Menus with built-in handler registration:\n\n```dart\n// Define handler methods\nFuture\u003cvoid\u003e accountHandler(Context ctx) async {\n  await ctx.replyWithPhoto(InputFile.fromFile(File(\"account.png\")));\n  await ctx.reply(\"Here's your account details...\");\n}\n\n// Define menu options\nfinal menu = KeyboardMenu()\n  .text(\"Account\", accountHandler)\n  .text(\"Referral\", referralHandler)\n  .text(\"Settings\", settingsHandler)\n  .resized();\n\n// Attach menu to bot\nbot.attachMenu(menu);\n\n// Use menu in commands\nbot.command('start', (ctx) async {\n  await ctx.reply(\n    \"Hello, I am ${ctx.me.username}. Let's start.\",\n    replyMarkup: menu,\n  );\n});\n```\n\n### 12. 🔍 Inline Query Result Builder\n\nEfficiently build inline query results with the enhanced InlineQueryResultBuilder, supporting all inline query result types.\n\n### 13. 🔌 Revolutionary Plugin System\n\nTeleverse now features a comprehensive plugin architecture with three built-in plugins:\n\n#### Built-in Plugins:\n\n```dart\n// Session Plugin - Persistent user sessions\nbot.plugin(SessionPlugin\u003cContext, Map\u003cString, dynamic\u003e\u003e(\n  initial: () =\u003e {'visits': 0, 'preferences': {}},\n  getSessionKey: (ctx) =\u003e 'user_${ctx.from?.id ?? 0}',\n));\n\n// Conversation Plugin - Multi-step conversations\nbot.plugin(ConversationPlugin\u003cContext\u003e());\n\n// Logging Plugin - Request/response logging\nbot.plugin(LoggingPlugin\u003cContext\u003e());\n```\n\n#### Using Sessions:\n\n```dart\nbot.command('count', (ctx) async {\n  final session = ctx.session as Map\u003cString, dynamic\u003e;\n  session['visits'] = (session['visits'] as int) + 1;\n  await ctx.reply('Visit count: ${session['visits']}');\n});\n```\n\n#### Custom Plugins:\n\n```dart\nclass RateLimitPlugin\u003cCTX extends Context\u003e extends MiddlewarePlugin\u003cCTX\u003e {\n  @override\n  String get name =\u003e 'rate-limit';\n  \n  @override\n  Middleware\u003cCTX\u003e get middleware =\u003e (ctx, next) async {\n    // Rate limiting logic\n    if (await isRateLimited(ctx.from?.id)) {\n      await ctx.reply('Too many requests!');\n      return;\n    }\n    await next();\n  };\n  \n  @override\n  List\u003cString\u003e get dependencies =\u003e [];\n  \n  @override\n  String? get description =\u003e 'Rate limiter plugin';\n  \n  @override\n  void uninstall(Bot\u003cCTX\u003e bot) =\u003e bot.removeNamed(name);\n  \n  @override\n  String get version =\u003e 'v1.0.0';\n}\n\nbot.plugin(RateLimitPlugin\u003cContext\u003e());\n```\n\n### 14. 🔧 Enhanced Middleware System\n\nThe new middleware system provides powerful composition capabilities:\n\n```dart\n// Function-based middleware\nbot.use((ctx, next) async {\n  print('📥 Processing update ${ctx.update.updateId}');\n  final start = DateTime.now();\n  \n  await next();\n  \n  final duration = DateTime.now().difference(start);\n  print('✅ Processed in ${duration.inMilliseconds}ms');\n});\n\n// Conditional middleware\nbot.when(\n  (ctx) =\u003e ctx.isPrivateChat,\n  (ctx, next) async {\n    await ctx.reply('This is a private chat!');\n    await next();\n  },\n);\n\n// Forked middleware (runs concurrently)\nbot.fork((ctx, next) async {\n  // This runs in parallel with other middleware\n  await logToDatabase(ctx.update);\n});\n\n// Lazy middleware (created on demand)\nbot.lazy((ctx) {\n  return (ctx, next) async {\n    // Middleware created based on context\n    if (ctx.isGroupChat) {\n      await groupSpecificMiddleware(ctx, next);\n    } else {\n      await next();\n    }\n  };\n});\n```\n\n### 15. 🌐 Built-in Webhook Server\n\nStart a webhook bot with just one method call:\n\n```dart\nfinal bot = Bot\u003cContext\u003e('YOUR_BOT_TOKEN');\n\nbot.command('start', (ctx) async {\n  await ctx.reply('Hello from webhook bot! 🚀');\n});\n\n// This is all you need for a webhook bot!\nawait bot.startWebhook(\n  webhookUrl: 'https://your-domain.com/webhook',\n  port: 8080,\n);\n```\n\nFor development with ngrok:\n\n```dart\n// Start ngrok: ngrok http 8080\nawait bot.startWebhookDev('https://abc123.ngrok.io');\n```\n\n---\n\n## ⚡ Quick Examples\n\n### Basic Bot\n```dart\nimport 'package:televerse/televerse.dart';\n\nvoid main() async {\n  final bot = Bot\u003cContext\u003e('YOUR_BOT_TOKEN');\n  \n  // Command handlers\n  bot.command('start', (ctx) async {\n    await ctx.reply('🚀 Welcome to Televerse!');\n  });\n  \n  // Filter-based handlers\n  bot.on(bot.filters.photo, (ctx) async {\n    await ctx.reply('Nice photo! 📸');\n  });\n  \n  // Pattern matching\n  bot.hears(RegExp(r'(?i)hello'), (ctx) async {\n    await ctx.reply('Hello there! 👋');\n  });\n  \n  // Error handling\n  bot.onError((error) async {\n    print('Bot Error: ${error.error}');\n    if (error.hasContext) {\n      await error.ctx!.reply('Sorry, something went wrong!');\n    }\n  });\n  \n  await bot.start();\n}\n```\n\n### Advanced Bot with Plugins\n\n```dart\n\nfinal bot = Bot(\n  Platform.environment[\"BOT_TOKEN\"]!,\n  contextFactory: BotContext.new,\n);\n\nvoid main() async {\n  // Install plugins\n  bot.plugin(SessionPlugin\u003cBotContext, Map\u003cString, dynamic\u003e\u003e(\n    initial: () =\u003e {'count': 0},\n    getSessionKey: (ctx) =\u003e 'user_${ctx.from?.id ?? 0}',\n  ));\n\n  bot.plugin(ConversationPlugin());\n  bot.plugin(LoggingPlugin());\n\n  // Complex filters\n  bot.on(\n    bot.filters.cmd('start') * bot.filters.privateChat,\n    (ctx) async {\n      await ctx.reply('Welcome to private chat!');\n    },\n  );\n\n  // Session-aware handler\n  bot.command('count', (ctx) async {\n    final session = ctx.session;\n    session['count'] = (session['count'] as int) + 1;\n    await ctx.reply('Count: ${session['count']}');\n  });\n\n  await bot.start();\n}\n\nclass BotContext extends SessionContext\u003cMap\u003cString, dynamic\u003e\u003e {\n  BotContext(super.update, super.api, super.me);\n}\n```\n\n## 🌟 Shoot a Star\n\nIf you find Televerse helpful, please consider shooting a star on our [Github repository](https://github.com/xooniverse/televerse). This helps us to know that our work is appreciated and motivates us to continue improving Televerse.\n\n## 🤝 Join the Discussion\n\nWe have an active Telegram group where you can discuss Televerse and get help from other users and developers.\n\n\u003ca href=\"https://telegram.me/TeleverseDart\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Telegram%2F@TeleverseDart-2CA5E0?style=for-the-badge\u0026logo=telegram\u0026logoColor=white\"/\u003e\u003c/a\u003e \u003ca href=\"https://github.com/xooniverse/televerse/\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/GitHub%20Discussions-100000?style=for-the-badge\u0026logo=github\u0026logoColor=white\"/\u003e\n\u003c/a\u003e\n\n\u003cbr\u003e\n\n# Thank you ❤️\n\nTeleverse is a powerful and easy-to-use library for building Telegram bots in Dart. With its revolutionary filter system, advanced plugin architecture, and comprehensive type safety, you can write clean, maintainable code that scales from simple bots to enterprise applications. The new middleware system, conversation API, and built-in webhook server make Televerse the most advanced Telegram bot framework in the Dart ecosystem!\n\n[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Coffee%20Equals%20Code-blue?style=flat-square\u0026logo=buy-me-a-coffee)](https://www.buymeacoffee.com/heysreelal)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxooniverse%2Fteleverse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxooniverse%2Fteleverse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxooniverse%2Fteleverse/lists"}