Skip to content

Commit 1403192

Browse files
committed
IIRR_15: Don't attempt to send the puzzle if the bot has been removed from the server
1 parent d5fe676 commit 1403192

5 files changed

Lines changed: 64 additions & 12 deletions

File tree

app/jobs/daily_puzzle_job.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def perform
66
puzzle = Puzzle.order("RANDOM()").first
77
return unless puzzle
88

9-
Server.all.each do |server|
9+
Server.where(active: true).each do |server|
1010
channel = server.channel
1111
next unless channel
1212

@@ -29,7 +29,7 @@ def puzzle_embed(puzzle)
2929
Discordrb::Webhooks::Embed.new(
3030
title: "Puzzle Time! 🧩",
3131
description: puzzle.question,
32-
color: 0xe60000
32+
color: 0x3498db # Blue color
3333
)
3434
end
3535

app/lib/discord/events/server_create.rb

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def handle(event)
2222
puts "No suitable channel found to add the bot to."
2323
end
2424

25-
create_server(server)
25+
create_or_update_server(server)
2626
end
2727

2828
private
@@ -42,16 +42,29 @@ def welcome_message(server_name)
4242

4343
attr_reader :bot
4444

45-
def create_server(server)
46-
# Only create a new record if it doesn't already exist
47-
return if Server.exists?(server_id: server.id)
45+
def create_or_update_server(server)
46+
# Find or create the Server record
47+
discord_server = Server.find_or_create_by(server_id: server.id) do |s|
48+
s.name = server.name
49+
s.active = true
50+
end
4851

49-
# Create the new Server record
50-
discord_server = Server.create!(
51-
server_id: server.id,
52-
name: server.name
53-
)
52+
# Update the server name if it changed
53+
discord_server.update!(name: server.name, active: true)
54+
55+
# Update or create a system channel is one is set
5456
if server.system_channel
57+
create_or_update_system_channel(discord_server)
58+
end
59+
end
60+
61+
def create_or_update_system_channel(discord_server)
62+
if discord_server.channel
63+
discord_server.channel.update!(
64+
channel_id: server.system_channel.id,
65+
name: server.system_channel.name
66+
)
67+
else
5568
discord_server.create_channel!(
5669
channel_id: server.system_channel.id,
5770
name: server.system_channel.name
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
module Discord
2+
module Events
3+
# This class listens and handles the event triggered when the bot is removed from a server.
4+
class ServerDelete
5+
def initialize(bot)
6+
@bot = bot
7+
end
8+
9+
def listen
10+
@bot.server_delete do |event|
11+
handle(event)
12+
end
13+
end
14+
15+
def handle(event)
16+
begin
17+
server_id = event.server
18+
rescue Discordrb::Errors::UnknownServer
19+
# This error is expected when the bot is removed from a server
20+
puts "Bot was removed from an unknown server"
21+
return
22+
end
23+
24+
server = Server.find_by(server_id: server_id)
25+
server&.update!(active: false)
26+
end
27+
28+
private
29+
30+
attr_reader :bot
31+
end
32+
end
33+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddActiveToServer < ActiveRecord::Migration[8.0]
2+
def change
3+
add_column :servers, :active, :boolean, default: true
4+
end
5+
end

db/schema.rb

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)