fuck_bot 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dea2de9dece0ecffd84127b26187af66708b568a
4
- data.tar.gz: 61406bc049e9c053b7d953f7bd43db5fd0fb0de2
3
+ metadata.gz: ea66261af7876ae715afea65f3c98b99204de85b
4
+ data.tar.gz: c6ff9fa8435f4bd4cc2452a1f3ee26533834e5c9
5
5
  SHA512:
6
- metadata.gz: bf0907d0a34d9756800ae4ece2f245ec213bb2e84fab2bca08f6286b51aa496e74ba83f02ec0cbadd276643d9e171c33fba5490bf4246530dcffa53a4b122fbc
7
- data.tar.gz: 9320a1325532eba10268b4f791d3ccdebee618761c5935b334e2a3ab22c56daf09899a392c47b1ba088ce81abe374def3e4394597a63ea8a566cff105611e7c2
6
+ metadata.gz: 41efe5b7638cb87b28ef9797950aa95075b7c61c6322fd7033f50115a2c7df76a976d3045298d96a76303fa38bf85ff00b3bf78c9e1d6016f8ccd11b4fd071ae
7
+ data.tar.gz: 4088661f92a1a18a622382043b9437b29ac8f82388e278aecd0495aae5fb23201e855cc39baa80cd2887c0d76d6dbf8160e72acdc4045997318f7461908050c3
data/README.md CHANGED
@@ -6,13 +6,24 @@
6
6
 
7
7
  Slack bot to watch your language.
8
8
 
9
+ <img src='https://raw.githubusercontent.com/droptheplot/fuck_bot/master/screenshot.png' width='480'>
10
+
9
11
  ## Installation
10
12
 
11
13
  * Install gem: `gem install fuck_bot`.
12
14
  * Create bot ([https://slack.com/apps/A0F7YS25R-bots](https://slack.com/apps/A0F7YS25R-bots)).
13
15
  * Choose the name (`fuck_bot` or whatever you want).
14
- * Copy API Token (e.g. xoxb-29512306146-LT8dwEeZQWLNWZmN9xs0m9zj).
15
- * Run: `bundle exec fuck_bot xoxb-29512306146-LT8dwEeZQWLNWZmN9xs0m9zj`
16
+ * Copy API Token (e.g. `xoxb-29512306146-LT8dwEeZQWLNWZmN9xs0m9zj`).
17
+ * Run: `fuck_bot xoxb-29512306146-LT8dwEeZQWLNWZmN9xs0m9zj`
18
+
19
+ ## Usage
20
+
21
+ ```ruby
22
+ fuck_bot [token] [store]
23
+ ```
24
+
25
+ * **[token]** - Slack Bot token. (e.g. `xoxb-29512306146-LT8dwEeZQWLNWZmN9xs0m9zj`)
26
+ * **[store]** - Path to `.pstore` file to store statistics. Default: `~/fuck_bot.pstore`
16
27
 
17
28
  ## Contributing
18
29
 
@@ -2,6 +2,11 @@
2
2
 
3
3
  require 'fuck_bot'
4
4
 
5
+ params = {
6
+ token: ARGV[0],
7
+ store: ARGV[1]
8
+ }.delete_if { |_, v| v.nil? }
9
+
5
10
  EM.run do
6
- FuckBot::EventMachine.new(token: ARGV[0]).run
11
+ FuckBot::Client.new(params).run
7
12
  end
@@ -1,6 +1,45 @@
1
1
  en:
2
2
  - fuck
3
+ - fuckin
4
+ - fucking
3
5
  - shit
6
+ - ass
7
+ - anal
8
+ - boobs
9
+ - tit
10
+ - tits
11
+ - titty
12
+ - butt
13
+ - cunt
14
+ - dick
15
+ - faggot
16
+ - blowjob
17
+ - bullshit
18
+ - butthole
19
+ - whore
4
20
  ru:
5
21
  - хуй
22
+ - хуйня
23
+ - хуило
24
+ - хуйло
25
+ - нихуя
26
+ - дохуя
27
+ - охуеть
6
28
  - пиздец
29
+ - пизда
30
+ - пиздить
31
+ - спиздить
32
+ - ебать
33
+ - наебать
34
+ - заебать
35
+ - заебал
36
+ - заебись
37
+ - блядь
38
+ - блядки
39
+ - блядовать
40
+ - блядство
41
+ - мудак
42
+ - мудило
43
+ - уебок
44
+ - уебан
45
+ - выблядок
@@ -6,8 +6,9 @@ require 'oj'
6
6
  require 'yaml'
7
7
 
8
8
  require 'fuck_bot/dictionary'
9
- require 'fuck_bot/event_machine'
9
+ require 'fuck_bot/client'
10
10
  require 'fuck_bot/message_resolver'
11
+ require 'fuck_bot/store'
11
12
 
12
13
  Oj.default_options = { mode: :compat }
13
14
 
@@ -1,10 +1,11 @@
1
1
  module FuckBot
2
- class EventMachine
3
- attr_reader :token, :user, :url, :ws
2
+ class Client
3
+ attr_reader :token, :user, :url, :ws, :store
4
4
 
5
5
  def initialize(options = {})
6
6
  @token = options.fetch(:token, ENV['FUCK_BOT_TOKEN'])
7
7
  @logger = options.fetch(:logger, Logger.new(STDOUT))
8
+ @store = FuckBot::Store.new(options[:store])
8
9
 
9
10
  rtm_start
10
11
  end
@@ -1,8 +1,13 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
+
1
4
  module FuckBot
2
5
  class MessageResolver
3
- def initialize(data, event_machine)
6
+ BAD_WORD_RESPONSE = "Watch your language, <@%s>! «%s» is a bad word!".freeze
7
+
8
+ def initialize(data, client)
4
9
  @data = data
5
- @event_machine = event_machine
10
+ @client = client
6
11
  end
7
12
 
8
13
  def bad
@@ -10,7 +15,17 @@ module FuckBot
10
15
 
11
16
  return unless found_bad_word
12
17
 
13
- send_response("Watch your language! «#{found_bad_word}» is a bad word!")
18
+ @client.store.increment(@data['user']).save
19
+
20
+ send_response(
21
+ format(BAD_WORD_RESPONSE, @data['user'], found_bad_word)
22
+ )
23
+ end
24
+
25
+ def stats
26
+ return unless stats?
27
+
28
+ send_response(@client.store.to_stats)
14
29
  end
15
30
 
16
31
  def ping
@@ -20,10 +35,10 @@ module FuckBot
20
35
  end
21
36
 
22
37
  def call
23
- return unless text_message?
38
+ return unless text_message? && !self?
24
39
 
25
40
  rules.each do |rule|
26
- public_send(rule)
41
+ break if public_send(rule)
27
42
  end
28
43
  end
29
44
 
@@ -34,15 +49,23 @@ module FuckBot
34
49
  end
35
50
 
36
51
  def text_message?
37
- @data['type'] == 'message' && !@data['text'].empty?
52
+ @data['type'] == 'message' && !@data['text'].to_s.empty?
53
+ end
54
+
55
+ def stats?
56
+ @data['text'] == "<@#{@client.user['id']}>: stats"
38
57
  end
39
58
 
40
59
  def ping?
41
- @data['text'] == "<@#{@event_machine.user['id']}>: ping"
60
+ @data['text'] == "<@#{@client.user['id']}>: ping"
61
+ end
62
+
63
+ def self?
64
+ @data['user'] == @client.user['id']
42
65
  end
43
66
 
44
67
  def find_bad_word
45
- text = @data['text'].downcase
68
+ text = @data['text'].mb_chars.downcase.to_s
46
69
 
47
70
  FuckBot::Dictionary.instance.words.find do |word|
48
71
  text.include?(word)
@@ -50,7 +73,7 @@ module FuckBot
50
73
  end
51
74
 
52
75
  def send_response(text)
53
- @event_machine.ws.send(
76
+ @client.ws.send(
54
77
  Oj.dump(
55
78
  id: generate_id,
56
79
  type: :message,
@@ -0,0 +1,43 @@
1
+ require 'pstore'
2
+
3
+ module FuckBot
4
+ class Store
5
+ STATS_RESPONSE = '<@%s>: %s'.freeze
6
+
7
+ attr_accessor :data
8
+
9
+ def initialize(path)
10
+ path ||= File.join(Dir.home, '.fuck_bot.pstore')
11
+ @ref = PStore.new(path)
12
+
13
+ load_data
14
+ end
15
+
16
+ def save
17
+ @ref.transaction do
18
+ @ref[:data] = @data
19
+ @ref.commit
20
+ end
21
+
22
+ self
23
+ end
24
+
25
+ def increment(user_id)
26
+ @data[user_id] += 1
27
+
28
+ self
29
+ end
30
+
31
+ def to_stats
32
+ @data.sort_by { |_, v| -v }.map do |user, count|
33
+ format(STATS_RESPONSE, user, count)
34
+ end.join("\n")
35
+ end
36
+
37
+ private
38
+
39
+ def load_data
40
+ @data = @ref.transaction { @ref[:data] } || Hash.new(0)
41
+ end
42
+ end
43
+ end
@@ -1,3 +1,3 @@
1
1
  module FuckBot
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fuck_bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Novikov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-28 00:00:00.000000000 Z
11
+ date: 2016-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 2.15.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 4.2.6
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 4.2.6
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -149,9 +163,10 @@ files:
149
163
  - bin/fuck_bot
150
164
  - lib/dictionary.yml
151
165
  - lib/fuck_bot.rb
166
+ - lib/fuck_bot/client.rb
152
167
  - lib/fuck_bot/dictionary.rb
153
- - lib/fuck_bot/event_machine.rb
154
168
  - lib/fuck_bot/message_resolver.rb
169
+ - lib/fuck_bot/store.rb
155
170
  - lib/fuck_bot/version.rb
156
171
  homepage: https://github.com/droptheplot/fuck_bot
157
172
  licenses: