File Coverage

blib/lib/Bot/Backbone/SendPolicy.pm
Criterion Covered Total %
statement 5 5 100.0
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 7 7 100.0


line stmt bran cond sub pod time code
1             package Bot::Backbone::SendPolicy;
2             $Bot::Backbone::SendPolicy::VERSION = '0.160630';
3 4     4   1801 use v5.10;
  4         10  
4 4     4   15 use Moose::Role;
  4         6  
  4         22  
5              
6             # ABSTRACT: Define policies to prevent flooding and other bot no-nos
7              
8              
9             has bot => (
10                 is => 'ro',
11                 isa => 'Bot::Backbone::Bot',
12                 required => 1,
13                 weak_ref => 1,
14             );
15              
16              
17             requires 'allow_send';
18              
19             1;
20              
21             __END__
22            
23             =pod
24            
25             =encoding UTF-8
26            
27             =head1 NAME
28            
29             Bot::Backbone::SendPolicy - Define policies to prevent flooding and other bot no-nos
30            
31             =head1 VERSION
32            
33             version 0.160630
34            
35             =head1 SYNOPSIS
36            
37             package MyBot;
38             use v5.14;
39             use Bot::Backbone;
40            
41             # This policy prevents the bot from sending more than once every 1.5 seconds
42             send_policy no_flooding => (
43             MinimumInterval => { interval => 1.5 },
44             );
45            
46             # This policy does the same, but discards messages coming too fast
47             send_policy no_flooding_with_prejedice => (
48             MinimumInterval => { interval => 1.5, discard => 1 };
49             );
50            
51             # This policy discards messages repeated within 5 minutes
52             send_policy dont_repeat_yourself => (
53             MinimumRepeatInterval => { interval => 5*60, discard => 1 };
54             );
55            
56             service jabber_chat => (
57             service => 'JabberChat',
58             # your other settings...
59             send_policy => 'no_flooding',
60             );
61            
62             service group_foo => (
63             service => 'GroupChat',
64             chat => 'jabber_chat',
65             group => 'foo',
66             # your other settings...
67             send_policy => 'no_flooding_with_prejudice',
68             );
69            
70             # Policy that is shared
71             my $do_not_repeat = [
72             Bot::Backbone::SendPolicy::MinimumRepeatInterval->new(
73             interval => 300, # 5 * 60
74             discar => 1,
75             ),
76             ];
77            
78             service wikipedia => (
79             service => '.Wikipedia',
80             chat => 'group_foo',
81             # your other settings...
82             send_policies => $do_not_repeat,
83             );
84            
85             service google_search => (
86             service => 'GoogleSearch',
87             chat => 'group_foo',
88             # your other settings...
89             send_policies => $do_not_repeat,
90             );
91            
92             =head1 DESCRIPTION
93            
94             Bots are fun and all, but they can easily become annoying. These controls for
95             preventing a bot from sending too often or repeating itself too frequently can
96             help to minimize that annoyance.
97            
98             The purpose of the send policy framework is to allow the bot maintainer to set
99             policies against any service that may call C<send_message>. The policy set
100             against that service may delay any message being sent, cause a message to be
101             discarded, or alter the message.
102            
103             The framework is designed to be extensible with a couple very useful policies
104             being provided with the backbone framework.
105            
106             See L<Bot::Backbone::SendPolicy::MinimumInterval> and
107             L<Bot::Backbone::SendPolicy::MinimumRepeatInterval>. See L<Bot::Backbone> and
108             L<Bot::Backbone::Service> for more information on how send policies are defined
109             and applied.
110            
111             The rest of this docuemntation describes how to build a send policy
112             implementation.
113            
114             =head1 ATTRIBUTES
115            
116             =head2 bot
117            
118             This is a back reference to the bot.
119            
120             =head1 REQUIRED METHODS
121            
122             =head2 allow_send
123            
124             my $send_policy = $policy->allow_send({
125             text => 'some message',
126             ...
127             });
128            
129             Given a set of options passed to the C<send_message> method of
130             L<Bot::Backbone::Service::Role::Chat>, return a hash reference containing the
131             instrucitons on what to do with that message. The C<allow_send> method may also
132             modify the passed in options to alter the message being posted.
133            
134             The result may contain the following keys:
135            
136             =over
137            
138             =item allow
139            
140             This is a boolean value. If true, the message will be delivered to the chat. If
141             it is false, the message is immediately discarded.
142            
143             This must be set. If not set, an exception will be thrown.
144            
145             =item after
146            
147             This is a numeric value that contains a number of fractional sections to wait
148             utnil the message should be delivered. The message will be put on hold and then
149             delivered after that amount of wait time has passed.
150            
151             =back
152            
153             =head1 AUTHOR
154            
155             Andrew Sterling Hanenkamp <hanenkamp@cpan.org>
156            
157             =head1 COPYRIGHT AND LICENSE
158            
159             This software is copyright (c) 2016 by Qubling Software LLC.
160            
161             This is free software; you can redistribute it and/or modify it under
162             the same terms as the Perl 5 programming language system itself.
163            
164             =cut
165