Евгений @mambastick
C# Разработчик
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity
Specialization
Software Developer, Backend Developer
Junior
C#
MySQL
Linux
Git
OOP
English
C# Разработчик
Потихоньку пишу вторую часть, там буду подробно рассказывать про оплату, получение данных от пользователя и так далее...
Домашний сервак на убунте, в отдельном скрине как обычное консольное приложение крутится там и все, заливаю туда напрямую из IDE Rider, до этого через SMB.
Да, серьезно. Я только начинаю свой путь и делаю, как знаю. Как я увидел в интернете: в других статьях, форумах и других ресурсах - так и делаю. К сожалению, больше мне не откуда брать знания, которые были бы проверены всякими профессорами и прочими умными людьми.
Как пользоваться токеном я в курсе, и для правильной (да, его можно не указывать, но так лучше не делать, иначе могут быть проблемы при следующих запусках бота) работы метода
StartReceiving
он необходим.Она не блокирует основной поток, если не ставить никакие блокирующие циклы, то код запуститься и тут же завершится. А вот эта часть кода:
вообще работать не будет, так как метод
StartReceiving
(в вашем случае ReceiveAsync, и это важно, дальше поймете почему, я не просто придираюсь) имеет типvoid
, и как нам тогда ожидать завершения этого метода ?В чем проблема написать свой хендлер с консольными командами или тупо взять мой код и заменить мое бесконечное ожидание, на вот это ?
В этой статье я учу писать ботов . Я рассказываю про то, какие бывают типы приходящих обновлений, какие есть методы и как с ними работать. Если же видите замечания по коду, что он написан неверно, лучше бы рассказали, что конкретно не так и помогли улучшить, нежели тупо строить из себя самого умного и тупо критиковать.
Ну вы говорите, что я делаю неправильно, я спрашиваю: как сделать правильно ?
Да, а про graceful shutdown я вообще впервые слышу, как бы печально это не было.
Верно, я вообще по сути новичок, и учусь на всяких бесплатных ресурсах.
Ну так здесь бот запуститься и тут же выключится. Мы же используем поллинг, а значит нам нужно создать бесконечный цикл, иначе бот не будет получать сообщения. Можно, конечно, переписать на вебхуках, но я, к сожалению, так не умею.
Можно сделать консольные команды. Можно сделать админ-меню (админ-команду) в самом боте.
А как ? Я всегда использую ctrl + c :D
Вместо
await Task.Delay(-1);
ставим этот цикл и по какой-нибудь команде используемcts.Cancel
. Про сам source я понял, спасибо.Он используется в старте бота, в обработчике апдейтов и ошибок, а также его можно использовать, чтобы остановить бота, например, поставить
while(!cts.Token.IsCancellationRequested)
В смысле вяжется с ИИ ? Немного не понял вопроса. Продолжение обязательно будет.
Честно говоря, в универе меня учили только C и после C++, C# я учу сам, используя разные ресурсы (книги, видеоуроки, статьи, интернет-материалы), поэтому я был бы очень рад получать критику моему коду, чтобы совершенствоваться!
Конкретно этот пример работает в последовательном режиме, параллельности тут нет, но ее легко добавить. В следующей статье обязательно рассмотрим этот пример. Насчет пользователей, за моей спиной уже несколько ботов и пока полеты отличные, пользователей не так много, где-то 500-1000 на бота и все отлично. Может, при увеличении пользователей где-то будут провалы, но пока все стабильно.
Этот проект не рассчитывался как что-то большое, для большой аудитории. В начале статьи сказано, что в этой статье я даю необходимую базу, чтобы вы писали своих ботов, используя эту базу. Поэтому здесь идет акцент больше на теоретических знаний, что, куда и почему.
В данном коде все будет работать последовательно, параллельной работы программы нет. Чтобы код работал в параллельном режиме, нужно использовать треды (thread) или таски (task), я предпочитаю таски, ставлю Task.Run в UpdateHandler и все работает прекрасно.
Благодарю! Это моя первая статья, боялся, что будет что-то непонятно)
Скоро выпущу вторую часть этой статьи :З
Да, я изначально так и писал, но потом передумал, так как проект показался мне простым. В следующей статье (она будет продолжением этой), я уже буду использовать разные классы и методы, например, хендлер (обработчик) inline-клавиатуры, хендлер сообщений и т.д.
Приветствую. Спасибо за критику, ваши замечания действительно верны, просто изначально я хотел написать кучу методов и классов, а потом передумал, так как посчитал это неуместным для первой статьи, вот и забыл некоторые моменты подправить. Еще раз спасибо за критику, во второй статье (она будет продолжением этой) я поправлю код.
Ctrl+C или простое закрытие консоли уже не работает ?