apps/bot: beautify messages

This commit is contained in:
vchikalkin 2025-06-26 18:57:38 +03:00
parent 7f3b38fa48
commit 1e3ef51eb0
2 changed files with 65 additions and 35 deletions

View File

@ -1,7 +1,21 @@
/* eslint-disable canonical/id-match */
/* eslint-disable consistent-return */
import { env as environment } from './config/env';
import { commandsList, KEYBOARD_REMOVE, KEYBOARD_SHARE_PHONE, MESSAGE_NOT_MASTER } from './message';
import {
commandsList,
KEYBOARD_REMOVE,
KEYBOARD_SHARE_PHONE,
MESSAGE_NOT_MASTER,
MSG_ALREADY_MASTER,
MSG_BECOME_MASTER,
MSG_CONTACT_ADDED,
MSG_ERROR,
MSG_NEED_PHONE,
MSG_PHONE_SAVED,
MSG_SEND_CLIENT_CONTACT,
MSG_WELCOME,
MSG_WELCOME_BACK,
} from './message';
import { normalizePhoneNumber } from './utils/phone';
import { CustomersService } from '@repo/graphql/api/customers';
import { Enum_Customer_Role } from '@repo/graphql/types';
@ -17,17 +31,13 @@ bot.start(async (context) => {
const { customer } = await customerService.getCustomer({ telegramId });
if (customer) {
return context.reply(
`Приветствуем снова, ${customer.name} 👋.
Чтобы воспользоваться сервисом, откройте приложение.` + commandsList,
KEYBOARD_REMOVE,
);
return context.reply(MSG_WELCOME_BACK(customer.name) + commandsList, {
...KEYBOARD_REMOVE,
parse_mode: 'HTML',
});
}
return context.reply(
'Добро пожаловать! Пожалуйста, поделитесь своим номером телефона.',
KEYBOARD_SHARE_PHONE,
);
return context.reply(MSG_WELCOME, { ...KEYBOARD_SHARE_PHONE, parse_mode: 'HTML' });
});
bot.command('addcontact', async (context) => {
@ -37,17 +47,14 @@ bot.command('addcontact', async (context) => {
const { customer } = await customerService.getCustomer({ telegramId });
if (!customer) {
return context.reply(
'Чтобы добавить контакт, сначала поделитесь своим номером телефона.',
KEYBOARD_SHARE_PHONE,
);
return context.reply(MSG_NEED_PHONE, { ...KEYBOARD_SHARE_PHONE, parse_mode: 'HTML' });
}
if (customer.role !== Enum_Customer_Role.Master) {
return context.reply(MESSAGE_NOT_MASTER);
return context.reply(MESSAGE_NOT_MASTER, { parse_mode: 'HTML' });
}
return context.reply('Отправьте контакт клиента, которого вы хотите добавить');
return context.reply(MSG_SEND_CLIENT_CONTACT, { parse_mode: 'HTML' });
});
bot.command('becomemaster', async (context) => {
@ -57,11 +64,11 @@ bot.command('becomemaster', async (context) => {
const { customer } = await customerService.getCustomer({ telegramId });
if (!customer) {
return context.reply('Сначала поделитесь своим номером телефона.', KEYBOARD_SHARE_PHONE);
return context.reply(MSG_NEED_PHONE, { ...KEYBOARD_SHARE_PHONE, parse_mode: 'HTML' });
}
if (customer.role === Enum_Customer_Role.Master) {
return context.reply('Вы уже являетесь мастером.');
return context.reply(MSG_ALREADY_MASTER, { parse_mode: 'HTML' });
}
const response = await customerService
@ -71,11 +78,11 @@ bot.command('becomemaster', async (context) => {
},
})
.catch((error) => {
context.reply('Произошла ошибка.\n' + error);
context.reply(MSG_ERROR(error), { parse_mode: 'HTML' });
});
if (response) {
return context.reply('Вы стали мастером');
return context.reply(MSG_BECOME_MASTER, { parse_mode: 'HTML' });
}
});
@ -99,19 +106,18 @@ bot.on(message('contact'), async (context) => {
telegramId: context.from.id,
})
.catch((error) => {
context.reply('Произошла ошибка.\n' + error);
context.reply(MSG_ERROR(error), { parse_mode: 'HTML' });
});
if (response) {
return context.reply(
`Спасибо! Мы сохранили ваш номер телефона. Теперь можете открыть приложение или воспользоваться командами бота.` +
commandsList,
KEYBOARD_REMOVE,
);
return context.reply(MSG_PHONE_SAVED + commandsList, {
...KEYBOARD_REMOVE,
parse_mode: 'HTML',
});
}
} else {
if (customer.role !== Enum_Customer_Role.Master) {
return context.reply(MESSAGE_NOT_MASTER);
return context.reply(MESSAGE_NOT_MASTER, { parse_mode: 'HTML' });
}
try {
@ -130,11 +136,9 @@ bot.on(message('contact'), async (context) => {
documentId,
});
return context.reply(
`Добавили контакт ${name}. Пригласите пользователя в приложение и тогда вы сможете добавлять записи с этим контактом.`,
);
return context.reply(MSG_CONTACT_ADDED(name), { parse_mode: 'HTML' });
} catch (error) {
context.reply('Произошла ошибка.\n' + error);
context.reply(MSG_ERROR(error), { parse_mode: 'HTML' });
}
}
});

View File

@ -1,8 +1,9 @@
import { type ReplyKeyboardRemove } from 'telegraf/types';
export const commandsList = `
\оступные команды:
/addcontact - Добавить контакт клиента
\n<b>📋 Доступные команды:</b>
<b>/addcontact</b> добавить контакт клиента
<b>/becomemaster</b> стать мастером
`;
export const KEYBOARD_SHARE_PHONE = {
@ -11,7 +12,7 @@ export const KEYBOARD_SHARE_PHONE = {
[
{
request_contact: true,
text: 'Отправить номер телефона',
text: '📱 Отправить номер телефона',
},
],
],
@ -26,4 +27,29 @@ export const KEYBOARD_REMOVE = {
};
export const MESSAGE_NOT_MASTER =
'Только мастер может добавлять контакты. \nСтать мастером можно на странице профиля в приложении или при помощи команды /becomemaster';
'⛔️ <b>Только мастер может добавлять контакты.</b>\nСтать мастером можно на странице профиля в приложении или с помощью команды <b>/becomemaster</b>.';
export const MSG_WELCOME =
'👋 <b>Добро пожаловать!</b>\nПожалуйста, поделитесь своим номером телефона для регистрации.';
export const MSG_WELCOME_BACK = (name: string) =>
`👋 <b>С возвращением, ${name}!</b>\nЧтобы воспользоваться сервисом, откройте приложение.\n`;
export const MSG_NEED_PHONE =
'📱 <b>Чтобы добавить контакт, сначала поделитесь своим номером телефона.</b>';
export const MSG_SEND_CLIENT_CONTACT =
'👤 <b>Отправьте контакт клиента, которого вы хотите добавить.</b>';
export const MSG_ALREADY_MASTER = '🎉 <b>Вы уже являетесь мастером!</b>';
export const MSG_BECOME_MASTER = '🥳 <b>Поздравляем! Теперь вы мастер.</b>';
export const MSG_ERROR = (error?: unknown) =>
`❌ <b>Произошла ошибка.</b>\n${error ? String(error) : ''}`;
export const MSG_PHONE_SAVED =
'✅ <b>Спасибо! Мы сохранили ваш номер телефона.</b>\nТеперь вы можете открыть приложение или воспользоваться командами бота.';
export const MSG_CONTACT_ADDED = (name: string) =>
`✅ <b>Добавили контакт:</b> <b>${name}</b>\ригласите пользователя в приложение, чтобы вы могли добавлять записи с этим контактом.`;