asyncio debug and format current code

This commit is contained in:
grey-cat-1908 2022-04-10 10:13:56 +03:00
parent 15da6ac9d2
commit 017ad57190
3 changed files with 34 additions and 27 deletions

View file

@ -4,9 +4,9 @@
import logging import logging
import asyncio import asyncio
import signal import signal
from typing import Dict, List, Union, Any, Iterable
from .models.app.intents import Intents from typing import Dict, List, Union, Any, Iterable, Optional, TYPE_CHECKING
from .models import User, Guild, Activity from .models import User, Guild, Activity
from .models.app import Shard from .models.app import Shard
from .utils import Snowflake, APIModelBase from .utils import Snowflake, APIModelBase
@ -16,6 +16,9 @@ from .core.gateway import GatewayBotInfo
from .models.guild.channel import Channel, ChannelType, channel_types_for_converting from .models.guild.channel import Channel, ChannelType, channel_types_for_converting
from .utils.logging import init_logging from .utils.logging import init_logging
if TYPE_CHECKING:
from .models.app.intents import Intents
_logger = logging.getLogger("melisa") _logger = logging.getLogger("melisa")
@ -29,6 +32,8 @@ class Client:
---------- ----------
token: :class:`str` token: :class:`str`
The token to login (you can found it in the developer portal) The token to login (you can found it in the developer portal)
asyncio_debug: :class:`bool`
If ``True``, then debugging is enabled for the asyncio event loop in use.
intents: :class:`Union[~melisa.Intents, Iterable[~melisa.Intents]]` intents: :class:`Union[~melisa.Intents, Iterable[~melisa.Intents]]`
The Discord Intents values. The Discord Intents values.
activity: :class:`~models.user.presence.BotActivity` activity: :class:`~models.user.presence.BotActivity`
@ -59,8 +64,9 @@ class Client:
self, self,
token: str, token: str,
*, *,
asyncio_debug: bool = False,
intents: Union[Intents, Iterable[Intents]] = None, intents: Union[Intents, Iterable[Intents]] = None,
activity: Activity = None, activity: Optional[Activity] = None,
status: str = None, status: str = None,
mobile: bool = False, mobile: bool = False,
logs: Union[None, int, str, Dict[str, Any]] = "INFO", logs: Union[None, int, str, Dict[str, Any]] = "INFO",
@ -106,6 +112,9 @@ class Client:
print("(SIGINT received some seconds ago) Successfully stopped client loop") print("(SIGINT received some seconds ago) Successfully stopped client loop")
if asyncio_debug:
self._loop.set_debug(True)
signal.signal(signal.SIGINT, sigint_handler) signal.signal(signal.SIGINT, sigint_handler)
async def _get_gateway(self): async def _get_gateway(self):

View file

@ -25,7 +25,8 @@ class WebhookType(IntEnum):
Incoming: Incoming:
Incoming Webhooks can post messages to channels with a generated token Incoming Webhooks can post messages to channels with a generated token
Channel_Follower: Channel_Follower:
Channel Follower Webhooks are internal webhooks used with Channel Following to post new messages into channels Channel Follower Webhooks are internal webhooks used with Channel Following
to post new messages into channels
Application: Application:
Application webhooks are webhooks used with Interactions Application webhooks are webhooks used with Interactions
""" """
@ -64,7 +65,8 @@ class Webhook(APIModelBase):
application_id: :class:`~melisa.utils.types.snowflake.Snowflake` application_id: :class:`~melisa.utils.types.snowflake.Snowflake`
The bot/OAuth2 application that created this webhook The bot/OAuth2 application that created this webhook
source_guild: :class:`~melisa.models.guild.guild.Guild` source_guild: :class:`~melisa.models.guild.guild.Guild`
The guild of the channel that this webhook is following (returned for Channel Follower Webhooks) The guild of the channel that this webhook is following
(returned for Channel Follower Webhooks)
source_channel: :class:`~melisa.models.guild.channel.Channel` source_channel: :class:`~melisa.models.guild.channel.Channel`
The channel that this webhook is following (returned for Channel Follower Webhooks) The channel that this webhook is following (returned for Channel Follower Webhooks)
url: :class:`str` url: :class:`str`
@ -85,19 +87,22 @@ class Webhook(APIModelBase):
url: APINullable[str] = None url: APINullable[str] = None
async def create( async def create(
self, self,
*, *,
channel_id: Optional[Snowflake] = None, channel_id: Optional[Snowflake] = None,
name: Optional[str] = None, name: Optional[str] = None,
reason: Optional[str] = None reason: Optional[str] = None,
): ):
"""|coro| """|coro|
Creates a new webhook and returns a webhook object on success. Requires the ``MANAGE_WEBHOOKS`` permission. Creates a new webhook and returns a webhook object on success.
Requires the ``MANAGE_WEBHOOKS`` permission.
An error will be returned if a webhook name (`name`) is not valid. A webhook name is valid if: An error will be returned if a webhook name (`name`) is not valid.
A webhook name is valid if:
* It does not contain the substring 'clyde' (case-insensitive) * It does not contain the substring 'clyde' (case-insensitive)
* It follows the nickname guidelines in the Usernames and Nicknames documentation, with an exception that * It follows the nickname guidelines in the Usernames
and Nicknames documentation, with an exception that
webhook names can be up to 80 characters webhook names can be up to 80 characters
Parameters Parameters
@ -108,13 +113,9 @@ class Webhook(APIModelBase):
Name of the webhook (1-80 characters) Name of the webhook (1-80 characters)
reason: Optional[:class:`str`] reason: Optional[:class:`str`]
The reason for pinning the message. Shows up on the audit log. The reason for pinning the message. Shows up on the audit log.
Returns
-------
¯\_()_/¯
""" """
await self._http.post( await self._http.post(
f"/channels/{channel_id}/webhooks", f"/channels/{channel_id}/webhooks",
headers={"name": name, "X-Audit-Log-Reason": reason} headers={"name": name, "X-Audit-Log-Reason": reason},
) )

View file

@ -201,9 +201,7 @@ class Message(APIModelBase):
sticker_items: APINullable[List] = None sticker_items: APINullable[List] = None
stickers: APINullable[List] = None stickers: APINullable[List] = None
async def pin( async def pin(self, *, reason: Optional[str] = None):
self, *, reason: Optional[str] = None
):
"""|coro| """|coro|
Pins the message. Pins the message.
@ -218,7 +216,8 @@ class Message(APIModelBase):
Raises Raises
------- -------
HTTPException HTTPException
Pinning the message failed, probably due to the channel having more than 50 pinned messages. Pinning the message failed,
probably due to the channel having more than 50 pinned messages.
ForbiddenError ForbiddenError
You do not have permissions to pin the message. You do not have permissions to pin the message.
NotFound NotFound
@ -230,9 +229,7 @@ class Message(APIModelBase):
headers={"X-Audit-Log-Reason": reason}, headers={"X-Audit-Log-Reason": reason},
) )
async def unpin( async def unpin(self, *, reason: Optional[str] = None):
self, *, reason: Optional[str] = None
):
"""|coro| """|coro|
Unpins the message. Unpins the message.
@ -247,7 +244,8 @@ class Message(APIModelBase):
Raises Raises
------- -------
HTTPException HTTPException
Pinning the message failed, probably due to the channel having more than 50 pinned messages. Pinning the message failed,
probably due to the channel having more than 50 pinned messages.
ForbiddenError ForbiddenError
You do not have permissions to unpin the message. You do not have permissions to unpin the message.
NotFound NotFound
@ -258,4 +256,3 @@ class Message(APIModelBase):
f"channels/{self.channel_id}/pins/{self.id}", f"channels/{self.channel_id}/pins/{self.id}",
headers={"X-Audit-Log-Reason": reason}, headers={"X-Audit-Log-Reason": reason},
) )