Skip to content

Commit

Permalink
✨ 将部分事件细分为频道和私信两种
Browse files Browse the repository at this point in the history
  • Loading branch information
CMHopeSunshine committed Aug 15, 2023
1 parent aaee950 commit a1cbd66
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 66 deletions.
10 changes: 2 additions & 8 deletions nonebot/adapters/discord/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
import contextlib
import json
import sys

# from pathlib import Path
from typing import Any, List, Optional, Tuple
from typing_extensions import override

Expand All @@ -12,7 +10,7 @@
from nonebot.exception import WebSocketClosed
from nonebot.utils import escape_tag

from pydantic import parse_raw_as
from pydantic import parse_obj_as, parse_raw_as

from .api.handle import API_HANDLERS
from .api.model import GatewayBot, User
Expand Down Expand Up @@ -448,14 +446,10 @@ def payload_to_event(cls, payload: Dispatch) -> Event:
"WARNING",
f"Unknown payload type: {payload.type}, detail: {repr(payload)}",
)
# (Path() / f"{payload.type}-{payload.sequence}.json").write_text(
# json.dumps(payload.dict(), indent=4, ensure_ascii=False),
# encoding="utf-8",
# )
event = Event.parse_obj(payload.data)
event.__type__ = payload.type # type: ignore
return event
return EventClass.parse_obj(payload.data)
return parse_obj_as(EventClass, payload.data)

@override
async def _call_api(self, bot: Bot, api: str, **data: Any) -> Any:
Expand Down
43 changes: 0 additions & 43 deletions nonebot/adapters/discord/api/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -2777,49 +2777,6 @@ class InviteDelete(BaseModel):
code: str


# class MessageCreate(BaseModel):
# """Message Create Event Fields
#
# Sent when a message is created. The inner payload is a message object
#
# see https://discord.com/developers/docs/topics/gateway-events#message-create
# """
# id: Snowflake
# channel_id: Snowflake
# author: Missing[User] = UNSET
# content: Missing[str] = UNSET
# timestamp: Missing[str] = UNSET
# edited_timestamp: MissingOrNullable[str] = UNSET
# tts: Missing[bool] = UNSET
# mention_everyone: Missing[bool] = UNSET
# mentions: Missing[List[User]] = UNSET
# mention_roles: Missing[List[str]] = UNSET
# mention_channels: Missing[List[ChannelMention]] = UNSET
# attachments: Missing[List[Attachment]] = UNSET
# embeds: Missing[List[Embed]] = UNSET
# reactions: Missing[List[Reaction]] = UNSET
# nonce: Missing[Union[int, str]] = UNSET
# pinned: Missing[bool] = UNSET
# webhook_id: Missing[Snowflake] = UNSET
# type_: Missing[MessageType] = UNSET
# activity: Missing[MessageActivity] = UNSET
# application: Missing[Application] = UNSET
# application_id: Missing[Snowflake] = UNSET
# message_reference: Missing[MessageReference] = UNSET
# flags: Missing[MessageFlag] = UNSET
# referenced_message: MissingOrNullable["Message"] = UNSET
# interaction: Missing[MessageInteraction] = UNSET
# thread: Missing[Channel] = UNSET
# components: Missing[List[Component]] = UNSET
# sticker_items: Missing[List[StickerItem]] = UNSET
# stickers: Missing[List[Sticker]] = UNSET
# position: Missing[int] = UNSET
# role_subscription_data: Missing[RoleSubscriptionData] = UNSET
# guild_id: Missing[str] = UNSET
# member: Missing[GuildMember] = UNSET
# mentions: List[User]


class MessageCreate(MessageGet):
"""Message Create Event Fields
Expand Down
150 changes: 135 additions & 15 deletions nonebot/adapters/discord/event.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from enum import Enum
from typing import Dict, List, Optional, Type
from typing import Dict, List, Literal, Optional, Type, Union
from typing_extensions import override

from nonebot.adapters import Event as BaseEvent
from nonebot.utils import escape_tag

from pydantic import Field

from .api.model import *
from .api.types import UNSET, Missing
from .message import Message
Expand Down Expand Up @@ -123,12 +125,9 @@ class Event(BaseEvent):

__type__: EventType

def get_type(self) -> str:
return "unknown" # temp

@override
def get_event_name(self) -> str:
return self.__type__
return self.__class__.__name__

@override
def get_event_description(self) -> str:
Expand Down Expand Up @@ -642,6 +641,15 @@ class MessageCreateEvent(MessageEvent, MessageCreate):
__type__ = EventType.MESSAGE_CREATE


class GuildMessageCreateEvent(MessageCreateEvent):
guild_id: Snowflake


class DirectMessageCreateEvent(MessageCreateEvent):
to_me: bool = True
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageUpdateEvent(NoticeEvent, MessageUpdate):
"""Message Update Event
Expand All @@ -651,6 +659,14 @@ class MessageUpdateEvent(NoticeEvent, MessageUpdate):
__type__ = EventType.MESSAGE_UPDATE


class GuildMessageUpdateEvent(MessageUpdateEvent):
guild_id: Snowflake


class DirectMessageUpdateEvent(MessageUpdateEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageDeleteEvent(NoticeEvent, MessageDelete):
"""Message Delete Event
Expand All @@ -660,6 +676,14 @@ class MessageDeleteEvent(NoticeEvent, MessageDelete):
__type__ = EventType.MESSAGE_DELETE


class GuildMessageDeleteEvent(MessageDeleteEvent):
guild_id: Snowflake


class DirectMessageDeleteEvent(MessageDeleteEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageDeleteBulkEvent(NoticeEvent, MessageDeleteBulk):
"""Message Delete Bulk Event
Expand All @@ -669,6 +693,14 @@ class MessageDeleteBulkEvent(NoticeEvent, MessageDeleteBulk):
__type__ = EventType.MESSAGE_DELETE


class GuildMessageDeleteBulkEvent(MessageDeleteBulkEvent):
guild_id: Snowflake


class DirectMessageDeleteBulkEvent(MessageDeleteBulkEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageReactionAddEvent(NoticeEvent, MessageReactionAdd):
"""
Message Reaction Add Event
Expand All @@ -679,6 +711,14 @@ class MessageReactionAddEvent(NoticeEvent, MessageReactionAdd):
__type__ = EventType.MESSAGE_REACTION_ADD


class GuildMessageReactionAddEvent(MessageReactionAddEvent):
guild_id: Snowflake


class DirectMessageReactionAddEvent(MessageReactionAddEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageReactionRemoveEvent(NoticeEvent, MessageReactionRemove):
"""Message Reaction Remove Event
Expand All @@ -688,6 +728,14 @@ class MessageReactionRemoveEvent(NoticeEvent, MessageReactionRemove):
__type__ = EventType.MESSAGE_REACTION_REMOVE


class GuildMessageReactionRemoveEvent(MessageReactionRemoveEvent):
guild_id: Snowflake


class DirectMessageReactionRemoveEvent(MessageReactionRemoveEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageReactionRemoveAllEvent(NoticeEvent, MessageReactionRemoveAll):
"""Message Reaction Remove All Event
Expand All @@ -697,6 +745,14 @@ class MessageReactionRemoveAllEvent(NoticeEvent, MessageReactionRemoveAll):
__type__ = EventType.MESSAGE_REACTION_REMOVE_ALL


class GuildMessageReactionRemoveAllEvent(MessageReactionRemoveAllEvent):
guild_id: Snowflake


class DirectMessageReactionRemoveAllEvent(MessageReactionRemoveAllEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class MessageReactionRemoveEmojiEvent(NoticeEvent, MessageReactionRemoveEmoji):
"""Message Reaction Remove Emoji Event
Expand All @@ -706,6 +762,14 @@ class MessageReactionRemoveEmojiEvent(NoticeEvent, MessageReactionRemoveEmoji):
__type__ = EventType.MESSAGE_REACTION_REMOVE_EMOJI


class GuildMessageReactionRemoveEmojiEvent(MessageReactionRemoveEmojiEvent):
guild_id: Snowflake


class DirectMessageReactionRemoveEmojiEvent(MessageReactionRemoveEmojiEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)


class PresenceUpdateEvent(NoticeEvent, PresenceUpdate):
"""Presence Update Event
Expand Down Expand Up @@ -751,6 +815,16 @@ class TypingStartEvent(NoticeEvent, TypingStart):
__type__ = EventType.TYPING_START


class GuildTypingStartEvent(TypingStartEvent):
guild_id: Snowflake
member: GuildMember


class DirectTypingStartEvent(TypingStartEvent):
guild_id: Literal[UNSET] = Field(UNSET, exclude=True)
member: Literal[UNSET] = Field(UNSET, exclude=True)


class UserUpdateEvent(NoticeEvent, UserUpdate):
"""User Update Event
Expand Down Expand Up @@ -834,26 +908,54 @@ class WebhooksUpdateEvent(NoticeEvent, WebhooksUpdate):
EventType.GUILD_SCHEDULED_EVENT_USER_ADD.value: GuildScheduledEventUserAddEvent,
EventType.GUILD_SCHEDULED_EVENT_USER_REMOVE.value: (
GuildScheduledEventUserRemoveEvent
), # noqa: E501
),
EventType.INTEGRATION_CREATE.value: IntegrationCreateEvent,
EventType.INTEGRATION_UPDATE.value: IntegrationUpdateEvent,
EventType.INTEGRATION_DELETE.value: IntegrationDeleteEvent,
EventType.INTERACTION_CREATE.value: InteractionCreateEvent,
EventType.INVITE_CREATE.value: InviteCreateEvent,
EventType.INVITE_DELETE.value: InviteDeleteEvent,
EventType.MESSAGE_CREATE.value: MessageCreateEvent,
EventType.MESSAGE_UPDATE.value: MessageUpdateEvent,
EventType.MESSAGE_DELETE.value: MessageDeleteEvent,
EventType.MESSAGE_DELETE_BULK.value: MessageDeleteBulkEvent,
EventType.MESSAGE_REACTION_ADD.value: MessageReactionAddEvent,
EventType.MESSAGE_REACTION_REMOVE: MessageReactionRemoveEvent,
EventType.MESSAGE_REACTION_REMOVE_ALL: MessageReactionRemoveAllEvent,
EventType.MESSAGE_REACTION_REMOVE_EMOJI: MessageReactionRemoveEmojiEvent,
EventType.MESSAGE_CREATE.value: Union[
GuildMessageCreateEvent, DirectMessageCreateEvent, MessageCreateEvent
],
EventType.MESSAGE_UPDATE.value: Union[
GuildMessageUpdateEvent, DirectMessageUpdateEvent, MessageUpdateEvent
],
EventType.MESSAGE_DELETE.value: Union[
GuildMessageDeleteEvent, DirectMessageDeleteEvent, MessageDeleteEvent
],
EventType.MESSAGE_DELETE_BULK.value: Union[
GuildMessageDeleteBulkEvent,
DirectMessageDeleteBulkEvent,
MessageDeleteBulkEvent,
],
EventType.MESSAGE_REACTION_ADD.value: Union[
GuildMessageReactionAddEvent,
DirectMessageReactionAddEvent,
MessageReactionAddEvent,
],
EventType.MESSAGE_REACTION_REMOVE: Union[
GuildMessageReactionRemoveEvent,
DirectMessageReactionRemoveEvent,
MessageReactionRemoveEvent,
],
EventType.MESSAGE_REACTION_REMOVE_ALL: Union[
GuildMessageReactionRemoveAllEvent,
DirectMessageReactionRemoveAllEvent,
MessageReactionRemoveAllEvent,
],
EventType.MESSAGE_REACTION_REMOVE_EMOJI: Union[
GuildMessageReactionRemoveEmojiEvent,
DirectMessageReactionRemoveEmojiEvent,
MessageReactionRemoveEmojiEvent,
],
EventType.PRESENCE_UPDATE.value: PresenceUpdateEvent,
EventType.STAGE_INSTANCE_CREATE.value: StageInstanceCreateEvent,
EventType.STAGE_INSTANCE_UPDATE.value: StageInstanceUpdateEvent,
EventType.STAGE_INSTANCE_DELETE.value: StageInstanceDeleteEvent,
EventType.TYPING_START.value: TypingStartEvent,
EventType.TYPING_START.value: Union[
GuildTypingStartEvent, DirectTypingStartEvent, TypingStartEvent
],
EventType.USER_UPDATE.value: UserUpdateEvent,
EventType.VOICE_STATE_UPDATE.value: VoiceStateUpdateEvent,
EventType.VOICE_SERVER_UPDATE.value: VoiceServerUpdateEvent,
Expand Down Expand Up @@ -920,18 +1022,36 @@ class WebhooksUpdateEvent(NoticeEvent, WebhooksUpdate):
"InviteCreateEvent",
"InviteDeleteEvent",
"MessageCreateEvent",
"GuildMessageCreateEvent",
"DirectMessageCreateEvent",
"MessageUpdateEvent",
"GuildMessageUpdateEvent",
"DirectMessageUpdateEvent",
"MessageDeleteEvent",
"GuildMessageDeleteEvent",
"DirectMessageDeleteEvent",
"MessageDeleteBulkEvent",
"GuildMessageDeleteBulkEvent",
"DirectMessageDeleteBulkEvent",
"MessageReactionAddEvent",
"GuildMessageReactionAddEvent",
"DirectMessageReactionAddEvent",
"MessageReactionRemoveEvent",
"GuildMessageReactionRemoveEvent",
"DirectMessageReactionRemoveEvent",
"MessageReactionRemoveAllEvent",
"GuildMessageReactionRemoveAllEvent",
"DirectMessageReactionRemoveAllEvent",
"MessageReactionRemoveEmojiEvent",
"GuildMessageReactionRemoveEmojiEvent",
"DirectMessageReactionRemoveEmojiEvent",
"PresenceUpdateEvent",
"StageInstanceCreateEvent",
"StageInstanceUpdateEvent",
"StageInstanceDeleteEvent",
"TypingStartEvent",
"GuildTypingStartEvent",
"DirectTypingStartEvent",
"UserUpdateEvent",
"VoiceStateUpdateEvent",
"VoiceServerUpdateEvent",
Expand Down

0 comments on commit a1cbd66

Please sign in to comment.