Skip to content

Commit 969690b

Browse files
authored
Merge pull request #40 from okdtsk/support_bm
Add DeviceMessage property to BeaconEvent
2 parents c761fbe + 6bc42b7 commit 969690b

File tree

5 files changed

+34
-2
lines changed

5 files changed

+34
-2
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ Event
523523
- beacon: Beacon
524524
- type
525525
- hwid
526+
- device_message
526527

527528
Source
528529
^^^^^^

examples/flask-kitchensink/app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,8 @@ def handle_postback(event):
250250
def handle_beacon(event):
251251
line_bot_api.reply_message(
252252
event.reply_token,
253-
TextSendMessage(text='Got beacon event. hwid=' + event.beacon.hwid))
253+
TextSendMessage(text='Got beacon event. hwid={}, device_message={}'
254+
.format(event.beacon.hwid, event.beacon.device_message)))
254255

255256

256257
if __name__ == "__main__":

linebot/models/events.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,14 +282,16 @@ class Beacon(Base):
282282
https://devdocs.line.me/en/#beacon-event
283283
"""
284284

285-
def __init__(self, type=None, hwid=None, **kwargs):
285+
def __init__(self, type=None, hwid=None, dm=None, **kwargs):
286286
"""__init__ method.
287287
288288
:param str type: Type of beacon event
289289
:param str hwid: Hardware ID of the beacon that was detected
290+
:param str dm: Optional. Device message of beacon that was detected in bytearray
290291
:param kwargs:
291292
"""
292293
super(Beacon, self).__init__(**kwargs)
293294

294295
self.type = type
295296
self.hwid = hwid
297+
self.device_message = bytearray.fromhex(dm) if dm is not None else None

tests/test_webhook.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,20 @@ def test_parse(self):
204204
self.assertEqual(events[11].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
205205
self.assertEqual(events[11].beacon.hwid, 'd41d8cd98f')
206206
self.assertEqual(events[11].beacon.type, 'enter')
207+
self.assertEqual(events[11].beacon.device_message, None)
208+
209+
# BeaconEvent, SourceUser (with device message)
210+
self.assertIsInstance(events[12], BeaconEvent)
211+
self.assertEqual(events[12].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
212+
self.assertEqual(events[12].type, 'beacon')
213+
self.assertEqual(events[12].timestamp, 1462629479859)
214+
self.assertIsInstance(events[12].source, SourceUser)
215+
self.assertEqual(events[12].source.type, 'user')
216+
self.assertEqual(events[12].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
217+
self.assertEqual(events[12].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
218+
self.assertEqual(events[12].beacon.hwid, 'd41d8cd98f')
219+
self.assertEqual(events[12].beacon.type, 'enter')
220+
self.assertEqual(events[12].beacon.device_message, bytearray(b'\x124Vx\x90\xab\xcd\xef'))
207221

208222

209223
class TestWebhookHandler(unittest.TestCase):
@@ -271,6 +285,7 @@ def test_handler(self):
271285
self.assertEqual(self.calls[9], 'default leave')
272286
self.assertEqual(self.calls[10], '6 postback')
273287
self.assertEqual(self.calls[11], '7 beacon')
288+
self.assertEqual(self.calls[12], '7 beacon')
274289

275290

276291
if __name__ == '__main__':

tests/text/webhook.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,5 +131,18 @@
131131
"hwid": "d41d8cd98f",
132132
"type": "enter"
133133
}
134+
}, {
135+
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
136+
"type": "beacon",
137+
"timestamp": 1462629479859,
138+
"source": {
139+
"type": "user",
140+
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
141+
},
142+
"beacon": {
143+
"hwid": "d41d8cd98f",
144+
"type": "enter",
145+
"dm": "1234567890abcdef"
146+
}
134147
}]
135148
}

0 commit comments

Comments
 (0)