-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdiscord_bot.rb
60 lines (41 loc) · 1.18 KB
/
discord_bot.rb
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
# frozen_string_literal: true
require 'discordrb'
require 'logger'
require 'mlb_stats_api'
require 'redis'
require 'rufus-scheduler'
require 'sequel'
require_relative 'shared/config'
require_relative 'shared/reddit_client'
# Connect to the database immediately so that model classes can be created.
DB = Sequel.connect(
adapter: :postgres,
database: ENV.fetch('BASEBALLBOT_PG_DATABASE'),
password: ENV.fetch('BASEBALLBOT_PG_PASSWORD'),
user: ENV.fetch('BASEBALLBOT_PG_USERNAME')
)
class DiscordBot < Discordrb::Commands::CommandBot
def initialize(**)
ready { start_loop }
super
load_commands
end
def config = (@config ||= Config.new)
def db = DB
def logger = (@logger ||= Logger.new($stdout))
def reddit = (@reddit ||= RedditClient.new(self))
def redis = (@redis ||= Redis.new)
def stats_api = (@stats_api ||= MLBStatsAPI::Client.new(logger:, cache: redis))
protected
def event_loop = raise NotImplementedError
def start_loop
# Start right away
event_loop
@scheduler = Rufus::Scheduler.new
@scheduler.every('30s') { event_loop }
@scheduler.join
rescue NotImplementedError
# Nothing to loop
end
def load_commands; end
end