cinch-imap 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +4 -0
- data/README.md +15 -11
- data/lib/cinch/plugins/imap.rb +40 -20
- metadata +3 -3
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -14,27 +14,31 @@ The password
|
|
14
14
|
|
15
15
|
## Optional Configuration
|
16
16
|
|
17
|
-
The IMAP port. Default is 143.
|
18
17
|
### :port
|
19
|
-
|
18
|
+
The IMAP port. Default is 143.
|
20
19
|
### :ssl
|
21
|
-
|
20
|
+
Use SSL? Default is false.
|
22
21
|
### :interval
|
23
|
-
|
22
|
+
Number of seconds between polling. Default is 300.
|
24
23
|
### :mark_as_read
|
24
|
+
Sets the IMAP :Seen flag on polled messages. Default is true.
|
25
|
+
### :autostart
|
26
|
+
The bot will start polling when it joins the channel
|
25
27
|
|
26
28
|
## Commands
|
27
29
|
|
28
|
-
Enable/disable IMAP polling
|
29
30
|
!monitor on/off
|
30
|
-
|
31
|
+
Enable/disable IMAP polling
|
31
32
|
!monitor status
|
32
|
-
|
33
|
+
Outputs status information to the channel
|
33
34
|
!monitor clear
|
34
|
-
|
35
|
+
Reset the number of messages seen to 0
|
35
36
|
!monitor interval [n]
|
36
|
-
|
37
|
+
Set polling interval in seconds. Default is 300.
|
37
38
|
!monitor showconfig
|
39
|
+
Outputs configuration to channel. The password attribute is skipped.
|
40
|
+
!monitor test
|
41
|
+
Poll the IMAP mailbox
|
38
42
|
|
39
43
|
## Example Configuration
|
40
44
|
|
@@ -49,7 +53,8 @@ Outputs configuration to channel. The password attribute is skipped.
|
|
49
53
|
> c.channels = ["#mychannel"]
|
50
54
|
> c.plugins.plugins = [Cinch::Plugins::Imap]
|
51
55
|
> c.plugins.options[Cinch::Plugins::Imap] = {
|
52
|
-
|
56
|
+
:autostart => true,
|
57
|
+
> :host => 'my.imapserver.tld',
|
53
58
|
> :user => 'me@fqdn.tld',
|
54
59
|
> :password => "l3tm3out",
|
55
60
|
> :port => 993,
|
@@ -78,4 +83,3 @@ eyes only.
|
|
78
83
|
|
79
84
|
## TODO
|
80
85
|
|
81
|
-
- Figure out how to auto-start this thing
|
data/lib/cinch/plugins/imap.rb
CHANGED
@@ -4,11 +4,14 @@ module Cinch
|
|
4
4
|
module Plugins
|
5
5
|
class Imap
|
6
6
|
|
7
|
-
PLUGIN_VERSION='0.0.
|
7
|
+
PLUGIN_VERSION='0.0.8'
|
8
8
|
|
9
9
|
include Cinch::Plugin
|
10
10
|
|
11
|
-
|
11
|
+
listen_to :join
|
12
|
+
|
13
|
+
match /monitor (on|off)/, method: :monitor
|
14
|
+
match /monitor test/, method: :imap_test
|
12
15
|
match /monitor status/, method: :status
|
13
16
|
match /monitor showconfig/, method: :showconfig
|
14
17
|
match /monitor clear/, method: :clear
|
@@ -30,17 +33,22 @@ module Cinch
|
|
30
33
|
@from_rewrites = config[:from_rewrites] || {}
|
31
34
|
@messages_seen = 0
|
32
35
|
@started = Time.now
|
36
|
+
@monitor = config[:autostart] || false
|
33
37
|
end
|
34
38
|
|
35
39
|
def about(m)
|
36
40
|
m.reply "Looks like I'm on #{PLUGIN_VERSION} #{m.user.nick}"
|
37
41
|
end
|
38
42
|
|
39
|
-
def interval
|
40
|
-
@interval = seconds
|
43
|
+
def interval(m, seconds)
|
44
|
+
@interval = seconds.to_i
|
41
45
|
@monitor = @interval > 0
|
42
46
|
end
|
43
47
|
|
48
|
+
def monitor(m, option)
|
49
|
+
@monitor = option == "on"
|
50
|
+
end
|
51
|
+
|
44
52
|
def clear
|
45
53
|
@messages_seen = 0
|
46
54
|
end
|
@@ -56,14 +64,30 @@ module Cinch
|
|
56
64
|
days = ((now - @started)/(3600 * 24)).to_i
|
57
65
|
hours = ((now - @started)/3600).to_i
|
58
66
|
minutes = ((now - @started)/60).to_i
|
59
|
-
m.reply "Uptime: #{days} days, #{hours}:#{minutes} |
|
67
|
+
m.reply "Poller: #{@monitor ? 'on' : 'off'} | Uptime: #{days} days, #{hours}:#{minutes} | Interval: #{@interval.to_s} | # Seen: #{@messages_seen}"
|
60
68
|
end
|
61
69
|
|
62
70
|
def usage(m)
|
63
71
|
m.user.send "Usage: !monitor <command>"
|
64
|
-
m.user.send "Commands: on, off, status, clear, interval"
|
72
|
+
m.user.send "Commands: on, off, test, status, clear, interval <seconds>"
|
65
73
|
end
|
66
74
|
|
75
|
+
def imap_test(m)
|
76
|
+
begin
|
77
|
+
imap = imap_connect
|
78
|
+
unseen = imap.search(["UNSEEN"]).length
|
79
|
+
old = imap.search(["NOT", "NEW"]).length
|
80
|
+
m.reply "Old: #{old} Unseen: #{unseen}"
|
81
|
+
imap.disconnect
|
82
|
+
end
|
83
|
+
end
|
84
|
+
def listen(m)
|
85
|
+
background_job do
|
86
|
+
imap = imap_connect
|
87
|
+
imap_poll(m, imap)
|
88
|
+
imap.disconnect
|
89
|
+
end if (@monitor && m.user == @bot)
|
90
|
+
end
|
67
91
|
def get_messages(conn)
|
68
92
|
conn.search(["UNSEEN"]).each do |message_id|
|
69
93
|
envelope = conn.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
|
@@ -77,24 +101,22 @@ module Cinch
|
|
77
101
|
yield from, subj
|
78
102
|
end
|
79
103
|
end
|
80
|
-
|
81
104
|
def background_job
|
82
105
|
loop do
|
83
106
|
before = Time.now
|
84
107
|
yield if @monitor
|
85
|
-
|
86
|
-
sleep(
|
108
|
+
remaining = @interval - (Time.now - before)
|
109
|
+
sleep(remaining) if remaining > 0
|
87
110
|
end
|
88
111
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
get_messages(imap) do |from, subj|
|
112
|
+
def imap_connect
|
113
|
+
connection = Net::IMAP.new(@mail_host, @mail_port, @mail_ssl)
|
114
|
+
connection.login(@mail_user, @mail_password)
|
115
|
+
connection.select(@mail_folder)
|
116
|
+
return connection
|
117
|
+
end
|
118
|
+
def imap_poll(m, connection)
|
119
|
+
get_messages(connection) do |from, subj|
|
98
120
|
message_from, message_prefix = from, nil
|
99
121
|
@from_rewrites.each do |k, v|
|
100
122
|
message_from = "#{v}" if from =~ /#{k}/
|
@@ -104,8 +126,6 @@ module Cinch
|
|
104
126
|
end
|
105
127
|
m.reply "#{message_prefix} #{message_from}: #{subj}"
|
106
128
|
end
|
107
|
-
imap.disconnect
|
108
|
-
end if @monitor
|
109
129
|
end
|
110
130
|
end
|
111
131
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- windowsrefund
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-02-
|
17
|
+
date: 2011-02-14 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|