NapCatQQ/napcat.webui/src/components/onebot/display_card/notice.tsx
2025-01-24 21:13:44 +08:00

293 lines
7.2 KiB
TypeScript

import { Chip } from '@heroui/chip'
import { getNoticeTypeName } from '@/utils/onebot'
import {
OB11Notice,
OB11NoticeType,
OneBot11FriendAdd,
OneBot11FriendRecall,
OneBot11GroupAdmin,
OneBot11GroupBan,
OneBot11GroupCard,
OneBot11GroupDecrease,
OneBot11GroupEssence,
OneBot11GroupIncrease,
OneBot11GroupMessageReaction,
OneBot11GroupRecall,
OneBot11GroupUpload,
OneBot11Honor,
OneBot11LuckyKing,
OneBot11Poke
} from '@/types/onebot'
export interface OneBotNoticeProps {
data: OB11Notice
}
export interface NoticeProps<T> {
data: T
}
const GroupUploadNotice: React.FC<NoticeProps<OneBot11GroupUpload>> = ({
data
}) => {
const { group_id, user_id, file } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>: {file.name}</div>
<div>: {file.size} </div>
</>
)
}
const GroupAdminNotice: React.FC<NoticeProps<OneBot11GroupAdmin>> = ({
data
}) => {
const { group_id, user_id, sub_type } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>: {sub_type === 'set' ? '设置管理员' : '取消管理员'}</div>
</>
)
}
const GroupDecreaseNotice: React.FC<NoticeProps<OneBot11GroupDecrease>> = ({
data
}) => {
const { group_id, operator_id, user_id, sub_type } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {operator_id}</div>
<div>ID: {user_id}</div>
<div>: {sub_type}</div>
</>
)
}
const GroupIncreaseNotice: React.FC<NoticeProps<OneBot11GroupIncrease>> = ({
data
}) => {
const { group_id, operator_id, user_id, sub_type } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {operator_id}</div>
<div>ID: {user_id}</div>
<div>: {sub_type}</div>
</>
)
}
const GroupBanNotice: React.FC<NoticeProps<OneBot11GroupBan>> = ({ data }) => {
const { group_id, operator_id, user_id, sub_type, duration } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {operator_id}</div>
<div>ID: {user_id}</div>
<div>: {sub_type}</div>
<div>: {duration} </div>
</>
)
}
const FriendAddNotice: React.FC<NoticeProps<OneBot11FriendAdd>> = ({
data
}) => {
const { user_id } = data
return (
<>
<div>ID: {user_id}</div>
</>
)
}
const GroupRecallNotice: React.FC<NoticeProps<OneBot11GroupRecall>> = ({
data
}) => {
const { group_id, user_id, operator_id, message_id } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>ID: {operator_id}</div>
<div>ID: {message_id}</div>
</>
)
}
const FriendRecallNotice: React.FC<NoticeProps<OneBot11FriendRecall>> = ({
data
}) => {
const { user_id, message_id } = data
return (
<>
<div>ID: {user_id}</div>
<div>ID: {message_id}</div>
</>
)
}
const PokeNotice: React.FC<NoticeProps<OneBot11Poke>> = ({ data }) => {
const { group_id, user_id, target_id } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>ID: {target_id}</div>
</>
)
}
const LuckyKingNotice: React.FC<NoticeProps<OneBot11LuckyKing>> = ({
data
}) => {
const { group_id, user_id, target_id } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>ID: {target_id}</div>
</>
)
}
const HonorNotice: React.FC<NoticeProps<OneBot11Honor>> = ({ data }) => {
const { group_id, user_id, honor_type } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>: {honor_type}</div>
</>
)
}
const GroupMessageReactionNotice: React.FC<
NoticeProps<OneBot11GroupMessageReaction>
> = ({ data }) => {
const { group_id, user_id, message_id, likes } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>ID: {message_id}</div>
<div>
:
{likes
.map((like) => `表情ID: ${like.emoji_id}, 数量: ${like.count}`)
.join(', ')}
</div>
</>
)
}
const GroupEssenceNotice: React.FC<NoticeProps<OneBot11GroupEssence>> = ({
data
}) => {
const { group_id, message_id, sender_id, operator_id, sub_type } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {message_id}</div>
<div>ID: {sender_id}</div>
<div>ID: {operator_id}</div>
<div>: {sub_type}</div>
</>
)
}
const GroupCardNotice: React.FC<NoticeProps<OneBot11GroupCard>> = ({
data
}) => {
const { group_id, user_id, card_new, card_old } = data
return (
<>
<div>: {group_id}</div>
<div>ID: {user_id}</div>
<div>: {card_new}</div>
<div>: {card_old}</div>
</>
)
}
const OneBotNotice: React.FC<OneBotNoticeProps> = ({ data }) => {
let NoticeComponent: React.ReactNode
switch (data.notice_type) {
case OB11NoticeType.GroupUpload:
NoticeComponent = <GroupUploadNotice data={data} />
break
case OB11NoticeType.GroupAdmin:
NoticeComponent = <GroupAdminNotice data={data} />
break
case OB11NoticeType.GroupDecrease:
NoticeComponent = <GroupDecreaseNotice data={data} />
break
case OB11NoticeType.GroupIncrease:
NoticeComponent = (
<GroupIncreaseNotice data={data as OneBot11GroupIncrease} />
)
break
case OB11NoticeType.GroupBan:
NoticeComponent = <GroupBanNotice data={data} />
break
case OB11NoticeType.FriendAdd:
NoticeComponent = <FriendAddNotice data={data as OneBot11FriendAdd} />
break
case OB11NoticeType.GroupRecall:
NoticeComponent = <GroupRecallNotice data={data as OneBot11GroupRecall} />
break
case OB11NoticeType.FriendRecall:
NoticeComponent = (
<FriendRecallNotice data={data as OneBot11FriendRecall} />
)
break
case OB11NoticeType.Notify:
switch (data.sub_type) {
case 'poke':
NoticeComponent = <PokeNotice data={data as OneBot11Poke} />
break
case 'lucky_king':
NoticeComponent = <LuckyKingNotice data={data as OneBot11LuckyKing} />
break
case 'honor':
NoticeComponent = <HonorNotice data={data as OneBot11Honor} />
break
}
break
case OB11NoticeType.GroupMsgEmojiLike:
NoticeComponent = (
<GroupMessageReactionNotice
data={data as OneBot11GroupMessageReaction}
/>
)
break
case OB11NoticeType.GroupEssence:
NoticeComponent = (
<GroupEssenceNotice data={data as OneBot11GroupEssence} />
)
break
case OB11NoticeType.GroupCard:
NoticeComponent = <GroupCardNotice data={data as OneBot11GroupCard} />
break
}
return (
<div className="flex gap-2 items-center">
<Chip color="warning" variant="flat">
</Chip>
<Chip>{getNoticeTypeName(data.notice_type)}</Chip>
{NoticeComponent}
</div>
)
}
export default OneBotNotice