wechat-bot 0.1.0.alpha → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: '090643c6759e35fa619b81b30055aa05e001d4fe'
4
- data.tar.gz: 58a2fd57bc3967c6c552de30201e357968eec9a5
2
+ SHA256:
3
+ metadata.gz: f51d686f64f0e38fe8db34c7b9bae5e6de249fc02ebcf98d4ddd4f94a96a342e
4
+ data.tar.gz: 9fffa5e215ce50566f1287ad2e38eed4b19bd0c9b5134ef4cca87c6df4d8fd1f
5
5
  SHA512:
6
- metadata.gz: 3b804920918ea5ddac3efb46183af8b0d1bae54d227c83f74f175d4bf907bb93286848ae10f70a497f7736ede1f98fe00902ad71765a22f52597e764d30db352
7
- data.tar.gz: 8c2e0e348f2425a3542c4bd5fe317cd99167cfb1765a66338619b5f3d43a132ea7d86c48cfd059c54aa1b0e0879fc1cbd0d039c2ead6cddb1557694ae3546389
6
+ metadata.gz: 2f82d691486b461ebff9b0804e1cb6955f4b8f91f4ec96d10a664639776acc549daa328c58f92ff44ca004bd33afc4c682b631f379b106c57e039f074bebe268
7
+ data.tar.gz: 190fb8b8331da512d2ce7771193ccb7ab703d7b12c61c979d2436778e5b425796b39d3eee580665009600daf18ee5a161d41169b9b5fa054ffde0b46930f8353
@@ -0,0 +1,13 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: circleci/ruby:2.4.1
6
+ branches:
7
+ ignore:
8
+ - gh-pages
9
+ working_directory: ~/wechat-bot
10
+ steps:
11
+ - checkout
12
+ - run: bundle install
13
+ - run: rake spec
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  # rspec failure tracking
14
14
  .rspec_status
15
15
  .rvmrc
16
+ .vscode
@@ -12,3 +12,6 @@ Style/AsciiComments:
12
12
 
13
13
  Style/SpecialGlobalVars:
14
14
  Enabled: false
15
+
16
+ Lint/AssignmentInCondition:
17
+ Enabled: false
@@ -1 +1 @@
1
- wecaht-bot
1
+ wechat-bot
@@ -1 +1 @@
1
- 2.4.1
1
+ 2.5.0
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # wechat-bot
2
2
 
3
- [![Build Status](https://img.shields.io/travis/icyleaf/wechat-bot.svg?style=flat)](https://travis-ci.org/icyleaf/wechat-bot)
3
+ [![Build Status](https://img.shields.io/circleci/project/github/icyleaf/wechat-bot.svg?style=flat)](https://circleci.com/gh/icyleaf/wechat-bot)
4
4
  [![Code Climate](https://img.shields.io/codeclimate/github/icyleaf/wechat-bot.svg?style=flat)](https://codeclimate.com/github/icyleaf/wechat-bot)
5
5
  [![Inline docs](http://inch-ci.org/github/icyleaf/wechat-bot.svg?style=flat)](https://inch-ci.org/github/icyleaf/wechat-bot)
6
6
  [![Gem version](https://img.shields.io/gem/v/wechat-bot.svg?style=flat)](https://rubygems.org/gems/wechat-bot)
@@ -13,7 +13,7 @@
13
13
  ```ruby
14
14
  require 'wechat-bot'
15
15
 
16
- bot = Wechat::Bot::Client.new do
16
+ bot = Wechat::Bot.new do
17
17
  on :message, "ping" do |message|
18
18
  message.reply "PONG"
19
19
  end
data/Rakefile CHANGED
@@ -1,12 +1,14 @@
1
1
  require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
-
4
2
  require 'wechat_bot'
5
3
  require 'awesome_print'
6
4
 
5
+ require 'rspec/core/rake_task'
7
6
  RSpec::Core::RakeTask.new(:spec)
8
7
 
9
- task :default => :spec
8
+ require 'rubocop/rake_task'
9
+ RuboCop::RakeTask.new
10
+
11
+ task :default => [:rubocop, :spec]
10
12
 
11
13
  desc 'Run a sample wechat bot'
12
14
  task :bot do
@@ -25,7 +27,7 @@ task :bot do
25
27
  else
26
28
  m.reply m.media_id, type: :emoticon
27
29
  end
28
- when WeChat::Bot::Message::Kind::ShareLink
30
+ when WeChat::Bot::Message::Kind::ShareCard
29
31
  m.reply "标题:#{m.meta_data.title}\n描述:#{m.meta_data.description}\n#{m.meta_data.link}"
30
32
  when WeChat::Bot::Message::Kind::System
31
33
  m.reply "系统消息:#{m.message}"
@@ -1 +1,3 @@
1
- require "wechat/bot"
1
+ # frozen_string_literal: true
2
+
3
+ require 'wechat/bot'
@@ -1,11 +1,13 @@
1
- require "wechat/bot/ext/wechat_emoji_string"
2
-
1
+ require "wechat/bot/version"
3
2
  require "wechat/bot/core"
4
3
  require "wechat/bot/client"
5
- require "wechat/bot/version"
4
+ require "wechat/bot/exception"
5
+ require "wechat/bot/ext/wechat_emoji_string"
6
6
 
7
- module WeChat::Bot
8
- def self.new(&block)
9
- WeChat::Bot::Core.new(&block)
7
+ module WeChat
8
+ module Bot
9
+ def self.new(&block)
10
+ WeChat::Bot::Core.new(&block)
11
+ end
10
12
  end
11
13
  end
@@ -111,7 +111,7 @@ module WeChat::Bot
111
111
  end
112
112
 
113
113
  # 获取二维码图片
114
- def show_qr_code(uuid, renderer = "ansi")
114
+ def show_qr_code(uuid)
115
115
  @bot.logger.info "获取登录用扫描二维码 ... "
116
116
  url = File.join(@bot.config.auth_url, "l", uuid)
117
117
  qrcode = RQRCode::QRCode.new(url)
@@ -153,11 +153,11 @@ module WeChat::Bot
153
153
  r = @session.get(File.join(@bot.config.auth_url, "cgi-bin/mmwebwx-bin/login"), params: params)
154
154
  data = r.parse(:js)
155
155
  status = case data["code"]
156
- when 200 then :logged
157
- when 201 then :scaned
158
- when 408 then :waiting
159
- else :timeout
160
- end
156
+ when 200 then :logged
157
+ when 201 then :scaned
158
+ when 408 then :waiting
159
+ else :timeout
160
+ end
161
161
 
162
162
  [status, data]
163
163
  end
@@ -559,7 +559,7 @@ module WeChat::Bot
559
559
  #
560
560
  # @return [void]
561
561
  def params_sync_key
562
- store(:sync_key)["List"].map {|i| i.values.join("_") }.join("|")
562
+ store(:sync_key)["List"].map { |i| i.values.join("_") }.join("|")
563
563
  end
564
564
 
565
565
  # 初始化变量
@@ -1,3 +1,5 @@
1
+ require 'ostruct'
2
+
1
3
  module WeChat::Bot
2
4
  class Configuration < OpenStruct
3
5
  # 默认配置
@@ -10,36 +12,36 @@ module WeChat::Bot
10
12
  fireman: 'filehelper',
11
13
 
12
14
  # WeChat Configurations
13
- app_id: "wx782c26e4c19acffb",
14
- auth_url: "https://login.weixin.qq.com",
15
+ app_id: 'wx782c26e4c19acffb',
16
+ auth_url: 'https://login.weixin.qq.com',
15
17
  servers: [
16
18
  {
17
- index: "wx.qq.com",
18
- file: "file.wx.qq.com",
19
- push: "webpush.wx.qq.com",
19
+ index: 'wx.qq.com',
20
+ file: 'file.wx.qq.com',
21
+ push: 'webpush.wx.qq.com',
20
22
  },
21
23
  {
22
- index: "wx2.qq.com",
23
- file: "file.wx2.qq.com",
24
- push: "webpush.wx2.qq.com",
24
+ index: 'wx2.qq.com',
25
+ file: 'file.wx2.qq.com',
26
+ push: 'webpush.wx2.qq.com',
25
27
  },
26
28
  {
27
- index: "wx8.qq.com",
28
- file: "file.wx8.qq.com",
29
- push: "webpush.wx8.qq.com",
29
+ index: 'wx8.qq.com',
30
+ file: 'file.wx8.qq.com',
31
+ push: 'webpush.wx8.qq.com',
30
32
  },
31
33
  {
32
- index: "wechat.com",
33
- file: "file.web.wechat.com",
34
- push: "webpush.web.wechat.com",
34
+ index: 'wechat.com',
35
+ file: 'file.web.wechat.com',
36
+ push: 'webpush.web.wechat.com',
35
37
  },
36
38
  {
37
- index: "web2.wechat.com",
38
- file: "file.web2.wechat.com",
39
- push: "webpush.web2.wechat.com",
39
+ index: 'web2.wechat.com',
40
+ file: 'file.web2.wechat.com',
41
+ push: 'webpush.web2.wechat.com',
40
42
  },
41
43
  ],
42
- cookies: "wechat-bot-cookies.txt",
44
+ cookies: 'wechat-bot-cookies.txt',
43
45
  special_users: [
44
46
  'newsapp', 'filehelper', 'weibo', 'qqmail',
45
47
  'fmessage', 'tmessage', 'qmessage', 'qqsync',
@@ -51,7 +53,7 @@ module WeChat::Bot
51
53
  'notification_messages', 'wxid_novlwrv3lqwv11',
52
54
  'gh_22b87fa7cb3c', 'userexperience_alarm',
53
55
  ],
54
- user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
56
+ user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36',
55
57
  }
56
58
  end
57
59
 
@@ -133,7 +133,7 @@ module WeChat::Bot
133
133
 
134
134
  # 满足群组类型且 nickname 为空时补充一个默认的群组名(参考微信 App 设计)
135
135
  if attribute.to_sym == :nickname && value.to_s.empty? && @kind == Kind::Group
136
- value = members.map {|m| m.nickname }.join("、")
136
+ value = members.map { |m| m.nickname }.join("、")
137
137
  end
138
138
 
139
139
  if data
@@ -126,7 +126,7 @@ module WeChat::Bot
126
126
  @client.logout if @client.logged? && @client.alive?
127
127
  end
128
128
 
129
- private
129
+ # private
130
130
 
131
131
  # def defaults_logger
132
132
  # @logger = Logger.new($stdout)
@@ -0,0 +1,5 @@
1
+ module WeChat::Bot
2
+ class Exception < StandardError; end
3
+
4
+ class NoReplyException < Exception; end
5
+ end
@@ -9,7 +9,7 @@ module WeChat::Bot
9
9
  # 提示:不可逆转
10
10
  class JS < ::HTTP::MimeType::Adapter
11
11
  # Encodes object to js
12
- def encode(obj)
12
+ def encode(_)
13
13
  "" # NO NEED encode
14
14
  end
15
15
 
@@ -10,7 +10,7 @@ module WeChat::Bot
10
10
  # 提示:不可逆转
11
11
  class XML < ::HTTP::MimeType::Adapter
12
12
  # Encodes object to js
13
- def encode(obj)
13
+ def encode(_)
14
14
  "" # NO NEED encode
15
15
  end
16
16
 
@@ -42,7 +42,7 @@ module WeChat::Bot
42
42
 
43
43
  def fatal(exception)
44
44
  message = ["#{exception.backtrace.first}: #{exception.message} (#{exception.class})"]
45
- message.concat exception.backtrace[1..-1].map {|s| "\t" + s}
45
+ message.concat(exception.backtrace[1..-1].map {|s| "\t" + s})
46
46
  log(:fatal, message.join("\n"))
47
47
  end
48
48
 
@@ -1,4 +1,4 @@
1
- require "wechat/bot/message_data/share_link"
1
+ require "wechat/bot/message_data/share_card"
2
2
 
3
3
  module WeChat::Bot
4
4
  # 微信消息
@@ -10,10 +10,11 @@ module WeChat::Bot
10
10
  Voice = :voice
11
11
  ShortVideo = :short_video
12
12
  Emoticon = :emoticon
13
- ShareLink = :share_link
13
+ ShareCard = :share_link
14
14
  # RedPacage = :red_package
15
15
  # BusinessCard = :business_card
16
16
  # MusicLink = :music_link
17
+ Verify = :verify
17
18
  System = :system
18
19
  Unkown = :unkown
19
20
  end
@@ -67,7 +68,7 @@ module WeChat::Bot
67
68
 
68
69
  parse
69
70
 
70
- @bot.logger.debug "Message Raw: #{@raw}"
71
+ @bot.logger.verbose "Message Raw: #{@raw}"
71
72
  end
72
73
 
73
74
  # 回复消息
@@ -76,6 +77,12 @@ module WeChat::Bot
76
77
  to_user = @bot.contact_list.find(nickname: args[:nickname]) if args[:nickname]
77
78
 
78
79
  message_type = args[:type] || :text
80
+
81
+ # if @bot.config.special_users.include?(to_user) && to_user != 'filehelper'
82
+ # @bot.logger.error "特殊账户无法回复: #{to_user}"
83
+ # raise NoReplyException, "特殊账户无法回复: #{to_user}"
84
+ # end
85
+
79
86
  @bot.client.send(message_type, to_user, text)
80
87
  end
81
88
 
@@ -89,17 +96,18 @@ module WeChat::Bot
89
96
  message = @raw["Content"].convert_emoji
90
97
  message = CGI.unescape_html(message) if @kinde != Message::Kind::Text
91
98
  if match = group_message(message)
92
- from_username = match[0]
99
+ # from_username = match[0]
93
100
  message = match[1]
94
101
  end
95
102
 
96
103
  @message = message
104
+ # TODO: 来自于特殊账户无法获取联系人信息,需要单独处理
97
105
  @from = @bot.contact_list.find(username: @raw["FromUserName"])
98
106
  parse_emoticon if @kind == Message::Kind::Emoticon
99
107
 
100
108
  case @kind
101
- when Message::Kind::ShareLink
102
- @meta_data = MessageData::ShareLink.parse(@message)
109
+ when Message::Kind::ShareCard
110
+ @meta_data = MessageData::ShareCard.parse(@message)
103
111
  end
104
112
 
105
113
  parse_events
@@ -129,6 +137,10 @@ module WeChat::Bot
129
137
  @message.match(regexp)
130
138
  end
131
139
 
140
+ def at_message?
141
+ @at_mesage == true
142
+ end
143
+
132
144
  # 解析消息来源
133
145
  #
134
146
  # 特殊账户/群聊/公众号/用户
@@ -155,9 +167,10 @@ module WeChat::Bot
155
167
  # - 1: Text 文本消息
156
168
  # - 3: Image 图片消息
157
169
  # - 34: Voice 语言消息
170
+ # - 37: 验证消息
158
171
  # - 42: BusinessCard 名片消息
159
172
  # - 47: Emoticon 微信表情
160
- # - 49: ShareLink 分享链接消息
173
+ # - 49: ShareCard 分享链接消息
161
174
  # - 62: ShortVideo 短视频消息
162
175
  # - 1000: System 系统消息
163
176
  # - Unkown 未知消息
@@ -171,6 +184,8 @@ module WeChat::Bot
171
184
  Message::Kind::Image
172
185
  when 34
173
186
  Message::Kind::Voice
187
+ when 37
188
+ Message::Kind::Verify
174
189
  when 42
175
190
  Message::Kind::BusinessCard
176
191
  when 62
@@ -178,7 +193,7 @@ module WeChat::Bot
178
193
  when 47
179
194
  Message::Kind::Emoticon
180
195
  when 49
181
- Message::Kind::ShareLink
196
+ Message::Kind::ShareCard
182
197
  when 10000
183
198
  Message::Kind::System
184
199
  else
@@ -190,6 +205,9 @@ module WeChat::Bot
190
205
  #
191
206
  # - `:message` 用户消息
192
207
  # - `:text` 文本消息
208
+ # - `:image` 图片消息
209
+ # - `:voice` 语音消息
210
+ # - `:short_video` 短视频消息
193
211
  # - `:group` 群聊消息
194
212
  # - `:at_message` @ 消息
195
213
  #
@@ -199,8 +217,10 @@ module WeChat::Bot
199
217
  @events << @kind
200
218
  @events << @source
201
219
 
220
+ @at_mesage = false
202
221
  if @source == :group && @raw["Content"] =~ /@([^\s]+)\s+(.*)/
203
222
  @events << :at_message
223
+ @at_mesage = true
204
224
  end
205
225
  end
206
226
 
@@ -223,8 +243,8 @@ module WeChat::Bot
223
243
  end
224
244
 
225
245
  def parse_share
246
+ # TODO: 完成解析
226
247
  data = MultiXml.parse(@message)
227
-
228
248
  end
229
249
 
230
250
  # 解析用户的群消息
@@ -1,5 +1,5 @@
1
1
  module WeChat::Bot::MessageData
2
- class ShareLink
2
+ class ShareCard
3
3
  def self.parse(raw)
4
4
  self.new(raw)
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module WeChat
2
2
  module Bot
3
- VERSION = "0.1.0.alpha"
3
+ VERSION = '0.1.3'.freeze
4
4
  end
5
5
  end
@@ -1 +1,3 @@
1
- require "wechat/bot"
1
+ # frozen_string_literal: true
2
+
3
+ require 'wechat/bot'
@@ -21,9 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
+ spec.required_ruby_version = ">= 2.1.0"
25
+
24
26
  spec.add_development_dependency "bundler", "~> 1.14"
25
27
  spec.add_development_dependency "rake", "~> 10.0"
26
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "rubocop", "~> 0.53.0"
27
30
  spec.add_development_dependency "webmock"
28
31
  spec.add_development_dependency "awesome_print"
29
32
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wechat-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.alpha
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - icyleaf
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-23 00:00:00.000000000 Z
11
+ date: 2018-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.53.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.53.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: webmock
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -143,13 +157,12 @@ executables: []
143
157
  extensions: []
144
158
  extra_rdoc_files: []
145
159
  files:
160
+ - ".circleci/config.yml"
146
161
  - ".gitignore"
147
162
  - ".rspec"
148
163
  - ".rubocop.yml"
149
164
  - ".ruby-gemset"
150
165
  - ".ruby-version"
151
- - ".travis.yml"
152
- - ".vscode/launch.json"
153
166
  - ".yardopts"
154
167
  - CODE_OF_CONDUCT.md
155
168
  - Gemfile
@@ -165,16 +178,16 @@ files:
165
178
  - lib/wechat/bot/contact.rb
166
179
  - lib/wechat/bot/contact_list.rb
167
180
  - lib/wechat/bot/core.rb
181
+ - lib/wechat/bot/exception.rb
168
182
  - lib/wechat/bot/ext/wechat_emoji_string.rb
169
183
  - lib/wechat/bot/handler.rb
170
184
  - lib/wechat/bot/handler_list.rb
171
- - lib/wechat/bot/helper.rb
172
185
  - lib/wechat/bot/http/adapter/js.rb
173
186
  - lib/wechat/bot/http/adapter/xml.rb
174
187
  - lib/wechat/bot/http/session.rb
175
188
  - lib/wechat/bot/logger.rb
176
189
  - lib/wechat/bot/message.rb
177
- - lib/wechat/bot/message_data/share_link.rb
190
+ - lib/wechat/bot/message_data/share_card.rb
178
191
  - lib/wechat/bot/pattern.rb
179
192
  - lib/wechat/bot/version.rb
180
193
  - lib/wechat_bot.rb
@@ -191,15 +204,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
204
  requirements:
192
205
  - - ">="
193
206
  - !ruby/object:Gem::Version
194
- version: '0'
207
+ version: 2.1.0
195
208
  required_rubygems_version: !ruby/object:Gem::Requirement
196
209
  requirements:
197
- - - ">"
210
+ - - ">="
198
211
  - !ruby/object:Gem::Version
199
- version: 1.3.1
212
+ version: '0'
200
213
  requirements: []
201
214
  rubyforge_project:
202
- rubygems_version: 2.6.12
215
+ rubygems_version: 2.7.3
203
216
  signing_key:
204
217
  specification_version: 4
205
218
  summary: WeChat Bot for Ruby
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.0
5
- before_install: gem install bundler -v 1.14.6
@@ -1,65 +0,0 @@
1
- {
2
- "version": "0.2.0",
3
- "configurations": [
4
- {
5
- "name": "Rake",
6
- "type": "Ruby",
7
- "request": "launch",
8
- "cwd": "${workspaceRoot}",
9
- "program": "${workspaceRoot}/vendor/rake",
10
- "useBundler": true,
11
- "args": [
12
- "bot"
13
- ]
14
- },
15
- {
16
- "name": "Listen for rdebug-ide",
17
- "type": "Ruby",
18
- "request": "attach",
19
- "cwd": "${workspaceRoot}",
20
- "remoteHost": "127.0.0.1",
21
- "remotePort": "1234",
22
- "remoteWorkspaceRoot": "${workspaceRoot}"
23
- },
24
- {
25
- "name": "Rails server",
26
- "type": "Ruby",
27
- "request": "launch",
28
- "cwd": "${workspaceRoot}",
29
- "program": "${workspaceRoot}/bin/rails",
30
- "args": [
31
- "server"
32
- ]
33
- },
34
- {
35
- "name": "RSpec - all",
36
- "type": "Ruby",
37
- "request": "launch",
38
- "cwd": "${workspaceRoot}",
39
- "program": "${workspaceRoot}/bin/rspec",
40
- "args": [
41
- "-I",
42
- "${workspaceRoot}"
43
- ]
44
- },
45
- {
46
- "name": "RSpec - active spec file only",
47
- "type": "Ruby",
48
- "request": "launch",
49
- "cwd": "${workspaceRoot}",
50
- "program": "${workspaceRoot}/bin/rspec",
51
- "args": [
52
- "-I",
53
- "${workspaceRoot}",
54
- "${file}"
55
- ]
56
- },
57
- {
58
- "name": "Cucumber",
59
- "type": "Ruby",
60
- "request": "launch",
61
- "cwd": "${workspaceRoot}",
62
- "program": "${workspaceRoot}/bin/cucumber"
63
- }
64
- ]
65
- }
@@ -1,2 +0,0 @@
1
- module WeChat::Bot
2
- end