Добро пожаловать в канал "Учим js вместе"! Здесь вы найдете все необходимые материалы и ресурсы для изучения JavaScript. Владелец канала - @jointimer, который с удовольствием делится своими знаниями и опытом с начинающими разработчиками. JavaScript - один из самых популярных языков программирования, используемый для создания динамических веб-сайтов и веб-приложений. Если вы хотите освоить этот язык с нуля или улучшить свои навыки, то этот канал - отличное место для вас. Мы предлагаем уроки, советы, полезные ссылки и многое другое, чтобы помочь вам стать успешным JavaScript разработчиком. Присоединяйтесь к нам и начните свой путь к владению этим удивительным языком программирования!
15 Feb, 15:51
15 Feb, 11:45
15 Feb, 10:58
13 Feb, 21:21
12 Feb, 08:17
10 Feb, 19:34
10 Feb, 12:47
10 Feb, 10:02
10 Feb, 09:01
09 Feb, 13:07
09 Feb, 09:24
08 Feb, 18:29
07 Feb, 16:56
07 Feb, 09:27
06 Feb, 15:04
06 Feb, 09:12
05 Feb, 17:48
03 Feb, 06:08
02 Feb, 12:21
01 Feb, 09:23
29 Jan, 21:16
29 Jan, 21:06
29 Jan, 18:51
27 Jan, 12:25
27 Jan, 07:12
26 Jan, 11:39
25 Jan, 10:41
24 Jan, 19:24
24 Jan, 12:11
23 Jan, 13:17
23 Jan, 09:20
22 Jan, 16:09
22 Jan, 14:54
22 Jan, 11:43
21 Jan, 13:17
21 Jan, 10:29
19 Jan, 20:52
19 Jan, 13:12
19 Jan, 12:55
19 Jan, 11:45
18 Jan, 09:44
17 Jan, 12:26
17 Jan, 10:27
15 Jan, 00:02
13 Jan, 17:26
12 Jan, 22:39
12 Jan, 15:57
06 Jan, 19:30
06 Jan, 12:06
29 Dec, 10:43
26 Dec, 18:07
23 Dec, 22:03
18 Dec, 15:37
16 Dec, 20:26
16 Dec, 17:19
11 Dec, 19:07
10 Dec, 12:42
05 Dec, 17:55
05 Dec, 07:44
03 Dec, 20:46
02 Dec, 11:11
02 Dec, 10:21
01 Dec, 12:46
import { Bot, Context, session } from 'grammy';
@Injectable()
export class BotService {
private readonly bot: Bot<Context>;
private readonly logger = new Logger(BotService.name);
private readonly WEB_APP_LINK: string;
private readonly CHANNEL_ID: string;
constructor(
private readonly configService: ConfigService,
private readonly usersService: UsersService,
) {
const telegramBotKey = this.configService.get<string>('TELEGRAM_BOT_KEY');
this.WEB_APP_LINK = this.configService.get<string>('WEB_APP_LINK') || '';
this.bot = new Bot<Context>(telegramBotKey || '');
this.CHANNEL_ID =
this.configService.get<string>('TELEGRAM_CHANNEL_ID') || '';
}
async isUserSubscribed(tgUserId: string): Promise<boolean> {
try {
const member = await this.bot.api.getChatMember(
this.CHANNEL_ID,
+tgUserId,
);
return (
member.status === 'administrator' ||
member.status === 'member' ||
member.status === 'creator'
);
} catch (error) {
if (error.code === 400) {
return false;
}
this.logger.error(`Ошибка при проверке подписки: ${error.message}`);
throw error;
}
}
async initializeBot() {
// Middleware для сессий, (admin, superadmin)
this.bot.use(session({ initial: () => ({}) }));
this.bot.command('start', async (ctx) => {
//Опишите как хотите. Тут оставил пример как нахожу пользователя
const user = await this.usersService.findOneByTgId(tgUserId);
});
this.bot.catch((err) => {
this.logger.error(`Ошибка в боте: ${err.error}`);
// Можете добавить уведомление об ошибке
});
// Запуск бота
this.bot.start();
this.logger.log('Telegram-бот запущен');
}
}
01 Dec, 12:19
29 Nov, 09:29
29 Nov, 08:54
29 Nov, 08:40
29 Nov, 08:36
28 Nov, 18:42
27 Nov, 20:48
23 Nov, 08:49
23 Nov, 08:04
20 Nov, 14:38
19 Nov, 13:38
18 Nov, 09:43
15 Nov, 21:38
15 Nov, 15:13
14 Nov, 09:28
14 Nov, 07:54
14 Nov, 05:30
12 Nov, 15:38
12 Nov, 14:47
12 Nov, 08:25
11 Nov, 08:21
10 Nov, 18:36
09 Nov, 17:09
06 Nov, 08:54
05 Nov, 15:08
02 Nov, 12:07
02 Nov, 11:42
02 Nov, 09:22
28 Oct, 09:58
22 Oct, 17:30
16 Oct, 14:57
16 Oct, 12:31
11 Oct, 18:37
08 Oct, 10:30
07 Oct, 15:14
07 Oct, 09:18
03 Oct, 10:02
01 Oct, 17:27
01 Oct, 07:42
30 Sep, 09:12
28 Sep, 14:14