-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.ls
87 lines (65 loc) · 2.32 KB
/
index.ls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
require! {
util
'./config.json.ls'
'prelude-ls': {fold1, zip-with, max, map}
kuromojin: {get-tokenizer}
unorm: {nfkc}
'@slack/client': {
Rtm-client
Web-client
RTM_EVENTS: {MESSAGE}
CLIENT_EVENTS: {
RTM: {DISCONNECT}
}
}
}
tokenizer <- get-tokenizer!then
rtm-client = new Rtm-client config.slack-token
rtm-client.start!
web-client = new Web-client config.slack-token
rtm-client.on DISCONNECT, -> process.exit 1
message <- rtm-client.on MESSAGE
text = message.file?.initial_comment?.comment or message.text
return unless text?
return unless config.channels.length is 0 or message.channel in config.channels
text .= replace /^<.+?>:?/ ''
tokens = tokenizer.tokenize nfkc text
target-regions = [5 7 5]
regions = [0]
for token in tokens
if token.pos is \記号 or token.surface_form in <[、 ! ?]>
if regions.length < target-regions.length and regions[* - 1] >= target-regions[regions.length - 1]
regions.push 0
continue
pronunciation = token.pronunciation or token.surface_form
return unless pronunciation.match /^[ぁ-ゔァ-ヺー…]+$/
region-length = pronunciation.replace /[ぁぃぅぇぉゃゅょァィゥェォャュョ…]/g, '' .length
if token.pos in <[助詞 助動詞]> or token.pos_detail_1 in <[接尾 非自立]>
regions[* - 1] += region-length
else if regions[* - 1] < target-regions[regions.length - 1] or regions.length is 3
regions[* - 1] += region-length
else
regions.push region-length
if regions[* - 1] is 0
regions.pop!
return if regions.length isnt target-regions.length
jitarazu = regions |> zip-with (-), target-regions |> map max 0 |> fold1 (+)
jiamari = target-regions |> zip-with (-), regions |> map max 0 |> fold1 (+)
return if jitarazu > config.max-jitarazu or jiamari > config.max-jiamari
add-reaction = (emoji) ->
| message.file? =>
web-client.reactions.add emoji, {
file: message.file.id
file_comment: message.file.initial_comment.id
}
| otherwise =>
web-client.reactions.add emoji, {
message.channel
timestamp: message.ts
}
add-reaction config.ikku-emoji
if jiamari > 0 and config.jiamari-emoji?length > 0
add-reaction config.jiamari-emoji
if jitarazu > 0 and config.jitarazu-emoji?length > 0
add-reaction config.jitarazu-emoji
console.log "[#{Date!}] Found ikku: #{util.inspect message}"