Start typing immediately when using async typing context manager.
This commit is contained in:
parent
0e5bf09021
commit
22150b20b6
@ -28,6 +28,13 @@ import asyncio
|
|||||||
|
|
||||||
from .compat import create_task
|
from .compat import create_task
|
||||||
|
|
||||||
|
def _typing_done_callback(fut):
|
||||||
|
# just retrieve any exception and call it a day
|
||||||
|
try:
|
||||||
|
fut.exception()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
class Typing:
|
class Typing:
|
||||||
def __init__(self, messageable):
|
def __init__(self, messageable):
|
||||||
self.loop = messageable._state.loop
|
self.loop = messageable._state.loop
|
||||||
@ -35,7 +42,11 @@ class Typing:
|
|||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def do_typing(self):
|
def do_typing(self):
|
||||||
channel = yield from self.messageable._get_channel()
|
try:
|
||||||
|
channel = self._channel
|
||||||
|
except AttributeError:
|
||||||
|
channel = yield from self.messageable._get_channel()
|
||||||
|
|
||||||
typing = channel._state.http.send_typing
|
typing = channel._state.http.send_typing
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@ -44,18 +55,18 @@ class Typing:
|
|||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.task = create_task(self.do_typing(), loop=self.loop)
|
self.task = create_task(self.do_typing(), loop=self.loop)
|
||||||
|
self.task.add_done_callback(_typing_done_callback)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __exit__(self, exc_type, exc, tb):
|
def __exit__(self, exc_type, exc, tb):
|
||||||
try:
|
self.task.cancel()
|
||||||
self.task.cancel()
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def __aenter__(self):
|
def __aenter__(self):
|
||||||
|
self._channel = channel = yield from self.messageable._get_channel()
|
||||||
|
yield from channel._state.http.send_typing(channel.id)
|
||||||
return self.__enter__()
|
return self.__enter__()
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def __aexit__(self, exc_type, exc, tb):
|
def __aexit__(self, exc_type, exc, tb):
|
||||||
self.__exit__(exc_type, exc, tb)
|
self.task.cancel()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user