Skip to content
This repository has been archived by the owner on May 5, 2024. It is now read-only.

Commit

Permalink
Message update and message delete event + remove name argument (name …
Browse files Browse the repository at this point in the history
…= func.__name__ now)
  • Loading branch information
pixeldeee committed Jul 31, 2023
1 parent 7e0fb8b commit e43769a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 10 deletions.
2 changes: 1 addition & 1 deletion pytecord/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from pytecord.client import Client
from pytecord.guild import Guild, GuildChannel, Message
from pytecord.guild import Guild, GuildChannel, Message, MessageDeleteEvent
26 changes: 17 additions & 9 deletions pytecord/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,49 @@

from typing import TYPE_CHECKING, Literal, Callable, Coroutine, Any

from pytecord.guild import Message
from pytecord.guild import Message, Guild, GuildChannel, MessageDeleteEvent
from pytecord.enums import GatewayIntents

if TYPE_CHECKING:
from pytecord.web import GatewayOutput
from pytecord.guild import Guild, GuildChannel

class Client:
def __init__(self, token: str, debug: bool = False) -> None:
self.webhook = BaseWebhook(token, debug)
self.token = token
self.__intents = 0
self.__intents = GatewayIntents.GUILD_INTEGRATIONS

def listen(self, name: Literal['ready', 'message_create']):
def listen(self):
def decorator(func_to_decorate: Callable[..., Coroutine[Any, Any, Any]]):
match name:
event_name = func_to_decorate.__name__
match event_name:
case 'ready':
async def func(data: 'GatewayOutput'):
await func_to_decorate()
case 'message_create':
case 'message_create' | 'message_update':
self.__intents += GatewayIntents.GUILD_MESSAGES
self.__intents += GatewayIntents.MESSAGE_CONTENT
self.__intents += GatewayIntents.DIRECT_MESSAGES
async def func(data: 'GatewayOutput'):
message = Message(data.d, self.token)
await func_to_decorate(message)
case 'message_delete':
self.__intents += GatewayIntents.GUILD_MESSAGES
self.__intents += GatewayIntents.DIRECT_MESSAGES
async def func(data: 'GatewayOutput'):
event = MessageDeleteEvent(data.d, self.token)
await func_to_decorate(event)
case _:
raise ValueError('Invalid event name: %s' % event_name)

self.webhook.add_event(name.upper(), func)
self.webhook.add_event(event_name.upper(), func)

return decorator

def get_guild(self, id: int) -> 'Guild':
def get_guild(self, id: int) -> Guild:
return self.webhook.get_guild(id)

def get_channel(self, id: int) -> 'GuildChannel':
def get_channel(self, id: int) -> GuildChannel:
return self.webhook.get_channel(id)

def run(self):
Expand Down
26 changes: 26 additions & 0 deletions pytecord/guild.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,11 @@ def __init__(self, data: dict[str, Any], token: str) -> None:
self.position = data.get('position')
self.role_subscription_data = data.get('role_subscription_data')

# Extra fields for message create
self.guild_id = int(x) if (x := data.get('guild_id')) else None
self.member = data.get('member')
self.mentions = data.get('mentions')

self.__channel_id = data.get('channel_id')
self.__token = token
self.__data = data
Expand Down Expand Up @@ -240,3 +245,24 @@ def eval(self) -> dict[str, Any]:
```
"""
return self.__data

class MessageDeleteEvent:
def __init__(self, data: dict[str, Any], token: str) -> None:
self.id = int(data.get('id'))

self.__channel_id = int(data.get('channel_id'))
self.__guild_id = int(x) if (x := data.get('guild_id')) else None
self.__token = token

@property
def channel(self) -> GuildChannel:
data = rget('channel', self.__channel_id, self.__token).json()
return GuildChannel(data, self.__token)

@property
def guild(self) -> Guild:
data = rget('guild', self.__guild_id, self.__token).json()
return Guild(data, self.__token)

def __int__(self) -> int:
return self.id

0 comments on commit e43769a

Please sign in to comment.