Web Overflow 🇺🇦
4.42K subscribers
380 photos
40 videos
3 files
518 links
Затишний блог про веб-розробку і не тільки 💛

Чат: @web_overflow_chat
Співпраця: @web_overflow_support
Автори: @lluchkaa & @anastasiia_tarasenko
加入频道
Маємо для вас невеличке оновлення! 🫣

Ми знаємо, що в нас зібралось багато талановитих та досвідчених розробників. Також ми знаємо, що у вас точно є чим поділитись з іншими - технології, які ви вивчаєте, складні завдання, які ви змогли вирішити, і просто професійний досвід. Тому, ми хочемо бути тим місцем, де ви зможете легко це зробити!

Як це буде відбуватись?

Ви надсилаєте свій пост до нас в @web_overflow_support і ми будемо публікувати його в канал. Звичайно, він може підлягатись невеличкому редагуванню і перевірці на актуальність. Пости будуть маркуватись хештегом #post_from, після якого буде вказано ваш нік в телеграмі.

Навіщо це нам?

Ми ніколи не приховували, що ми не є експертами в усіх технологіях світу. І не рідко ми бачимо запити від підписників, які хочуть матеріали по фреймворкам, які ми в очі не бачили. А нам хочеться, щоб цей блог приносив користь всім!

Тому давайте ділитись знаннями та розвиватись разом! 💛
🔥20👍83🤯1
C# Moq + SponsorLink 🤯
#post_from @Digicat

Тут буде трохи про C# (ще те збоченство), але думаю буде цікаво для всіх. І нагадуємо, що кожен може розповісти про щось цікаве через наш канал.

Нещодавно в спільноті C# була активна дискусія щодо бібліотеки Moq. Вона дуже популярна для тестування, адже дозволяє підмінювати обʼєкти.

В один момент автор цієї бібліотеки додав всередину іншу - SponsorLink. Ця бібліотека інтегрує GitHub Sponsors у ваш проект та на build етапі сканує залежності і пропонує вам стати спонсором інших open-source проектів. Ви навіть отримаєте warning, якщо не підтримуєте жоден проект.

Інтегрування цієї бібліотеки в Moq була несподіваною. На додачу, SponsorLink використовував ваш email та тримав його хеш в хмарі, про що нікого не попереджав. Власне це і стало рушієм всіх обговорень..

👉 Читати статтю

Також тут варто згадати про faker.js, який минулого року теж наробив шуму.

👉 Дивитись відео

Тож питання щодо OSS досі не вирішені. В них сотні мільйонів скачувань, а автори підтримують їх. Тож як вирішити спонсорування цих авторів? Яку участь в цьому мають брати мільярдні компанії, які використовують цей код?
👍62
NestJS + Telegram Bot API
#post_from @Yurets7777 @urbfkfys

Багато хто чув або вже знає, що таке є той NestJS. І звісно всі знають, що таке Телеграм і Телеграм-Боти. Хтось чув, хтось пробував щось писати з допомогою Telegram Bot API або NestJS.

Даний пост про те - а як правильно запустити телеграм бота на NestJS?

Не можу сказати що це просто.

Як рекомендує NestJS, створюємо окрему директорію для нашого телеграм бота під назвою telegram. В ній, по класиці, нам потрібні: module - telegram.module.ts; controller - telegram.controller.ts; service - telegram.service.ts.

telegram.service.ts - це те, що відповідає за запити до нашої БД. Сюди ми підтягуємо інші сервіси, щоб ТГ-бот вмів працювати із різними сутностями в нашій БД.

@Injectable()
export class TelegramService {
constructor(
private userService: UserService,
private categoryService: CategoryService,
private cityService: CityService,
) {}
}


І всі запити до нашої БД, котрі вміють робити дані сервіси, буде вміти робити наш ТГ-бот. Потрібно просто прописати необхідні методи з даних класів в сервісі телеграму.

telegram.controller.ts - контроллер; сама назва говорить сама за себе - контролюю. Сюди ми підтягуємо наш телеграм сервіс. Прописуємо команди, прослуховувачі на екшени (кліки на кнопки) та інше.

@Update()
export class TelegramController {
private readonly telegramActions: TelegramActions;

constructor(
@InjectBot() private readonly bot: Telegraf<Context>,
private readonly telegramService: TelegramService,
) {
this.bot.telegram.setMyCommands(COMMANDS);
this.telegramActions = new TelegramActions(this.telegramService);
}

@Start()
async startCommand(ctx): Promise<any> {
// do something
}

@Command(my_command)
async addLotCommand(ctx): Promise<any> {
// do something
}

@Action(String || RegEx)
async handleRejectLot(ctx): Promise<any> {
// do something
}
}

Ну і звісно модуль, куди ж без нього 🤷
telegram.module.ts - модуль збирає в себе все що потрібно для запуску нашої app, в даному випадку бота.

@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env', // для того щоб була змога читати змінні із env
}),
TelegrafModule.forRoot({
middlewares: [session()],
token: process.env.TELEGRAM_BOT_TOKEN, //
не має сенсу в коментарях
}),
UserModule,
CategoryModule,
CityModule,
],
controllers: [],
providers: [
TelegramService,
TelegramController,
RegisterUserScene,
],
})
export class TelegramModule {}


Ліба для запуску Телеграм-Бота на NestJS називається nestjs-telegraf. Якщо хочете конкретики, запитуйте. Що знаємо - підкажемо 😉

Корисні посилання:
- NestJS
- NestJS Telegraf
- Telegram Bot API

PS. Ми тут робимо щось дійсно цікаве на даних технологіях. Скоро очікуйте Український продукт 😉
PPS. Забули показати root компонент app.module.ts

@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
MongooseModule.forRoot(process.env.MONGO_CONNECTION_STRING),
UserModule,
TelegramModule,
CategoryModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}


Поки все 😉
👍215👏3🔥1