wechat-bot2 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/wechat/bot/contact.rb +9 -1
- data/lib/wechat/bot/message.rb +37 -18
- data/lib/wechat/bot/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d129e298145340b212f0f23de82dbf6c571580d29984553c68e77339fa8ce4d
|
4
|
+
data.tar.gz: 15d8e87b1bebc29ff8b8727f64dbe62b3dad74d5b61bd2920050e7d9b320b50e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fb047ab3e2829968a859c16e38ba8ad5cb51f74d21f6395903ecc94a363727dd4b11d4e54bf8e408db75ba3112a6a3b921f6f0ffc1ec431df2b0c91ed59e0f8
|
7
|
+
data.tar.gz: 5de0e2c9a843309fc2ecf67aeff30ad71377193d5b0e72c2160a740b9470c25a8d78fd141d5adc6c6c4f702bc156b6ea0af8cd8cfc475421196bd8d0c9d47442
|
data/lib/wechat/bot/contact.rb
CHANGED
@@ -90,6 +90,14 @@ module WeChat::Bot
|
|
90
90
|
attr(:members)
|
91
91
|
end
|
92
92
|
|
93
|
+
def find_member(args)
|
94
|
+
if args[:username]
|
95
|
+
members.find{|contact| args[:username] == contact.username }
|
96
|
+
elsif args[:nickname]
|
97
|
+
members.find{|contact| args[:nickname] == contact.nickname }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
93
101
|
# 联系人解析
|
94
102
|
#
|
95
103
|
# @param [Hash<Object, Object>] raw
|
@@ -117,7 +125,7 @@ module WeChat::Bot
|
|
117
125
|
end
|
118
126
|
|
119
127
|
def to_s
|
120
|
-
"#<#{self.class}:#{object_id.to_s(16)} username='#{username}' nickname='#{nickname}' kind='#{kind}'>"
|
128
|
+
"#<#{self.class}:#{object_id.to_s(16)} username='#{username}' nickname='#{nickname}' kind='#{kind}' members=#{members.size}>"
|
121
129
|
end
|
122
130
|
|
123
131
|
private
|
data/lib/wechat/bot/message.rb
CHANGED
@@ -21,7 +21,7 @@ module WeChat::Bot
|
|
21
21
|
end
|
22
22
|
|
23
23
|
GROUP_MESSAGE_REGEX = /^(@\w+):<br\/>(.*)$/
|
24
|
-
AT_MESSAGE_REGEX = /@([^\s]
|
24
|
+
AT_MESSAGE_REGEX = /@([^\s]+?) /
|
25
25
|
|
26
26
|
# 原始消息
|
27
27
|
# @return [Hash<Object, Object>]
|
@@ -50,6 +50,8 @@ module WeChat::Bot
|
|
50
50
|
# 用户或者群组
|
51
51
|
# @return [Contact]
|
52
52
|
attr_reader :from
|
53
|
+
# 群组消息时为消息用户,其余为from
|
54
|
+
attr_reader :from_user
|
53
55
|
|
54
56
|
# 消息正文
|
55
57
|
# @return [String]
|
@@ -94,16 +96,22 @@ module WeChat::Bot
|
|
94
96
|
parse_source
|
95
97
|
parse_kind
|
96
98
|
|
99
|
+
# TODO: 来自于特殊账户无法获取联系人信息,需要单独处理
|
100
|
+
@from = @bot.contact_list.find(username: @raw["FromUserName"])
|
101
|
+
|
97
102
|
message = @raw["Content"].convert_emoji
|
98
103
|
message = CGI.unescape_html(message) if @kinde != Message::Kind::Text
|
104
|
+
|
99
105
|
if match = group_message(message)
|
100
|
-
# from_username = match[0]
|
101
106
|
message = match[1]
|
107
|
+
@from_user = @from.find_member(username: match[0])
|
108
|
+
@at_message_names = match[2]
|
109
|
+
else
|
110
|
+
@from_user = @from
|
102
111
|
end
|
103
112
|
|
104
113
|
@message = message
|
105
|
-
|
106
|
-
@from = @bot.contact_list.find(username: @raw["FromUserName"])
|
114
|
+
|
107
115
|
parse_emoticon if @kind == Message::Kind::Emoticon
|
108
116
|
|
109
117
|
case @kind
|
@@ -139,9 +147,24 @@ module WeChat::Bot
|
|
139
147
|
end
|
140
148
|
|
141
149
|
def at_message?
|
142
|
-
@
|
150
|
+
!( @at_message_names.nil? || @at_message_names.empty? )
|
143
151
|
end
|
144
152
|
|
153
|
+
def at_members
|
154
|
+
if at_message?
|
155
|
+
@at_message_names.map{|nickname| from.find_member(nickname: nickname) }
|
156
|
+
else
|
157
|
+
[]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
# 私聊或者群聊被@
|
162
|
+
def talked_to?
|
163
|
+
(source == Contact::Kind::User) || at_members.any?{|member| !!member && (member.username == @raw['ToUserName']) }
|
164
|
+
end
|
165
|
+
|
166
|
+
private
|
167
|
+
|
145
168
|
# 解析消息来源
|
146
169
|
#
|
147
170
|
# 特殊账户/群聊/公众号/用户
|
@@ -218,11 +241,7 @@ module WeChat::Bot
|
|
218
241
|
@events << @kind
|
219
242
|
@events << @source
|
220
243
|
|
221
|
-
@
|
222
|
-
if @source == :group && @raw["Content"] =~ /@([^\s]+)\s+(.*)/
|
223
|
-
@events << :at_message
|
224
|
-
@at_mesage = true
|
225
|
-
end
|
244
|
+
@events << :at_message if at_message?
|
226
245
|
end
|
227
246
|
|
228
247
|
# 解析表情
|
@@ -259,10 +278,10 @@ module WeChat::Bot
|
|
259
278
|
# - 1 message
|
260
279
|
def group_message(message)
|
261
280
|
if match = GROUP_MESSAGE_REGEX.match(message)
|
262
|
-
|
281
|
+
at_message(match[2]).unshift(match[1])
|
282
|
+
else
|
283
|
+
false
|
263
284
|
end
|
264
|
-
|
265
|
-
false
|
266
285
|
end
|
267
286
|
|
268
287
|
# 尝试解析群聊中的 @ 消息
|
@@ -273,11 +292,11 @@ module WeChat::Bot
|
|
273
292
|
# @param [String] message 原始消息
|
274
293
|
# @return [String] 文本消息,如果不是 @ 消息返回原始消息
|
275
294
|
def at_message(message)
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
295
|
+
at_names = []
|
296
|
+
[
|
297
|
+
message.gsub(AT_MESSAGE_REGEX){ at_names << $1; "" },
|
298
|
+
at_names
|
299
|
+
]
|
281
300
|
end
|
282
301
|
end
|
283
302
|
end
|
data/lib/wechat/bot/version.rb
CHANGED