aniview 1.1.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|