Skip to content

Commit 162cce6

Browse files
authored
Merge branch 'Pycord-Development:master' into master
2 parents dbf409c + 9496c72 commit 162cce6

File tree

5 files changed

+145
-18
lines changed

5 files changed

+145
-18
lines changed

discord/bot.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -569,18 +569,16 @@ async def on_application_command_error(
569569
570570
This only fires if you do not specify any listeners for command error.
571571
"""
572-
# TODO
573-
# if self.extra_events.get('on_application_command_error', None):
574-
# return
572+
if self.extra_events.get('on_application_command_error', None):
573+
return
575574

576575
command = context.command
577576
if command and command.has_error_handler():
578577
return
579578

580-
# TODO
581-
# cog = context.cog
582-
# if cog and cog.has_error_handler():
583-
# return
579+
cog = context.cog
580+
if cog and cog.has_error_handler():
581+
return
584582

585583
print(f"Ignoring exception in command {context.command}:", file=sys.stderr)
586584
traceback.print_exception(

discord/commands/context.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2323
DEALINGS IN THE SOFTWARE.
2424
"""
25+
from __future__ import annotations
2526

2627
from typing import TYPE_CHECKING, Optional, Union
2728

@@ -31,6 +32,9 @@
3132
import discord
3233
from discord.state import ConnectionState
3334

35+
from .commands import ApplicationCommand
36+
from ..cog import Cog
37+
3438
from ..guild import Guild
3539
from ..interactions import Interaction, InteractionResponse
3640
from ..member import Member
@@ -63,7 +67,7 @@ class ApplicationContext(discord.abc.Messageable):
6367
def __init__(self, bot: "discord.Bot", interaction: Interaction):
6468
self.bot = bot
6569
self.interaction = interaction
66-
self.command = None
70+
self.command: ApplicationCommand = None # type: ignore
6771
self._state: ConnectionState = self.interaction._state
6872

6973
async def _get_channel(self) -> discord.abc.Messageable:
@@ -130,3 +134,11 @@ async def delete(self):
130134
@property
131135
def edit(self):
132136
return self.interaction.edit_original_message
137+
138+
@property
139+
def cog(self) -> Optional[Cog]:
140+
"""Optional[:class:`.Cog`]: Returns the cog associated with this context's command. None if it does not exist."""
141+
if self.command is None:
142+
return None
143+
144+
return self.command.cog

discord/flags.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,24 @@ class ApplicationFlags(BaseFlags):
10901090
rather than using this raw value.
10911091
"""
10921092

1093+
@flag_value
1094+
def managed_emoji(self):
1095+
""":class:`bool`: Returns ``True`` if the application is a managed emoji.
1096+
"""
1097+
return 1 << 2
1098+
1099+
@flag_value
1100+
def group_dm_create(self):
1101+
""":class:`bool`: Returns ``True`` if the application can create group DMs.
1102+
"""
1103+
return 1 << 5
1104+
1105+
@flag_value
1106+
def rpc_has_connected(self):
1107+
""":class:`bool`: Returns ``True`` if the application has connected to RPC.
1108+
"""
1109+
return 1 << 11
1110+
10931111
@flag_value
10941112
def gateway_presence(self):
10951113
""":class:`bool`: Returns ``True`` if the application is verified and is allowed to
@@ -1129,3 +1147,16 @@ def verification_pending_guild_limit(self):
11291147
def embedded(self):
11301148
""":class:`bool`: Returns ``True`` if the application is embedded within the Discord client."""
11311149
return 1 << 17
1150+
1151+
@flag_value
1152+
def gateway_message_content(self):
1153+
""":class:`bool`: Returns ``True`` if the application is allowed to read message contents in guilds.
1154+
"""
1155+
return 1 << 18
1156+
1157+
@flag_value
1158+
def gateway_message_content_limited(self):
1159+
""":class:`bool`: Returns ``True`` if the application is currently pending verification
1160+
and has hit the guild limit.
1161+
"""
1162+
return 1 << 19

discord/webhook/async_.py

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,21 @@ def get_webhook_message(
274274
message_id: int,
275275
*,
276276
session: aiohttp.ClientSession,
277+
thread_id: Optional[int] = None,
277278
) -> Response[MessagePayload]:
279+
params = {}
280+
281+
if thread_id:
282+
params['thread_id'] = thread_id
283+
278284
route = Route(
279285
'GET',
280286
'/webhooks/{webhook_id}/{webhook_token}/messages/{message_id}',
281287
webhook_id=webhook_id,
282288
webhook_token=token,
283289
message_id=message_id,
284290
)
285-
return self.request(route, session)
291+
return self.request(route, session, params=params)
286292

287293
def edit_webhook_message(
288294
self,
@@ -291,18 +297,24 @@ def edit_webhook_message(
291297
message_id: int,
292298
*,
293299
session: aiohttp.ClientSession,
300+
thread_id: Optional[int] = None,
294301
payload: Optional[Dict[str, Any]] = None,
295302
multipart: Optional[List[Dict[str, Any]]] = None,
296303
files: Optional[List[File]] = None,
297304
) -> Response[Message]:
305+
params = {}
306+
307+
if thread_id:
308+
params['thread_id'] = thread_id
309+
298310
route = Route(
299311
'PATCH',
300312
'/webhooks/{webhook_id}/{webhook_token}/messages/{message_id}',
301313
webhook_id=webhook_id,
302314
webhook_token=token,
303315
message_id=message_id,
304316
)
305-
return self.request(route, session, payload=payload, multipart=multipart, files=files)
317+
return self.request(route, session, params=params, payload=payload, multipart=multipart, files=files)
306318

307319
def delete_webhook_message(
308320
self,
@@ -311,15 +323,21 @@ def delete_webhook_message(
311323
message_id: int,
312324
*,
313325
session: aiohttp.ClientSession,
326+
thread_id: Optional[int] = None,
314327
) -> Response[None]:
328+
params = {}
329+
330+
if thread_id:
331+
params['thread_id'] = thread_id
332+
315333
route = Route(
316334
'DELETE',
317335
'/webhooks/{webhook_id}/{webhook_token}/messages/{message_id}',
318336
webhook_id=webhook_id,
319337
webhook_token=token,
320338
message_id=message_id,
321339
)
322-
return self.request(route, session)
340+
return self.request(route, session, params=params)
323341

324342
def fetch_webhook(
325343
self,
@@ -1429,7 +1447,12 @@ async def send(
14291447

14301448
return msg
14311449

1432-
async def fetch_message(self, id: int, /) -> WebhookMessage:
1450+
async def fetch_message(
1451+
self,
1452+
id: int,
1453+
*,
1454+
thread_id: Optional[int] = None
1455+
) -> WebhookMessage:
14331456
"""|coro|
14341457
14351458
Retrieves a single :class:`~discord.WebhookMessage` owned by this webhook.
@@ -1440,6 +1463,8 @@ async def fetch_message(self, id: int, /) -> WebhookMessage:
14401463
------------
14411464
id: :class:`int`
14421465
The message ID to look for.
1466+
thread_id: Optional[:class:`int`]
1467+
The ID of the thread that contains the message.
14431468
14441469
Raises
14451470
--------
@@ -1467,6 +1492,7 @@ async def fetch_message(self, id: int, /) -> WebhookMessage:
14671492
self.token,
14681493
id,
14691494
session=self.session,
1495+
thread_id=thread_id,
14701496
)
14711497
return self._create_message(data)
14721498

@@ -1481,6 +1507,7 @@ async def edit_message(
14811507
files: List[File] = MISSING,
14821508
view: Optional[View] = MISSING,
14831509
allowed_mentions: Optional[AllowedMentions] = None,
1510+
thread: Optional[Snowflake] = MISSING
14841511
) -> WebhookMessage:
14851512
"""|coro|
14861513
@@ -1523,6 +1550,8 @@ async def edit_message(
15231550
:meth:`send`.
15241551
15251552
.. versionadded:: 2.0
1553+
thread: Optional[:class:`~discord.abc.Snowflake`]
1554+
The thread that contains the message.
15261555
15271556
Raises
15281557
-------
@@ -1564,12 +1593,18 @@ async def edit_message(
15641593
allowed_mentions=allowed_mentions,
15651594
previous_allowed_mentions=previous_mentions,
15661595
)
1596+
1597+
thread_id: Optional[int] = None
1598+
if thread_id is not MISSING:
1599+
thread_id = thread.id
1600+
15671601
adapter = async_context.get()
15681602
data = await adapter.edit_webhook_message(
15691603
self.id,
15701604
self.token,
15711605
message_id,
15721606
session=self.session,
1607+
thread_id=thread_id,
15731608
payload=params.payload,
15741609
multipart=params.multipart,
15751610
files=params.files,
@@ -1580,7 +1615,12 @@ async def edit_message(
15801615
self._state.store_view(view, message_id)
15811616
return message
15821617

1583-
async def delete_message(self, message_id: int, /) -> None:
1618+
async def delete_message(
1619+
self,
1620+
message_id: int,
1621+
*,
1622+
thread_id: Optional[int] = None
1623+
) -> None:
15841624
"""|coro|
15851625
15861626
Deletes a message owned by this webhook.
@@ -1594,6 +1634,8 @@ async def delete_message(self, message_id: int, /) -> None:
15941634
------------
15951635
message_id: :class:`int`
15961636
The message ID to delete.
1637+
thread_id: Optional[:class:`int`]
1638+
The ID of the thread that contains the message.
15971639
15981640
Raises
15991641
-------
@@ -1611,4 +1653,5 @@ async def delete_message(self, message_id: int, /) -> None:
16111653
self.token,
16121654
message_id,
16131655
session=self.session,
1656+
thread_id=thread_id,
16141657
)

0 commit comments

Comments
 (0)