Provide more content types and and allow to handle all (ContentType.ALL) types of messages.

This commit is contained in:
Alex Root Junior 2017-11-13 20:57:51 +02:00
parent ff6ee0723f
commit 798038484f
3 changed files with 39 additions and 20 deletions

View file

@ -17,6 +17,7 @@ log = logging.getLogger(__name__)
MODE = 'MODE' MODE = 'MODE'
LONG_POOLING = 'long-pooling' LONG_POOLING = 'long-pooling'
UPDATE_OBJECT = 'update_object'
class Dispatcher: class Dispatcher:
@ -112,6 +113,8 @@ class Dispatcher:
try: try:
self.last_update_id = update.update_id self.last_update_id = update.update_id
has_context = context.check_configured() has_context = context.check_configured()
if has_context:
context.set_value(UPDATE_OBJECT, update)
if update.message: if update.message:
if has_context: if has_context:
state = self.storage.get_state(chat=update.message.chat.id, state = self.storage.get_state(chat=update.message.chat.id,

View file

@ -1,7 +1,8 @@
import inspect import inspect
import re import re
from aiogram.utils import context from ..types import ContentType
from ..utils import context
from ..utils.helper import Helper, HelperMode, Item from ..utils.helper import Helper, HelperMode, Item
USER_STATE = 'USER_STATE' USER_STATE = 'USER_STATE'
@ -79,7 +80,8 @@ class ContentTypeFilter(Filter):
self.content_types = content_types self.content_types = content_types
def check(self, message): def check(self, message):
return message.content_type in self.content_types return ContentType.ANY[0] in self.content_types or \
message.content_type in self.content_types
class CancelFilter(Filter): class CancelFilter(Filter):

View file

@ -1,7 +1,7 @@
import datetime import datetime
import typing import typing
import functools
from aiogram.utils import helper
from . import base from . import base
from . import fields from . import fields
from .audio import Audio from .audio import Audio
@ -20,6 +20,7 @@ from .venue import Venue
from .video import Video from .video import Video
from .video_note import VideoNote from .video_note import VideoNote
from .voice import Voice from .voice import Voice
from ..utils import helper
class Message(base.TelegramObject): class Message(base.TelegramObject):
@ -70,30 +71,37 @@ class Message(base.TelegramObject):
successful_payment: SuccessfulPayment = fields.Field(base=SuccessfulPayment) successful_payment: SuccessfulPayment = fields.Field(base=SuccessfulPayment)
@property @property
@functools.lru_cache()
def content_type(self): def content_type(self):
if self.text: if self.text:
return ContentType.TEXT[0] return ContentType.TEXT[0]
elif self.audio: if self.audio:
return ContentType.AUDIO[0] return ContentType.AUDIO[0]
elif self.document: if self.document:
return ContentType.DOCUMENT[0] return ContentType.DOCUMENT[0]
elif self.game: if self.game:
return ContentType.GAME[0] return ContentType.GAME[0]
elif self.photo: if self.photo:
return ContentType.PHOTO[0] return ContentType.PHOTO[0]
elif self.sticker: if self.sticker:
return ContentType.STICKER[0] return ContentType.STICKER[0]
elif self.video: if self.video:
return ContentType.VIDEO[0] return ContentType.VIDEO[0]
elif self.voice: if self.video_note:
return ContentType.VIDEO_NOTE[0]
if self.voice:
return ContentType.VOICE[0] return ContentType.VOICE[0]
elif self.new_chat_members: if self.contact:
return ContentType.CONTACT[0]
if self.location:
return ContentType.LOCATION[0]
if self.venue:
return ContentType.VENUE[0]
if self.new_chat_members:
return ContentType.NEW_CHAT_MEMBERS[0] return ContentType.NEW_CHAT_MEMBERS[0]
elif self.left_chat_member: if self.invoice:
return ContentType.LEFT_CHAT_MEMBER[0]
elif self.invoice:
return ContentType.INVOICE[0] return ContentType.INVOICE[0]
elif self.successful_payment: if self.successful_payment:
return ContentType.SUCCESSFUL_PAYMENT[0] return ContentType.SUCCESSFUL_PAYMENT[0]
else: else:
return ContentType.UNKNOWN[0] return ContentType.UNKNOWN[0]
@ -225,12 +233,14 @@ class ContentType(helper.Helper):
:key: PHOTO :key: PHOTO
:key: STICKER :key: STICKER
:key: VIDEO :key: VIDEO
:key: VIDEO_NOTE
:key: VOICE :key: VOICE
:key: CONTACT
:key: LOCATION
:key: VENUE
:key: NEW_CHAT_MEMBERS :key: NEW_CHAT_MEMBERS
:key: LEFT_CHAT_MEMBER
:key: INVOICE :key: INVOICE
:key: SUCCESSFUL_PAYMENT :key: SUCCESSFUL_PAYMENT
:key: UNKNOWN
""" """
mode = helper.HelperMode.snake_case mode = helper.HelperMode.snake_case
@ -241,13 +251,17 @@ class ContentType(helper.Helper):
PHOTO = helper.ListItem() # photo PHOTO = helper.ListItem() # photo
STICKER = helper.ListItem() # sticker STICKER = helper.ListItem() # sticker
VIDEO = helper.ListItem() # video VIDEO = helper.ListItem() # video
VIDEO_NOTE = helper.ListItem() # video_note
VOICE = helper.ListItem() # voice VOICE = helper.ListItem() # voice
NEW_CHAT_MEMBERS = helper.ListItem() # new_chat_members CONTACT = helper.ListItem() # contact
LEFT_CHAT_MEMBER = helper.ListItem() # left_chat_member LOCATION = helper.ListItem() # location
VENUE = helper.ListItem() # venue
NEW_CHAT_MEMBERS = helper.ListItem() # new_chat_member
INVOICE = helper.ListItem() # invoice INVOICE = helper.ListItem() # invoice
SUCCESSFUL_PAYMENT = helper.ListItem() # successful_payment SUCCESSFUL_PAYMENT = helper.ListItem() # successful_payment
UNKNOWN = 'unknown' UNKNOWN = helper.ListItem() # unknown
ANY = helper.ListItem() # any
class ParseMode(helper.Helper): class ParseMode(helper.Helper):