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.
- checksums.yaml +4 -4
- data/bin/aniviewd +20 -0
- data/lib/aniview.rb +99 -47
- data/lib/aniview/client/aniclient.rb +11 -1
- data/lib/aniview/interface/animeio/animeio.rb +3 -2
- data/lib/aniview/interface/deluge/delugec.rb +13 -7
- data/lib/aniview/interface/mpv/mpvbridge.rb +80 -0
- data/lib/aniview/interface/pref/defaults.json +5 -3
- data/lib/aniview/interface/pref/pref.rb +2 -2
- data/lib/aniview/interface/pref/validate.json +3 -1
- data/lib/aniview/interface/schedule/schedule.rb +23 -3
- data/lib/aniview/interface/schedule/scheduleitem.rb +11 -1
- data/lib/aniview/interface/subscription/subscription.rb +32 -16
- data/lib/aniview/util/alogger.rb +1 -1
- data/lib/aniview/util/command.rb +2 -1
- data/lib/aniview/util/format.rb +7 -5
- data/lib/aniview/util/serializer.rb +19 -0
- data/lib/aniview/view/aiomenu.rb +2 -2
- data/lib/aniview/view/color.rb +67 -0
- data/lib/aniview/view/delugemenu.rb +4 -0
- data/lib/aniview/view/emote.rb +343 -95
- data/lib/aniview/view/menu.rb +300 -281
- data/lib/aniview/view/statusline.rb +18 -0
- data/lib/aniview/view/subscriptionmenu.rb +8 -5
- data/lib/aniviewd.rb +31 -19
- metadata +13 -8
- data/lib/aniview/interface/subscription/subscriptiondaemon.rb +0 -42
@@ -2,7 +2,7 @@ require 'fileutils'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
require_relative 'prefitem'
|
5
|
-
require_relative '../../view/
|
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
|
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
|
-
"
|
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",
|
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 =
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
|
data/lib/aniview/util/alogger.rb
CHANGED
data/lib/aniview/util/command.rb
CHANGED
@@ -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 = ""
|
data/lib/aniview/util/format.rb
CHANGED
@@ -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
|
-
|
8
|
+
"0:#{seconds}"
|
8
9
|
else
|
9
|
-
|
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
|
data/lib/aniview/view/aiomenu.rb
CHANGED
@@ -45,8 +45,8 @@ class AioMenu < Menu
|
|
45
45
|
refresh
|
46
46
|
elsif key == "enter"
|
47
47
|
|
48
|
-
@interface.watch(
|
49
|
-
|
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
|
data/lib/aniview/view/emote.rb
CHANGED
@@ -1,97 +1,345 @@
|
|
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
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
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
|
+
|