aniview 1.1.0 → 1.3.0

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.
@@ -2,7 +2,7 @@ require 'fileutils'
2
2
  require 'json'
3
3
 
4
4
  require_relative 'prefitem'
5
- require_relative '../../view/emote.rb'
5
+ require_relative '../../view/color'
6
6
  require_relative '../../util/alogger'
7
7
 
8
8
  class Pref
@@ -80,7 +80,7 @@ class Pref
80
80
  }
81
81
 
82
82
  when "color"
83
- return false if not $clr.key? destination
83
+ return false if not Color.method_defined? destination
84
84
 
85
85
  when "int"
86
86
  return false if not destination.scan(/\D/).empty? and destination.length > 1
@@ -72,6 +72,7 @@
72
72
  "title" : "any",
73
73
  "parent" : "any"
74
74
  },
75
+ "format_status" : "any",
75
76
  "deluge_config" :
76
77
  {
77
78
  "host" : "any",
@@ -88,11 +89,12 @@
88
89
  {
89
90
  "port" : "int"
90
91
  },
92
+ "set_watched_percentage" : "int",
91
93
  "log_file" : "path",
92
94
  "daemon_log_file" : "path",
93
95
  "watch_log" : "path",
94
96
  "conf_dir" : "locked",
95
- "watch_command" : "any",
97
+ "mpv_args" : "any",
96
98
  "local_anime" : "any",
97
99
  "schedule" : "any"
98
100
  }
@@ -1,7 +1,7 @@
1
- require 'base64'
2
1
  require 'fileutils'
3
2
 
4
3
  require_relative 'scheduleitem'
4
+ require_relative '../../util/serializer'
5
5
 
6
6
  class Schedule
7
7
 
@@ -22,6 +22,26 @@ class Schedule
22
22
  return @schedule
23
23
  end
24
24
 
25
+ def getAllCereal
26
+ r=""
27
+ getAll.each { |si| r+=si.cereal }
28
+ return r
29
+ end
30
+
31
+ def mergeItems items
32
+ items.each { |item|
33
+ @schedule.each { |schedule_item|
34
+ if item.id == schedule_item.id
35
+ m = [schedule_item.attributes["m"], item.attributes["m"]]
36
+ if m[0] != m[1]
37
+ schedule_item.setmatched m[1]
38
+ end
39
+ end
40
+ }
41
+ }
42
+ save
43
+ end
44
+
25
45
  def addItem item
26
46
  @schedule.delete_at 0 if @schedule[0].attributes["t"] == "no schedule"
27
47
 
@@ -50,14 +70,14 @@ class Schedule
50
70
  end
51
71
 
52
72
  def save
53
- @pref.set "schedule", Base64.encode64(Marshal.dump @schedule)
73
+ @pref.set "schedule", (Serializer.e @schedule)
54
74
  end
55
75
 
56
76
  def load
57
77
  @pref.load
58
78
  raw = @pref.get "schedule"
59
79
  if not raw == nil and raw.class == String
60
- @schedule = Marshal.load(Base64.decode64(raw))
80
+ @schedule = Serializer.d raw
61
81
  else
62
82
  empty?
63
83
  end
@@ -16,7 +16,7 @@ class ScheduleItem < Item
16
16
  }
17
17
 
18
18
  @lastseen = 0
19
- #@id = SecureRandom.uuid
19
+ @id = SecureRandom.uuid
20
20
  end
21
21
 
22
22
  def updataDir nd
@@ -41,6 +41,16 @@ class ScheduleItem < Item
41
41
 
42
42
  def setSeen
43
43
  @lastseen = Time.now.to_s
44
+ @attr["m"] = @lastseen
45
+ end
46
+
47
+ def setmatched date
48
+ @attr["m"] = date
49
+ end
50
+
51
+ def id
52
+ id = SecureRandom.uuid if @id == nil
53
+ @id
44
54
  end
45
55
 
46
56
  end
@@ -13,6 +13,10 @@ class Subscription
13
13
  @delugec = delugec
14
14
  end
15
15
 
16
+ def log s
17
+ puts "#{Time.now.to_s} [subscription] " + s
18
+ end
19
+
16
20
  def checkDaemon
17
21
  if @c.server?
18
22
  "daemon up"
@@ -21,6 +25,14 @@ class Subscription
21
25
  end
22
26
  end
23
27
 
28
+ def getLastChecked
29
+ @c.lastchecked
30
+ end
31
+
32
+ def syncMatches
33
+ @schedule.mergeItems @c.getItems
34
+ end
35
+
24
36
  def updateFeed
25
37
  begin
26
38
  @rss = SimpleRSS.parse open(@pref.get("rss_feed")["url"])
@@ -28,8 +40,8 @@ class Subscription
28
40
  rescue SocketError
29
41
  @rss = nil
30
42
 
31
- rescue
32
- @rss = nil
43
+ #rescue
44
+ # @rss = nil
33
45
 
34
46
  end
35
47
  end
@@ -38,39 +50,44 @@ class Subscription
38
50
  @rss
39
51
  end
40
52
 
41
- def getLastChecked
42
- @c.lastchecked
43
- end
44
-
45
- def match regexp
46
- updateFeed if @rss == nil
47
- return [] if @rss == nil
53
+ def match regexp, verbose=false
48
54
  re = Regexp.new regexp
49
55
  matches = []
50
56
  @rss.items.each{ |item|
57
+ #log "-> checking against #{item[:title]}" if verbose
51
58
  re.match item[:title] { matches << item }
52
59
  }
53
60
  return matches
54
61
  end
55
62
 
56
- def matchAll
63
+ def matchAll (verbose: false)
64
+ updateFeed if @rss == nil
65
+ return [] if @rss == nil
66
+
67
+ log "matching all" if verbose
68
+
57
69
  total_matches = 0
58
- getAll.each { |subs|
59
- matches = match subs.attributes["r"]
70
+ getAll.each { |subs|
71
+ log "matching #{subs.attributes["r"]}" if verbose
72
+ matches = match subs.attributes["r"], verbose
73
+ log "found #{matches.length} matches" if verbose
74
+ log "#{matches}" if verbose
75
+
60
76
  if matches.length >= 1
61
77
 
62
78
  downloaddir = @pref.parseDir(subs.attributes["p"]) + "/"
63
79
  newfile = downloaddir + matches[0][:title]
64
80
 
65
81
  next if File.exist? newfile
66
-
67
- s = @delugec.addTorrent matches[0][:link], @pref.parseDir(subs.attributes["p"])
82
+ log "set download dir to #{newfile}" if verbose
83
+ s = @delugec.addTorrent matches[0][:link], @pref.parseDir(subs.attributes["p"]), verbose: true
84
+ log "adding torrent, status #{s}" if verbose
68
85
  subs.setSeen if s
69
86
  @schedule.save
70
87
  total_matches+=1
71
-
72
88
  end
73
89
  }
90
+ log "match complete, #{total_matches} found" if verbose
74
91
  return total_matches
75
92
  end
76
93
 
@@ -82,7 +99,6 @@ class Subscription
82
99
  end
83
100
 
84
101
  def getAll
85
- @schedule.load
86
102
  @schedule.getAll
87
103
  end
88
104
 
@@ -11,7 +11,7 @@ class ALogger
11
11
 
12
12
  def log(string)
13
13
 
14
- open(@logfile, 'a') { |f| f.puts "#{Time.now.to_s} string" }
14
+ open(@logfile, 'a') { |f| f.puts "#{Time.now.to_s} #{string}" }
15
15
 
16
16
  end
17
17
 
@@ -1,11 +1,12 @@
1
1
  require 'readline'
2
+ require_relative '../view/color'
2
3
 
3
4
  class Command
4
5
  def self.read(term, prompt = "", default = "")
5
6
 
6
7
  term.bold.echo_on
7
8
 
8
- print "\033[" + String(term.rows) + ";1H"
9
+ print "\033[" + String(term.rows) + ";1H" + Color.white
9
10
  term.show_cursor
10
11
 
11
12
  Readline.completion_append_character = ""
@@ -3,11 +3,11 @@ class Format
3
3
  hours = Integer((v-(v%3600))/3600)
4
4
  minutes = Integer( ((v-(v%60))/60) - (hours * 60))
5
5
  seconds = Integer(v%60)
6
+ seconds = "0" + String(seconds) if seconds < 10
6
7
  if hours < 1 and minutes < 1
7
- return String(seconds)
8
+ "0:#{seconds}"
8
9
  else
9
- seconds = "0" + String(seconds) if seconds < 10
10
- if hours < 1
10
+ if hours < 1
11
11
  return "#{String(minutes)}:#{String(seconds)}"
12
12
  else
13
13
  minutes = "0" + String(minutes) if minutes < 10
@@ -85,7 +85,7 @@ class Format
85
85
  mode = "char"
86
86
 
87
87
  elsif mode == "$"
88
- add_to += String($emote[c]) if $emote.key?(c)
88
+ #add_to += String($emote[c]) if $emote.key?(c)
89
89
  mode = "char"
90
90
 
91
91
  else
@@ -95,6 +95,8 @@ class Format
95
95
  }
96
96
  pstr << add_to
97
97
 
98
+ buffer_char << " " if buffer_char.length == 0
99
+
98
100
  midstr = ""
99
101
  tl = 0
100
102
  pstr.each{ |s| tl += s.length }
@@ -116,6 +118,6 @@ class Format
116
118
  }
117
119
  midstr += pstr[pstr.length - 1]
118
120
 
119
- return midstr
121
+ return midstr[0..cols-1]
120
122
  end
121
123
  end
@@ -0,0 +1,19 @@
1
+ require 'base64'
2
+
3
+ class Serializer
4
+
5
+ def self.e d
6
+ Base64.strict_encode64(Marshal.dump d)
7
+ end
8
+
9
+ def self.d e
10
+ begin
11
+ Marshal.load(Base64.decode64(e))
12
+ rescue ArgumentError
13
+ {}
14
+ rescue TypeError
15
+ {}
16
+ end
17
+ end
18
+
19
+ end
@@ -45,8 +45,8 @@ class AioMenu < Menu
45
45
  refresh
46
46
  elsif key == "enter"
47
47
 
48
- @interface.watch(path)
49
- @interface.addWatched(path)
48
+ @interface.watch(@items.values[sel["out"]][sel["in"]])
49
+ #@interface.addWatched(path)
50
50
  @interface.logWatched(path)
51
51
 
52
52
  #@malanime.update(path)
@@ -0,0 +1,67 @@
1
+ class Color
2
+
3
+ def self.black
4
+ "\e[30m"
5
+ end
6
+
7
+ def self.red
8
+ "\e[31m"
9
+ end
10
+
11
+ def self.green
12
+ "\e[32m"
13
+ end
14
+
15
+ def self.yellow
16
+ "\e[33m"
17
+ end
18
+
19
+ def self.blue
20
+ "\e[34m"
21
+ end
22
+
23
+ def self.magenta
24
+ "\e[35m"
25
+ end
26
+
27
+ def self.cyan
28
+ "\e[36m"
29
+ end
30
+
31
+ def self.white
32
+ "\e[37m"
33
+ end
34
+
35
+ def self.bright_black
36
+ "\e[37m"
37
+ end
38
+
39
+ def self.bright_red
40
+ "\e[38m"
41
+ end
42
+
43
+ def self.bright_green
44
+ "\e[39m"
45
+ end
46
+
47
+ def self.bright_yellow
48
+ "\e[40m"
49
+ end
50
+
51
+ def self.bright_blue
52
+ "\e[41m"
53
+ end
54
+
55
+ def self.bright_magenta
56
+ "\e[42m"
57
+ end
58
+
59
+ def self.bright_cyan
60
+ "\e[43m"
61
+ end
62
+
63
+ def self.bright_white
64
+ "\e[44m"
65
+ end
66
+
67
+ end
@@ -33,6 +33,10 @@ class DelugeMenu < Menu
33
33
  @interface.removeTorrent(item, true)
34
34
  elsif key == "enter"
35
35
 
36
+ elsif key == "+"
37
+ newval = Command.read(@term, "mag:", "")
38
+ @interface.addTorrent newval, Dir.home + "/downloads/"
39
+
36
40
  end
37
41
  end
38
42
 
@@ -1,97 +1,345 @@
1
- #define ascii codes for color names
2
- $clr = Hash[
3
- "black" => "\e[30m", "red" => "\e[31m", "green" => "\e[32m", "yellow" => "\e[33m", "blue" => "\e[34m", "magenta" => "\e[35m", "cyan" => "\e[36m", "white" => "\e[37m",
4
- "bright_black" => "\e[37m", "bright_red" => "\e[38m", "bright_green" => "\e[39m", "bright_yellow" => "\e[40m", "bright_blue" => "\e[41m", "bright_magenta" => "\e[42m", "bright_cyan" => "\e[43m", "bright_white" => "\e[44m",
5
- ]
6
-
7
- $emote = {
8
- "amazed" => '( ゚д゚)',
9
- "a" => '( ゚д゚)',
10
- "angry" => '(#゚Д゚)',
11
- "b" => '(#゚Д゚)',
12
- "bad" => '(・A・)',
13
- "c" => '(・A・)',
14
- "bowing" => 'm(_ _)m',
15
- "d" => 'm(_ _)m',
16
- "bun" => '⊂二二二( ^ω^)二⊃',
17
- "e" => '⊂二二二( ^ω^)二⊃',
18
- "carefree" => '(´∀`)',
19
- "f" => '(´∀`)',
20
- "chinese" => '(`ハ´)',
21
- "g" => '(`ハ´)',
22
- "crying" => '( ´Д⊂ヽ',
23
- "h" => '(´Д⊂ヽ',
24
- "deflagged" => '[゚д゚]',
25
- "i" => '[゚д゚]',
26
- "deflated" => '(´・ω・`)',
27
- "j" => '(´・ω・`)',
28
- "depressed" => ' ´,_ゝ`)',
29
- "k" => '( ´,_ゝ`)',
30
- "dontknow" => '┐(`~`;)┌',
31
- "l" => '┐(`~`;)┌',
32
- "evillaugh" => '( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \',
33
- "m" => '( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \',
34
- "excitement" => 'キタ━━━━━━(゚∀゚)━━━━━━!!!!!',
35
- "n" => 'キタ━━━━━━(゚∀゚)━━━━━━!!!!!',
36
- "goofy" => '(゚∀゚)',
37
- "o" => '(゚∀゚)',
38
- "happy" => '( ゚ ヮ゚)',
39
- "p" => '( ゚ ヮ゚)',
40
- "heh" => '(´・∀・`)',
41
- "q" => '(´•∀•`)',
42
- "hooray" => '\(^o^)/',
43
- "r" => '\(^o^)/',
44
- "hugesurprise" => 'Σ(゚Д゚)',
45
- "s" => 'Σ(゚Д゚)',
46
- "impatience" => '(゚Д゚;≡;゚Д゚)',
47
- "t" => '(゚Д゚;≡;゚Д゚)',
48
- "indifferent" => '( ´_ゝ`)',
49
- "u" => '( ´_ゝ`)',
50
- "intuition" => 'm9(・∀・)',
51
- "v" => 'm9(・∀・)',
52
- "irritable" => 'ヽ(`Д´)ノ',
53
- "w" => 'ヽ(`Д´)ノ',
54
- "koi" => 'щ(゚Д゚щ)',
55
- "x" => 'щ(゚Д゚щ)',
56
- "korean" => '<`∀´>',
57
- "y" => '<`∀´>',
58
- "money" => '(・∀・)つ⑩',
59
- "z" => '(・∀・)つ⑩',
60
- "panting" => '( ´Д`)',
61
- "M" => '( ´Д`)',
62
- "peace" => 'ヽ(´ー`)ノ',
63
- "N" => 'ヽ(´ー`)ノ',
64
- "perky" => '(`・ω・´)',
65
- "O" => '(`・ω・´)',
66
- "sad" => '(´;ω;`)',
67
- "P" => '(´;ω;`)',
68
- "sarcasm" => '(・∀・)',
69
- "A" => '(・∀・)',
70
- "shocked" => 'Σ(゜д゜;)',
71
- "B" => 'Σ(゜д゜;)',
72
- "smoking" => '(´ー`)y-~~',
73
- "C" => '(´ー`)y-~~',
74
- "snorlax" => '( ̄ー ̄)',
75
- "D" => '( ̄ー ̄)',
76
- "spooked" => '(((( ;゚Д゚)))',
77
- "E" => '(((( ;゚Д゚)))',
78
- "stirring" => '(*´Д`)',
79
- "F" => '(*´Д`)',
80
- "supercilious" => 'm9(^Д^)',
81
- "G" => 'm9(^Д^)',
82
- "surprised" => '( ゚Д゚)',
83
- "H" => '( ゚Д゚)',
84
- "tfwnogf" => '(`A`)',
85
- "I" => '(`A`)',
86
- "thinking" => '(´-`).。oO',
87
- "J" => '(´-`).。oO',
88
- "unconvincing" => 'エェェ(´д`)ェェエ',
89
- "K" => 'エェェ(´д`)ェェエ',
90
- "unforeseen" => '(゚д゚)',
91
- "L" => '(゚д゚)',
92
- "_positive" => [0, 5, 13, 14, 15, 17, 37]
93
- }
94
- def positive_emote
95
- return $emote.values[$emote["_positive"][rand($emote["_positive"].length)]]
1
+ class Emote
2
+
3
+ def self.amazed
4
+ '( ゚д゚)'
5
+ end
6
+
7
+ def self.a
8
+ '( ゚д゚)'
9
+ end
10
+
11
+ def self.angry
12
+ '(#゚Д゚)'
13
+ end
14
+
15
+ def self.b
16
+ '(#゚Д゚)'
17
+ end
18
+
19
+ def self.bad
20
+ '(・A・)'
21
+ end
22
+
23
+ def self.c
24
+ '(・A・)'
25
+ end
26
+
27
+ def self.bowing
28
+ 'm(_ _)m'
29
+ end
30
+
31
+ def self.d
32
+ 'm(_ _)m'
33
+ end
34
+
35
+ def self.bun
36
+ '⊂二二二( ^ω^)二⊃'
37
+ end
38
+
39
+ def self.e
40
+ '⊂二二二( ^ω^)二⊃'
41
+ end
42
+
43
+ def self.carefree
44
+ '(´∀`)'
45
+ end
46
+
47
+ def self.f
48
+ '(´∀`)'
49
+ end
50
+
51
+ def self.chinese
52
+ '(`ハ´)'
53
+ end
54
+
55
+ def self.g
56
+ '(`ハ´)'
57
+ end
58
+
59
+ def self.crying
60
+ '( ´Д⊂ヽ'
61
+ end
62
+
63
+ def self.h
64
+ '(´Д⊂ヽ'
65
+ end
66
+
67
+ def self.deflagged
68
+ '[゚д゚]'
69
+ end
70
+
71
+ def self.i
72
+ '[゚д゚]'
73
+ end
74
+
75
+ def self.deflated
76
+ '(´・ω・`)'
77
+ end
78
+
79
+ def self.j
80
+ '(´・ω・`)'
81
+ end
82
+
83
+ def self.depressed
84
+ '( ´
85
+ end
86
+ _ゝ`)'
87
+ end
88
+
89
+ def self.k
90
+ '( ´
91
+ end
92
+ _ゝ`)'
93
+ end
94
+
95
+ def self.dontknow
96
+ '┐(`~`;)┌'
97
+ end
98
+
99
+ def self.l
100
+ '┐(`~`;)┌'
101
+ end
102
+
103
+ def self.evillaugh
104
+ '( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \'
105
+ end
106
+
107
+ def self.m
108
+ '( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \'
109
+ end
110
+
111
+ def self.excitement
112
+ 'キタ━━━━━━(゚∀゚)━━━━━━!!!!!'
113
+ end
114
+
115
+ def self.n
116
+ 'キタ━━━━━━(゚∀゚)━━━━━━!!!!!'
117
+ end
118
+
119
+ def self.goofy
120
+ '(゚∀゚)'
121
+ end
122
+
123
+ def self.o
124
+ '(゚∀゚)'
125
+ end
126
+
127
+ def self.happy
128
+ '( ゚ ヮ゚)'
129
+ end
130
+
131
+ def self.p
132
+ '( ゚ ヮ゚)'
133
+ end
134
+
135
+ def self.heh
136
+ '(´・∀・`)'
137
+ end
138
+
139
+ def self.q
140
+ '(´•∀•`)'
141
+ end
142
+
143
+ def self.hooray
144
+ '\(^o^)/'
145
+ end
146
+
147
+ def self.r
148
+ '\(^o^)/'
149
+ end
150
+
151
+ def self.hugesurprise
152
+ 'Σ(゚Д゚)'
153
+ end
154
+
155
+ def self.s
156
+ 'Σ(゚Д゚)'
157
+ end
158
+
159
+ def self.impatience
160
+ '(゚Д゚;≡;゚Д゚)'
161
+ end
162
+
163
+ def self.t
164
+ '(゚Д゚;≡;゚Д゚)'
165
+ end
166
+
167
+ def self.indifferent
168
+ '( ´_ゝ`)'
169
+ end
170
+
171
+ def self.u
172
+ '( ´_ゝ`)'
173
+ end
174
+
175
+ def self.intuition
176
+ 'm9(・∀・)'
177
+ end
178
+
179
+ def self.v
180
+ 'm9(・∀・)'
181
+ end
182
+
183
+ def self.irritable
184
+ 'ヽ(`Д´)ノ'
185
+ end
186
+
187
+ def self.w
188
+ 'ヽ(`Д´)ノ'
189
+ end
190
+
191
+ def self.koi
192
+ 'щ(゚Д゚щ)'
193
+ end
194
+
195
+ def self.x
196
+ 'щ(゚Д゚щ)'
197
+ end
198
+
199
+ def self.korean
200
+ '<`∀´>'
201
+ end
202
+
203
+ def self.y
204
+ '<`∀´>'
205
+ end
206
+
207
+ def self.money
208
+ '(・∀・)つ⑩'
209
+ end
210
+
211
+ def self.z
212
+ '(・∀・)つ⑩'
213
+ end
214
+
215
+ def self.panting
216
+ '( ´Д`)'
217
+ end
218
+
219
+ def self.M
220
+ '( ´Д`)'
221
+ end
222
+
223
+ def self.peace
224
+ 'ヽ(´ー`)ノ'
225
+ end
226
+
227
+ def self.N
228
+ 'ヽ(´ー`)ノ'
229
+ end
230
+
231
+ def self.perky
232
+ '(`・ω・´)'
233
+ end
234
+
235
+ def self.O
236
+ '(`・ω・´)'
237
+ end
238
+
239
+ def self.sad
240
+ '(´;ω;`)'
241
+ end
242
+
243
+ def self.P
244
+ '(´;ω;`)'
245
+ end
246
+
247
+ def self.sarcasm
248
+ '(・∀・)'
249
+ end
250
+
251
+ def self.A
252
+ '(・∀・)'
253
+ end
254
+
255
+ def self.shocked
256
+ 'Σ(゜д゜;)'
257
+ end
258
+
259
+ def self.B
260
+ 'Σ(゜д゜;)'
261
+ end
262
+
263
+ def self.smoking
264
+ '(´ー`)y-~~'
265
+ end
266
+
267
+ def self.C
268
+ '(´ー`)y-~~'
269
+ end
270
+
271
+ def self.snorlax
272
+ '( ̄ー ̄)'
273
+ end
274
+
275
+ def self.D
276
+ '( ̄ー ̄)'
277
+ end
278
+
279
+ def self.spooked
280
+ '(((( ;゚Д゚)))'
281
+ end
282
+
283
+ def self.E
284
+ '(((( ;゚Д゚)))'
285
+ end
286
+
287
+ def self.stirring
288
+ '(*´Д`)'
289
+ end
290
+
291
+ def self.F
292
+ '(*´Д`)'
293
+ end
294
+
295
+ def self.supercilious
296
+ 'm9(^Д^)'
297
+ end
298
+
299
+ def self.G
300
+ 'm9(^Д^)'
301
+ end
302
+
303
+ def self.surprised
304
+ '( ゚Д゚)'
305
+ end
306
+
307
+ def self.H
308
+ '( ゚Д゚)'
309
+ end
310
+
311
+ def self.tfwnogf
312
+ '(`A`)'
313
+ end
314
+
315
+ def self.I
316
+ '(`A`)'
317
+ end
318
+
319
+ def self.thinking
320
+ '(´-`).。oO'
321
+ end
322
+
323
+ def self.J
324
+ '(´-`).。oO'
325
+ end
326
+
327
+ def self.unconvincing
328
+ 'エェェ(´д`)ェェエ'
329
+ end
330
+
331
+ def self.K
332
+ 'エェェ(´д`)ェェエ'
333
+ end
334
+
335
+ def self.unforeseen
336
+ '(゚д゚)'
337
+ end
338
+
339
+ def self.L
340
+ '(゚д゚)'
341
+ end
342
+
96
343
  end
97
344
 
345
+