-vsn(1).
 
 -export([
-          start_link/0,
+          start_link/1,
           get_connection/0,
                  open_channel/0
         ]).
           handle_call/3
         ]).
 
+-define(RESTART, timer:seconds(30)).
+
 -include_lib("amqp_client/include/amqp_client.hrl").
 
 % Public-facing
-start_link() ->
-    gen_server:start_link({local, ?MODULE}, ?MODULE, none, []).
+start_link(RatelimitTableId) ->
+    gen_server:start_link({local, ?MODULE}, ?MODULE, {RatelimitTableId}, []).
 
 get_connection() ->
     gen_server:call(?MODULE, get_connection).
     amqp_connection:open_channel(Connection).
 
 % Callbacks
-init(_Args) ->
+init({RatelimitTableId}) ->
+    rate_limit:wait_and_reset(RatelimitTableId, amqp_connection, ?RESTART),
     start_link_connection().
 
 handle_call(get_connection, _From, Connection) ->
 
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).
 
 init(_) ->
+    TableId = rate_limit:create(),
     Children = [
                  {amqp_bot_connection, % Id
-                  {amqp_bot_connection, start_link, []}, % MFA
+                  {amqp_bot_connection, start_link, [TableId]}, % MFA
                   permanent,
                   5,
                   worker,