Skip to content

Commit 3efd85d

Browse files
authored
Add Unknown event (#424)
* Define UnkownEvent * Add example * Format
1 parent 524fd94 commit 3efd85d

File tree

6 files changed

+50
-4
lines changed

6 files changed

+50
-4
lines changed

examples/flask-kitchensink/app.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
StickerMessage, StickerSendMessage, LocationMessage, LocationSendMessage,
4242
ImageMessage, VideoMessage, AudioMessage, FileMessage,
4343
UnfollowEvent, FollowEvent, JoinEvent, LeaveEvent, BeaconEvent,
44-
MemberJoinedEvent, MemberLeftEvent,
44+
MemberJoinedEvent, MemberLeftEvent, UnknownEvent,
4545
FlexSendMessage, BubbleContainer, ImageComponent, BoxComponent,
4646
TextComponent, IconComponent, ButtonComponent,
4747
SeparatorComponent, QuickReply, QuickReplyButton,
@@ -680,6 +680,11 @@ def handle_member_left(event):
680680
app.logger.info("Got memberLeft event")
681681

682682

683+
@handler.add(UnknownEvent)
684+
def handle_unknown_left(event):
685+
app.logger.info(f"unknown event {event}")
686+
687+
683688
@app.route('/static/<path:path>')
684689
def send_static_content(path):
685690
return send_from_directory('static', path)

linebot/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
MemberLeftEvent,
5252
BeaconEvent,
5353
ThingsEvent,
54+
UnknownEvent,
5455
Postback,
5556
Beacon,
5657
Link,

linebot/models/events.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,22 @@ def __init__(self, mode=None, timestamp=None, source=None, reply_token=None,
490490
)
491491

492492

493+
class UnknownEvent(Event):
494+
"""Unknown event.
495+
496+
We welcome your contribution to line-bot-sdk-python!
497+
"""
498+
499+
def __init__(self, **kwargs):
500+
"""__init__ method.
501+
502+
:param kwargs:
503+
"""
504+
super(UnknownEvent, self).__init__(**kwargs)
505+
506+
self.type = 'unknown'
507+
508+
493509
class Postback(Base):
494510
"""Postback.
495511

linebot/webhook.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@
3333
AccountLinkEvent,
3434
MemberJoinedEvent,
3535
MemberLeftEvent,
36-
ThingsEvent, UnsendEvent, VideoPlayCompleteEvent,
36+
ThingsEvent,
37+
UnsendEvent,
38+
VideoPlayCompleteEvent,
39+
UnknownEvent,
3740
)
3841
from .utils import LOGGER, PY3, safe_compare_digest
3942

@@ -172,7 +175,8 @@ def parse(self, body, signature, as_payload=False):
172175
elif event_type == 'videoPlayComplete':
173176
events.append(VideoPlayCompleteEvent.new_from_json_dict(event))
174177
else:
175-
LOGGER.warn('Unknown event type. type=' + event_type)
178+
LOGGER.info('Unknown event type. type=' + event_type)
179+
events.append(UnknownEvent.new_from_json_dict(event))
176180

177181
if as_payload:
178182
return WebhookPayload(events=events, destination=body_json.get('destination'))

tests/test_webhook.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
MessageEvent, FollowEvent, UnfollowEvent, JoinEvent,
2727
LeaveEvent, PostbackEvent, BeaconEvent, AccountLinkEvent,
2828
MemberJoinedEvent, MemberLeftEvent, ThingsEvent,
29+
UnknownEvent,
2930
TextMessage, ImageMessage, VideoMessage, AudioMessage,
3031
LocationMessage, StickerMessage, FileMessage,
3132
SourceUser, SourceRoom, SourceGroup,
@@ -69,7 +70,7 @@ def test_parse(self):
6970
events = self.parser.parse(body, 'channel_secret')
7071

7172
# events count
72-
self.assertEqual(len(events), 29)
73+
self.assertEqual(len(events), 30)
7374

7475
# MessageEvent, SourceUser, TextMessage
7576
self.assertIsInstance(events[0], MessageEvent)
@@ -567,6 +568,9 @@ def test_parse(self):
567568
self.assertEqual(events[28].message.type, 'text')
568569
self.assertEqual(events[28].message.text, 'Hello, world')
569570

571+
# UnknownEvent
572+
self.assertIsInstance(events[29], UnknownEvent)
573+
570574
def test_parse_webhook_req_without_destination(self):
571575
body = """
572576
{

tests/text/webhook.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,22 @@
581581
"type": "text",
582582
"text": "Hello, world"
583583
}
584+
},
585+
{
586+
"type": "undefined",
587+
"mode": "active",
588+
"timestamp": 1462629479859,
589+
"source": {
590+
"type": "user",
591+
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
592+
},
593+
"webhookEventId": "testwebhookeventid",
594+
"deliveryContext": {
595+
"isRedelivery": true
596+
},
597+
"undefinedField": {
598+
"1": 1
599+
}
584600
}
585601
]
586602
}

0 commit comments

Comments
 (0)