nitro-react/src/views/notification-center/NotificationCenterMessageHandler.tsx

227 lines
9.3 KiB
TypeScript
Raw Normal View History

2021-09-18 10:31:08 +02:00
import { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, HabboBroadcastMessageEvent, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, MaintenanceStatusMessageEvent, ModeratorCautionEvent, ModeratorMessageEvent, MOTDNotificationEvent, NotificationDialogMessageEvent, PetLevelNotificationEvent, PetReceivedMessageEvent, RespectReceivedEvent, RoomEnterEvent, UserBannedMessageEvent, Vector3d } from '@nitrots/nitro-renderer';
2021-06-22 18:40:28 +02:00
import { FC, useCallback } from 'react';
2021-09-18 10:31:08 +02:00
import { GetConfiguration, GetRoomEngine, GetSessionDataManager, LocalizeBadgeName, LocalizeText } from '../../api';
2021-06-22 18:40:28 +02:00
import { CreateMessageHook } from '../../hooks/messages';
2021-09-18 10:31:08 +02:00
import { NotificationBubbleType } from './common/NotificationBubbleType';
2021-08-22 07:00:05 +02:00
import { NotificationUtilities } from './common/NotificationUtilities';
2021-09-18 10:31:08 +02:00
import { ProductImageUtility } from './common/ProductImageUtility';
2021-06-22 18:40:28 +02:00
import { INotificationCenterMessageHandlerProps } from './NotificationCenterMessageHandler.types';
export const NotificationCenterMessageHandler: FC<INotificationCenterMessageHandlerProps> = props =>
{
2021-08-26 08:38:16 +02:00
const onRespectReceivedEvent = useCallback((event: RespectReceivedEvent) =>
{
const parser = event.getParser();
if(parser.userId !== GetSessionDataManager().userId) return;
const text1 = LocalizeText('notifications.text.respect.1');
const text2 = LocalizeText('notifications.text.respect.2', [ 'count' ], [ parser.respectsReceived.toString() ]);
2021-09-18 10:31:08 +02:00
NotificationUtilities.showSingleBubble(text1, NotificationBubbleType.RESPECT);
NotificationUtilities.showSingleBubble(text2, NotificationBubbleType.RESPECT);
2021-08-26 08:38:16 +02:00
}, []);
CreateMessageHook(RespectReceivedEvent, onRespectReceivedEvent);
2021-06-22 18:40:28 +02:00
const onHabboBroadcastMessageEvent = useCallback((event: HabboBroadcastMessageEvent) =>
{
const parser = event.getParser();
2021-09-18 10:31:08 +02:00
NotificationUtilities.simpleAlert(parser.message.replace(/\\r/g, '\r'), null, null, LocalizeText('notifications.broadcast.title'));
2021-07-08 07:46:59 +02:00
}, []);
2021-06-22 18:40:28 +02:00
2021-08-26 08:38:16 +02:00
CreateMessageHook(HabboBroadcastMessageEvent, onHabboBroadcastMessageEvent);
const onAchievementNotificationMessageEvent = useCallback((event: AchievementNotificationMessageEvent) =>
{
const parser = event.getParser();
const text1 = LocalizeText('achievements.levelup.desc');
const badgeName = LocalizeBadgeName(parser.data.badgeCode);
const badgeImage = GetSessionDataManager().getBadgeUrl(parser.data.badgeCode);
const internalLink = 'questengine/achievements/' + parser.data.category;
2021-09-18 10:31:08 +02:00
NotificationUtilities.showSingleBubble((text1 + ' ' + badgeName), NotificationBubbleType.ACHIEVEMENT, badgeImage, internalLink);
2021-08-26 08:38:16 +02:00
}, []);
CreateMessageHook(AchievementNotificationMessageEvent, onAchievementNotificationMessageEvent);
const onClubGiftNotificationEvent = useCallback((event: ClubGiftNotificationEvent) =>
{
const parser = event.getParser();
NotificationUtilities.showClubGiftNotification(parser.numGifts);
}, []);
CreateMessageHook(ClubGiftNotificationEvent, onClubGiftNotificationEvent);
2021-07-08 07:46:59 +02:00
const onModeratorMessageEvent = useCallback((event: ModeratorMessageEvent) =>
2021-06-22 18:40:28 +02:00
{
const parser = event.getParser();
2021-10-21 02:50:23 +02:00
NotificationUtilities.handleModeratorMessage(parser.message, parser.url);
2021-07-08 07:46:59 +02:00
}, []);
2021-06-22 18:40:28 +02:00
2021-08-26 08:38:16 +02:00
CreateMessageHook(ModeratorMessageEvent, onModeratorMessageEvent);
const onActivityPointNotificationMessageEvent = useCallback((event: ActivityPointNotificationMessageEvent) =>
{
const parser = event.getParser();
2021-09-18 10:31:08 +02:00
if(parser.amountChanged <= 0) return;
let imageUrl: string = null;
switch(parser.type)
{
case 5:
imageUrl = GetConfiguration<string>('currency.asset.icon.url', '').replace('%type%', parser.type.toString());
break;
}
2022-01-07 08:48:21 +01:00
NotificationUtilities.showSingleBubble(LocalizeText('notifications.text.loyalty.received', [ 'AMOUNT' ], [ parser.amountChanged.toString() ]), NotificationBubbleType.INFO, imageUrl);
2021-08-26 08:38:16 +02:00
}, []);
CreateMessageHook(ActivityPointNotificationMessageEvent, onActivityPointNotificationMessageEvent);
2021-09-18 10:31:08 +02:00
const onUserBannedMessageEvent = useCallback((event: UserBannedMessageEvent) =>
{
const parser = event.getParser();
NotificationUtilities.handleUserBannedMessage(parser.message);
}, []);
CreateMessageHook(UserBannedMessageEvent, onUserBannedMessageEvent);
2021-08-26 08:38:16 +02:00
const onHotelClosesAndWillOpenAtEvent = useCallback((event: HotelClosesAndWillOpenAtEvent) =>
{
const parser = event.getParser();
NotificationUtilities.handleHotelClosedMessage(parser.openHour, parser.openMinute, parser.userThrowOutAtClose);
}, []);
CreateMessageHook(HotelClosesAndWillOpenAtEvent, onHotelClosesAndWillOpenAtEvent);
2021-09-18 10:31:08 +02:00
const onPetReceivedMessageEvent = useCallback((event: PetReceivedMessageEvent) =>
2021-08-26 08:38:16 +02:00
{
const parser = event.getParser();
const text = LocalizeText('notifications.text.' + (parser.boughtAsGift ? 'petbought' : 'petreceived'));
let imageUrl: string = null;
const imageResult = GetRoomEngine().getRoomObjectPetImage(parser.pet.typeId, parser.pet.paletteId, parseInt(parser.pet.color, 16), new Vector3d(45 * 3), 64, null, true);
if(imageResult) imageUrl = imageResult.getImage().src;
2021-09-18 10:31:08 +02:00
NotificationUtilities.showSingleBubble(text, NotificationBubbleType.PETLEVEL, imageUrl);
2021-08-26 08:38:16 +02:00
}, []);
2021-09-18 10:31:08 +02:00
CreateMessageHook(PetReceivedMessageEvent, onPetReceivedMessageEvent);
2021-08-26 08:38:16 +02:00
2021-08-28 05:31:22 +02:00
const onRoomEnterEvent = useCallback((event: RoomEnterEvent) =>
{
const parser = event.getParser();
NotificationUtilities.showModerationDisclaimer();
}, []);
CreateMessageHook(RoomEnterEvent, onRoomEnterEvent);
2021-07-08 07:46:59 +02:00
const onMOTDNotificationEvent = useCallback((event: MOTDNotificationEvent) =>
2021-06-22 18:40:28 +02:00
{
const parser = event.getParser();
2021-09-18 10:31:08 +02:00
NotificationUtilities.handleMOTD(parser.messages);
2021-07-08 07:46:59 +02:00
}, []);
2021-06-22 18:40:28 +02:00
2021-08-28 05:31:22 +02:00
CreateMessageHook(MOTDNotificationEvent, onMOTDNotificationEvent);
2021-09-18 10:31:08 +02:00
const onPetLevelNotificationEvent = useCallback((event: PetLevelNotificationEvent) =>
{
const parser = event.getParser();
let imageUrl: string = null;
const imageResult = GetRoomEngine().getRoomObjectPetImage(parser.figureData.typeId, parser.figureData.paletteId, parseInt(parser.figureData.color, 16), new Vector3d(45 * 3), 64, null, true);
if(imageResult) imageUrl = imageResult.getImage().src;
NotificationUtilities.showSingleBubble(LocalizeText('notifications.text.petlevel', [ 'pet_name', 'level' ], [ parser.petName, parser.level.toString() ]), NotificationBubbleType.PETLEVEL, imageUrl);
}, []);
CreateMessageHook(PetLevelNotificationEvent, onPetLevelNotificationEvent);
const onInfoFeedEnableMessageEvent = useCallback((event: InfoFeedEnableMessageEvent) =>
{
const parser = event.getParser();
NotificationUtilities.BUBBLES_DISABLED = !(parser.enabled);
}, []);
CreateMessageHook(InfoFeedEnableMessageEvent, onInfoFeedEnableMessageEvent);
const onClubGiftSelectedEvent = useCallback((event: ClubGiftSelectedEvent) =>
2021-06-22 18:40:28 +02:00
{
const parser = event.getParser();
2021-09-18 10:31:08 +02:00
if(!parser.products || !parser.products.length) return;
2021-06-22 18:40:28 +02:00
2021-09-18 10:31:08 +02:00
const productData = parser.products[0];
if(!productData) return;
NotificationUtilities.showSingleBubble(LocalizeText('notifications.text.club_gift.selected'), NotificationBubbleType.INFO, ProductImageUtility.getProductImageUrl(productData.productType, productData.furniClassId, productData.extraParam))
}, []);
CreateMessageHook(ClubGiftSelectedEvent, onClubGiftSelectedEvent);
const onMaintenanceStatusMessageEvent = useCallback((event: MaintenanceStatusMessageEvent) =>
{
const parser = event.getParser();
NotificationUtilities.handleHotelMaintenanceMessage(parser.minutesUntilMaintenance, parser.duration);
}, []);
CreateMessageHook(MaintenanceStatusMessageEvent, onMaintenanceStatusMessageEvent);
const onModeratorCautionEvent = useCallback((event: ModeratorCautionEvent) =>
{
const parser = event.getParser();
NotificationUtilities.handleModeratorCaution(parser.message, parser.url);
}, []);
CreateMessageHook(ModeratorCautionEvent, onModeratorCautionEvent);
2021-08-28 05:31:22 +02:00
2021-07-08 07:46:59 +02:00
const onNotificationDialogMessageEvent = useCallback((event: NotificationDialogMessageEvent) =>
2021-06-22 18:40:28 +02:00
{
const parser = event.getParser();
2021-08-22 07:00:05 +02:00
NotificationUtilities.showNotification(parser.type, parser.parameters);
}, []);
2021-08-05 19:32:09 +02:00
2021-07-08 07:46:59 +02:00
CreateMessageHook(NotificationDialogMessageEvent, onNotificationDialogMessageEvent);
2021-06-22 18:40:28 +02:00
2021-09-18 10:31:08 +02:00
const onHotelWillCloseInMinutesEvent = useCallback((event: HotelWillCloseInMinutesEvent) =>
{
const parser = event.getParser();
NotificationUtilities.handleHotelClosingMessage(parser.openMinute);
}, []);
CreateMessageHook(HotelWillCloseInMinutesEvent, onHotelWillCloseInMinutesEvent);
const onHotelClosedAndOpensEvent = useCallback((event: HotelClosedAndOpensEvent) =>
{
const parser = event.getParser();
NotificationUtilities.handleLoginFailedHotelClosedMessage(parser.openHour, parser.openMinute);
}, []);
CreateMessageHook(HotelClosedAndOpensEvent, onHotelClosedAndOpensEvent);
2021-06-22 18:40:28 +02:00
return null;
}