У меня есть .NET 8 приложение где бот это только часть, там внутри cron, удаленная консоль, система платежей, бд, нейросеть, activemq и и.д.
Я запускаю это приложение и оно поднимает весь сервис в целом, внутри него есть так же есть бот, и мне надо подключить внешний проект как либу и использовать что-то типо bot.Start();
Но WebHook требует типа приложения под web, который, если честно, я не совсем понимаю как работает внутри
Я бы хотел чтобы все было консольным приложением в котором поднимаются дочерние проекты из общего решения, а WebHook как бы тянет одеяло на себя
Разрезать приложение, вынести бота в отдельный проект (библиотека классов).
Т.е. WebApp1 тянет BotLib как зависимость и ConsoleApp2 тянет BotLib как зависимость.
P.S. WebApplication это то же самое консольное приложение, которое в main собирает WebApplication при помощи билдера, конфигурирует его и запускает.
Если очень упрощать, то внутри app.Run() сидит что-то вида while(true) и в цикле реагирует на запросы, команды ОС и прочие внешние раздражители.
Сейчас у меня множество проектов оформлены как библиотеки классов, и одно главное как ConsoleApp
Даже моя обертка над либой бота как библиотека классов, но это потому что щас там Polling и он отлично ложится в эту концепцию, мне не нужно вообще нигде WebApp, я очень не хочу этого
Теперь мне нужно все еще оставлять главное приложение как ConsoleApp, проект бота должен быть все еще библиотекой классов, к которой я обращаюсь и поднимаю сервер бота как-то так:
var bot = new TGBot();
await bot.StartAsync();
И, получается, из-за требований WebHook внутри поднимается WebApp, но проект имеет тип библиотека классов?
Я не нашел как оформить фичи WebApp в либу, по этому я тут
Во-первых, почти любое веб приложение - консольное. Т.е. не оконное, не служба.
Во-вторых, если тебе нужен WebHook, то у Telegram.Bot есть пример, как это сделать (используется ASP.NET Core) - https://github.com/TelegramBots/Telegram.Bot.Examp...
В-третьих, не стоит делать выполняемые приложения (консольные, веб, сервисы) зависимыми от других - это плохо.
Я как раз об этом примере и говорю, мне надо оформить, грубо говоря, пример по ссылке как библиотеку, запускать сервер по команде
И я как раз об этом и говорю, у меня всего одно выполняемое приложение - главное, и оно - не бот, мне нужно оформить WebHook в библиотеку которую я могу подключить и просто сказать bot.Start() запустив сервер бота
Drottarutarnum, а в чем проблема, я не понимаю.
Просто создаешь метод у своего объекта бота (Start()), который внутри себя запускает собственный веб-сервер на определенном порту. Этот веб-сервер и будет слушать хуки. Чтобы остановить какой-нибудь Stop() метод.
Так, например, prometheus работает в питоне - запускает собственный веб-сервер