Таков webdev – Telegram
Таков webdev
57 subscribers
33 photos
2 videos
63 links
Пишу про свои проекты, делюсь полезными ссылками про webdev и мыслями о разработке

Автор: @sqlzzyy
Download Telegram
Выбираем лого

Важно ваше мнение по поводу лого.

Ниже оставьте свой голос за лого, которое вам больше понравилось.

Если есть свои идеи, то напиши их в комментариях!

Благодарю!
Какое лого понравилось?
Final Results
13%
1
13%
2
25%
3
0%
4
0%
5
0%
6
50%
7
Возвращение на текущую страницу в боте

Предыстория

В первой версии бота при возвращении к списку событий переход всегда был на первую страницу.
Я задумался: как мне реализовать возвращение на ту страницу, на которой находится событие?

И ко мне пришла идея! Сейчас поделюсь ею с вами!

Идея

У каждого события есть id-команда, чтобы при клике по ней отображалась информация о событии.
К примеру, /msk_m_1802.

Через регулярку я беру отдельные части id-команды, чтобы взаимодействовать с БД и функционалом бота.
msk — это id города, в котором проходит событие. Этот id я передаю в callback_data кнопки "К списку мероприятий", чтобы вернуться к списку событий, проходящих в Москве.
1802 — это id события, которое я передаю для его поиска в БД, чтобы отобразить актуальную информацию о нем.

Я добавил номер страницы и теперь id-команда выглядит так: /msk_2_m_1802

2 — это номер страницы, на которой находится событие. Соответственно, ее я передаю в callback_data кнопки "К списку мероприятий", чтобы вернуться на ту страницу, на которой находилось мероприятие.

Как это реализовано в коде


handleItemButtons.js

await bot.onText(/\/(\w+)\_(\d+)\_m\_(\d+)/, async (msg, match) => { // обрабатываем нажатие на id-команду /msk_2_m_1802
city = match[1]; // id города
currentPage = Number(match[2]); // страница, на которой находилось событие в списке
idItem = Number(match[3]); // id события

showItem(bot, msg, city, idItem, currentPage); // функция для отображения информации о событии
});

await bot.on("callback_query", async function onCallbackQuery(callbackQuery) {
const regexpToMeetups = /^toMeetups\_(\w+)\_(\d+)/; // регулярка, чтобы бот понимал какая кнопка была нажата

if (data.match(regexpToMeetups)) {
city = data.match(regexpToMeetups)[1];
currentPage = Number(data.match(regexpToMeetups)[2]);
}

if (regexpToMeetups.test(data)) {
await showList(bot, chatId, messageId, city, username, currentPage); // функция для отображения списка событий
}
});



showItem.js

await bot.sendMessage(HELPERS.getChatId(msg), messages, {
reply_markup: {
inline_keyboard: itemKeyboard(city, currentPage), // передается id города и номер страницы с событием для кнопки "К списку мероприятий"
},
});



itemKeyboard.js

[
[
{
text: "К списку мероприятий",
callback_data: `toMeetups_${city}_${currentPage}`,
},
],
];


Блок-схема

Ниже прикрепляю блок-схему реализации функционала возвращения на страницу.

Теперь событие может находиться даже на 100 странице и пользователь может сразу вернуться на ту же страницу после просмотра информации!

Всем кода без легаси и багов!

#aboutwebdev_itmeetupsbot #aboutwebdev_боты
100👍1
Телеграм бот для создания своего списка желаний

Предыстория

Осенью прошлого года я написал телеграм бота для создания списка желаний.
При запуске создавался json-файл, в который записывались желания.
С того времени мои знания пополнились многими интересными решениями, которые мне захотелось применить в этом боте.

Сегодня я представляю вашему вниманию телеграм бота с созданием БД для записи своих желаний.

Что нового

При запуске теперь создается папка database в структуре проекта с файлом БД.
Добавил просмотр информации желания через команду.
Также было добавлено последовательное заполнение информации о желании: сначала добавляется ссылка, потом название желания.
Изменилась структура проекта. Стало проще ориентироваться по ней.

Исходный код

Исходный код проекта с БД: https://github.com/sqlzzy/wishlist-tg-bot-db
Исходный код проекта с JSON: https://github.com/sqlzzy/wishlist-telegram-bot

#aboutwebdev_личныйпроект #aboutwebdev_боты #aboutwebdev_опенсорс
12👍1
Анонсы

Про логотип

Недавно проходил опрос по выбору логотипа.
Одинаковое количество голосов в опросе и по реакциям в комментариях набрали два логотипа.

Я выбрал из них вариант Ивана. Крутой олдскульный логотип!

Скоро выйдут

В ближайшее время выйдут:
- крупное обновление бота для составления списков желаний;
- мой новый проект;

Конкурс

К выходу нового проекта будет конкурс! Подробнее о нём я напишу в понедельник.

#aboutwebdev_анонс
👍2🔥2🤯1
Я решил пока отменить текущий конкурс. Проведу его после новогодней суеты.

Но без подарков перед новым годом всё равно не останетесь!

Анонс будет в ближайшее время 🍸
Please open Telegram to view this post
VIEW IN TELEGRAM
100👍1🤯1
Обновление бота для создания своего списка желаний

Сразу после выхода поста про бота для списка желаний у меня появилось несколько идей, как его можно ещё улучшить и добавить новые функции.
Теперь я готов поделиться последними изменениями и новыми возможностями.

Обновления

Распишу изменения по пунктам.

1) Добавлены кнопки "Поделиться списком", "Поделиться всем списком", "Поделиться"

"Поделиться списком" — позволяет делиться списком желаний текущей страницы.
"Поделиться всем списком" — позволяет делиться полным списком желаний.
"Поделиться" — позволяет делиться отдельным желанием.
P.S. Благодарю Лену за идею с репостами в комментариях. 🥂

2) Переработано добавление нового желания

Ранее нельзя было добавить желание без ссылки, и я сразу взялся это исправлять. Теперь на первом шаге нужно добавить заголовок, а затем по желанию — ссылку. Чтобы добавить ссылку достаточно нажать на соответствующую кнопку и ввести её.

Такое пошаговое добавление информации — уникальная функция, которой пока нет ни в одном другом моём боте. Рад, что удалось реализовать эту задумку.

3) Изменение информации

Теперь работать с добавленным желанием стало удобнее:
- вы можете менять заголовок или ссылку, не удаляя желание и не создавая новое;
- если ссылка изначально не была добавлена, её можно указать через функцию редактирования;
- при изменении заголовка или ссылки отображается информация о том, что было изменено: показываются старый и новый заголовок или ссылка, чтобы вы могли видеть, какие изменения были внесены.

4) Улучшенная навигация

Навигация стала более логичной и удобной:
- если вы находитесь в меню изменения информации желания, нажатие кнопки "Назад" отменит действие и вернёт вас в меню самого желания;
- при добавлении желания также можно отменить действие и вернуться в главное меню, нажав на кнопку "Отмена".

5) Информация при репосте списка или желания

Теперь при репосте списка или отдельного желания будет отображаться вся информация:
- статус желания (исполнено или не исполнено);
- заголовок;
- ссылка.

Исходный код

Код проекта с БД: https://github.com/sqlzzy/wishlist-tg-bot-db

#aboutwebdev_личныйпроект #aboutwebdev_боты #aboutwebdev_опенсорс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ваше мнение

Напишите свое мнение по каналу: что нравится, чего не хватает и что можно добавить?
Буду рад прочитать ваши мнение и пожелания!

Конкурс среди комментаторов

30 декабря среди комментаторов рандом выберет трех человек, которым подарю 300 звезд каждому.
Пост с результатами будет после выбора рандома.
Таков подарок к новому году от админа канала 🍸
Please open Telegram to view this post
VIEW IN TELEGRAM
Итоги конкурса

Отзыв о канале оставил только Сергей, то ему уже отправлены 350 звёзд.

Серёга, благодарю тебя за отзыв!
С наступающим Новым годом!
🔥3👍2
Про 2024 год

Год был волнообразным и насыщенным на события.

Более подробно написал про 2024 год в заметках: https://sqlzzy.dev/notes/2024.html

Она же и первая заметка в моем блоге! ⌨️

Всех с наступающим и с Новым годом! 🎄

#aboutwebdev_блог #aboutwebdev_обо_мне
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Руководства и статьи по TypeScript

С нового года начал плотно изучать TypeScript и его основы основ.

По велению судьбы сразу наткнулся на статью из пяти частей с кратким описанием и примерами основных моментов TypeScript.
Первая, вторая, третья, четвертая и пятая части.

Далее нашел еще пару интересных ресурсов: руководство на русском языке и карманный справочник.
В руководстве на русском языке есть еще книга и статьи для более глубокого изучения и JS, и TS.
А в карманном справочнике можно ознакомиться с другими руководствами по языкам программирования.

Все описанные статьи и руководства добавлены на страницу с полезностями: https://library.sqlzzy.dev/
На странице можно найти много ссылок с руководствами, статьями, плейлистами и ресурсами для вдохновения!
Она активно пополняется новинками!

Добавляйте страницу в закладки!

#aboutwebdev_моярекомендация
🔥2
Обновления IT Meetups Bot

В течение часа выйдет новое обновление для IT Meetups Bot — бота-агрегатора IT-мероприятий. Расскажу подробнее о новых функциях и изменениях.

Новые функции

1) Список всех мероприятий

Теперь появилась возможность просмотреть мероприятия из всех городов сразу! Идею вывода полного списка событий предложил Зар.

2) Обновленная структура краткой информации

В краткой информации о мероприятии (которая отображается в списке) теперь указаны формат и стоимость билета — чтобы вам было удобнее выбирать.

3) Улучшенная сортировка

Мероприятия теперь сортируются корректно — строго по дате и времени проведения. Больше никакого хаоса!

4) Новые города

География расширяется! По предложению Зара в список добавлены новые города: Челябинск, Пермь, Екатеринбург, Новосибирск и Ульяновск.

5) Кнопка "Поддержать"
Теперь вы можете поддержать проект и мой труд через платформу Boosty.

Что дальше?

Работа над новыми функциями уже ведется. Совсем скоро поделюсь с вами еще большим количеством обновлений!

P.S. Спасибо Зару за ценные идеи и вклад в развитие IT Meetups Bot! 😎

#aboutwebdev_itmeetupsbot #aboutwebdev_личныйпроект #aboutwebdev_боты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
node-schedule: Планировщик задач для Node.js (Часть 1)

Недавно начал изучать планирование и выполнение задач в Node.js и мне встретилась библиотека node-schedule.

node-schedule — это библиотека для планирования и выполнения задач в Node.js, которая позволяет легко настроить выполнение кода по расписанию. Она поддерживает гибкие интервалы (например, каждый день, каждый понедельник, через несколько минут и т.д.), а также предоставляет возможность запускать задачи в определённое время, что делает её полезной для таких сценариев, как регулярные очистки базы данных, отправка уведомлений и выполнение других задач.

Установка


npm install node-schedule


Основные возможности

1. Планирование задач по времени (например, ежедневно в определённый час).
2. Использование cron-выражений для гибкости настройки.
3. Использование JavaScript объектов Date для точного времени выполнения.

Пример


const schedule = require('node-schedule');

// Планирование задачи на определённое время
const job = schedule.scheduleJob('42 * * * *', function(){
console.log('Задача выполняется каждый час на 42-й минуте');
});


Расписание с использованием объекта Date

node-schedule поддерживает использование JavaScript объектов Date, что позволяет точно настроить время выполнения задачи.


const schedule = require('node-schedule');

// Выполнить задачу 1 января 2026 года в 00:00:00
const date = new Date(2026, 0, 1, 0, 0, 0);
const job = schedule.scheduleJob(date, function(){
console.log('Новый год! Выполняем задачу!');
});


Расписание с использованием cron-выражений

node-schedule поддерживает cron-подобные выражения, что позволяет задать сложные расписания для выполнения задач.

Пример cron-выражения:

- * * * * * — каждую минуту.
- 0 0 * * * — каждый день в полночь.
- */5 * * * * — каждые 5 минут.


const schedule = require('node-schedule');

// Выполнить задачу каждый день в полночь
const job = schedule.scheduleJob('0 0 * * *', function(){
console.log('Задача выполняется каждый день в полночь');
});

// Выполнить задачу каждые 5 минут
const job2 = schedule.scheduleJob('*/5 * * * *', function(){
console.log('Задача выполняется каждые 5 минут');
});


Удаление или отмена задачи

Если вам нужно отменить задачу до её выполнения, вы можете использовать метод cancel().


const job = schedule.scheduleJob('*/5 * * * *', function(){
console.log('Эта задача должна выполняться каждые 5 минут');
});

// Остановим задачу через 10 секунд
setTimeout(function(){
job.cancel();
console.log('Задача отменена');
}, 10000);


Повторение задач с интервалами

Можно настроить выполнение задачи через определённые интервалы времени, используя scheduleJob() и JavaScript Date с динамическим расчётом следующего времени для задачи.

Пример: выполнение задачи каждые 5 секунд:

const schedule = require('node-schedule');

// Выполнение задачи через 5 секунд
const job = schedule.scheduleJob('*/5 * * * * *', function(){
console.log('Задача выполняется каждые 5 секунд');
});


Использование параметров при выполнении задач

Вы можете передавать параметры в функцию, которую выполняет задача. Для этого можно использовать замыкания или передавать аргументы через функции.


const schedule = require('node-schedule');

// Пример с параметрами
const job = schedule.scheduleJob('0 0 * * *', function(){
const message = 'Ежедневная задача';
sendNotification(message);
});

function sendNotification(msg) {
console.log(`Уведомление: ${msg}`);
}


#aboutwebdev_js
👍2
node-schedule: Планировщик задач для Node.js (Часть 2)

Обработка ошибок

Для долгосрочных задач важно иметь механизм обработки ошибок, чтобы избежать сбоев. Вы можете использовать try-catch внутри функции, выполняемой по расписанию.


const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/5 * * * *', function(){
try {
// Ваш код
throw new Error("Произошла ошибка!");
} catch (error) {
console.error("Ошибка при выполнении задачи:", error.message);
}
});


Основные методы и API

- scheduleJob(cronPattern, callback) — запланировать задачу с использованием cron-выражения или объекта Date.
- cancel() — отменить задачу, которая ещё не была выполнена.
- reschedule(newCronPattern) — переустановить расписание задачи.
- nextInvocation() — получить дату и время следующего выполнения задачи.

Пример с переустановкой задачи


const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/10 * * * *', function(){
console.log('Задача выполняется каждые 10 минут');
});

// Переустанавливаем задачу для выполнения каждые 15 минут
setTimeout(() => {
job.reschedule('*/15 * * * *');
console.log('Расписание задачи изменено');
}, 30000);


В итоге

node-schedule — это мощный инструмент для планирования и выполнения задач в Node.js. Он удобен, гибок и поддерживает различные способы задания времени для выполнения задач (cron, объекты Date и интервалы). Библиотека полезна для создания приложений, которые требуют регулярных или отсроченных операций, таких как отправка уведомлений, очистка базы данных или выполнение любых других повторяющихся задач.

#aboutwebdev_js
👍3
Обновления IT Meetups Bot: подписка на города, новые города и удобная навигация!

Рад поделиться свежими новостями о новых функциях и изменениях в боте-агрегаторе IT Meetups Bot. Вот что теперь доступно:

1) Подписка на город

Теперь вы можете подписаться на уведомления о мероприятиях в выбранном городе. Даже если в вашем городе пока нет событий, вы получите уведомление, как только они появятся! В уведомлении будет краткое описание и ссылка для подробной информации.
Управлять подписками легко: можно отписаться как от одного города, так и сразу от всех.

2) Добавлены новые города

Список городов пополняется! Теперь бот поддерживает:
Казань, Уфу, Омск, Томск, Нижний Новгород, Ростов-на-Дону, Калининград, Краснодар, Сочи, Ижевск и Иннополис.

3) Пагинация для городов

Список городов растёт, поэтому сделал удобную навигацию. Теперь вы сможете возвращаться на ту же страницу, с которой выбрали город, вместо того, чтобы листать всё заново.

4) Улучшенная сортировка мероприятий

Обновил сортировку в разделе «Все мероприятия»: теперь всё по порядку: по дате и времени.

Что дальше?

Чат идей вдохновляет! Уже внедрил некоторые предложения (например, подписку на города). Работа над новым функционалом продолжается.

Если заметите баг или у вас есть идея, обязательно напишите в чат!

Подключайте бота и следите за IT-мероприятиями вашего города. Спасибо, что пользуетесь!

#aboutwebdev_itmeetupsbot #aboutwebdev_личныйпроект #aboutwebdev_боты
👍2🔥1
Сотрудничество

Недавно мой бот-агрегатор стал информационным партнером мероприятия «Профессиональная межрегиональная IT-конференция "Merge"»!

Это мое первое сотрудничество с IT-мероприятиями!

Есть еще приятный бонус для пользователей моего бота и канала: по промокоду ITMEETUPSBOT можно получить 10% скидки при покупке билета!

Скоро будут еще новости!

А пока побежал пилить фичи для бота!

Всем прекрасных выходных!

#aboutwebdev_itmeetupsbot #aboutwebdev_сотрудничество
👍4🔥2
Новости с полей сотрудничества

Прилетели новости с полей сотрудничества с мероприятиями!

Мой бот-агрегатор стал информационным партнером мероприятия «Summer Merge»!

Уже по традиции есть приятный бонус для пользователей моего бота и канала: по промокоду ITMEETUPSBOT можно получить 10% скидки при покупке билета!

Подключайте бота и по подписке на город получайте уведомления о новых мероприятиях!

Скоро выложу кое-что интересное!

Всем прекрасного начала недели!

#aboutwebdev_itmeetupsbot #aboutwebdev_сотрудничество
Обновление IT Meetups Bot (30.01.25)

В течение часа выйдет новое обновление для IT Meetups Bot — бота-агрегатора IT-мероприятий. Поделюсь подробностями о новых функциях и изменениях.

Что нового?

1) Оценка бота

Добавлен раздел "Оценить бота", где вы можете поставить свою оценку! В любой момент вы можете изменить свою оценку.
Ваше мнение важно для меня!

2) Список "Онлайн мероприятия"

Теперь есть отдельный список для онлайн-мероприятий: вебинары, трансляции и воркшопы. На этот раздел можно подписаться, чтобы получать уведомления о новых анонсах!

3) Изменения в форме анонса

Обязательные поля теперь отмечены звездочками. Также при выборе формата мероприятия будут появляться соответствующие поля. Например, если выбрать формат "Офлайн" или "Офлайн с онлайн-трансляцией", отобразятся поля для выбора города и ввода адреса.
Поле "Ссылка на регистрацию" теперь необязательное, так как для некоторых форматов, например, для завтраков, регистрация не требуется. Если ссылки нет, кнопка "Регистрация" в боте не будет отображаться.

4) Для админа

Для администраторов теперь предусмотрено автоудаление прошедших мероприятий из общего списка. Каждый день в 00:01 будет запускаться процесс, который будет автоматически удалять устаревшие события. Это позволит поддерживать актуальность списка мероприятий.
Также добавлен раздел "Заявки", где отображаются все заявки на анонсы мероприятий.

5) Пасхалка!

В бота добавлена пасхалка, которая намекает на одно из будущих нововведений! Если найдете её, напишите об этом в комментариях под постом!

Что дальше?

Вот некоторые из моих планов на развитие бота:
Для администраторов будет добавлена функция уведомлений о новых заявках, что позволит быстрее с ними ознакомиться и одобрить.

В планах добавить:
- предпросмотр анонса, чтобы увидеть, как он будет выглядеть в списке и в полном формате;
- возможность написать отзыв о боте в разделе "Оценить бота";
- возможность создавать анонсы регулярных мероприятий.

И, конечно, будут другие нововведения, о которых вы узнаете в следующих обновлениях!

#aboutwebdev_itmeetupsbot #aboutwebdev_личныйпроект #aboutwebdev_боты
🔥4