11import asyncio
22import discord
33import inspect
4- from concurrent .futures import TimeoutError
54from discord .ext import commands
65from functools import partial
76from typing import Union
@@ -43,6 +42,7 @@ def __init__(self, *, timeout: int = 180, try_remove: bool = True):
4342 self .buttons = self ._buttons
4443
4544 self ._defaults = {}
45+ self ._default_stop = {}
4646
4747 def __init_subclass__ (cls , ** kwargs ):
4848 pass
@@ -133,12 +133,14 @@ async def _session_loop(self, ctx):
133133 except discord .HTTPException :
134134 pass
135135
136- if action and button in self ._defaults .values ():
137- await button ._callback (ctx )
136+ member = ctx .guild .get_member (payload .user_id )
137+
138+ if action and button in self ._defaults .values () or button in self ._default_stop .values ():
139+ await button ._callback (ctx , member )
138140 elif action and button ._callback :
139- await button ._callback (self , ctx )
141+ await button ._callback (self , ctx , member )
140142 elif not action and button ._inverse_callback :
141- await button ._inverse_callback (self , ctx )
143+ await button ._inverse_callback (self , ctx , member )
142144
143145 @property
144146 def is_cancelled (self ):
@@ -153,7 +155,11 @@ async def cancel(self, ctx):
153155 async def teardown (self , ctx ):
154156 """Clean the session up."""
155157 self ._session_task .cancel ()
156- await self .page .delete ()
158+
159+ try :
160+ await self .page .delete ()
161+ except discord .NotFound :
162+ pass
157163
158164 async def _add_reactions (self , reactions ):
159165 for reaction in reactions :
@@ -224,6 +230,7 @@ def __init__(self, *, title: str = '', length: int = 10, entries: list = None,
224230 (2 , '⏹' ): Button (emoji = '⏹' , position = 2 , callback = partial (self ._default_indexer , 'stop' )),
225231 (3 , '▶' ): Button (emoji = '▶' , position = 3 , callback = partial (self ._default_indexer , + 1 )),
226232 (4 , '⏭' ): Button (emoji = '⏭' , position = 4 , callback = partial (self ._default_indexer , 'end' ))}
233+ self ._default_stop = {(0 , '⏹' ): Button (emoji = '⏹' , position = 0 , callback = partial (self ._default_indexer , 'stop' ))}
227234
228235 self .buttons = {}
229236
@@ -297,17 +304,20 @@ async def _paginate(self, ctx: commands.Context):
297304
298305 async def _session (self , ctx ):
299306 if self .use_defaults :
300- self .buttons = {** self ._defaults , ** self ._buttons }
307+ if len (self ._pages ) == 1 :
308+ self .buttons = {** self ._default_stop , ** self ._buttons }
309+ else :
310+ self .buttons = {** self ._defaults , ** self ._buttons }
301311 else :
302312 self .buttons = self ._buttons
303313
304314 self .buttons = self .sort_buttons ()
305315
306- ctx .bot .loop .create_task (self ._add_reactions (self .buttons . keys () ))
316+ ctx .bot .loop .create_task (self ._add_reactions (self .buttons ))
307317
308318 await self ._session_loop (ctx )
309319
310- async def _default_indexer (self , control , ctx ):
320+ async def _default_indexer (self , control , ctx , member ):
311321 previous = self ._index
312322
313323 if control == 'stop' :
0 commit comments