diff --git a/src/bot.rb b/src/bot.rb index 4ab7b7e..b129b26 100644 --- a/src/bot.rb +++ b/src/bot.rb @@ -17,17 +17,19 @@ require 'discordrb' require 'securerandom' require_relative 'events/message_check' +require_relative 'events/button_handler' class CheeseBot def initialize puts "Initializing bot..." @bot = Discordrb::Bot.new( token: ENV['BOT_TOKEN'], - intents: [:server_messages], + intents: [:server_messages] ) - puts "Registering the Message Checker..." + puts "Registering the Message Checker and Button Handler..." MessageCheck.register(@bot) + ButtonHandler.register(@bot) puts "Initializing database..." Database.setup diff --git a/src/commands/not_cheese_related/blacklist.rb b/src/commands/not_cheese_related/blacklist.rb index 06717d6..beb2a16 100644 --- a/src/commands/not_cheese_related/blacklist.rb +++ b/src/commands/not_cheese_related/blacklist.rb @@ -21,21 +21,6 @@ module Commands extend self def register(bot) - cmd_key = :blacklist - cmd_desc = "Blacklist yourself from the trigger DMs (using the command again will whitelist you.)" - - bot.register_application_command(cmd_key, cmd_desc, server_id: ENV['SERVER_ID']) - - bot.application_command(cmd_key) do |event| - added = Database.toggle_user_blacklist(event.user.id) - - if added - event.respond(content: "You have been added to the blacklist. You will no longer receive DMs.") - else - event.respond(content: "You have been removed from the blacklist. You will now receive DMs.") - end - end - cmd_key_server = :server_blacklist cmd_desc_server = "Blacklist the server from the trigger DMs (using the command again will whitelist the server.)" diff --git a/src/commands/not_cheese_related/donation.rb b/src/commands/not_cheese_related/donation.rb new file mode 100644 index 0000000..12d5a5c --- /dev/null +++ b/src/commands/not_cheese_related/donation.rb @@ -0,0 +1,32 @@ +# cheeseBot +# Copyright (C) 2026 Eri (csxkdv/nxkdv) nxkdv@thenight.club +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +module Commands + module Donation + extend self + + def register(bot) + cmd_key = :donation + cmd_desc = "Only if you can and want, of course." + + bot.register_application_command(cmd_key, cmd_desc, server_id: ENV['SERVER_ID']) + + bot.application_command(cmd_key) do |event| + event.respond(content:"[Donate a ko-fi](https://ko-fi.com/reicore) to my creator if you can, and want.") + end + end + end +end diff --git a/src/events/button_handler.rb b/src/events/button_handler.rb new file mode 100644 index 0000000..f8a926c --- /dev/null +++ b/src/events/button_handler.rb @@ -0,0 +1,31 @@ +# cheeseBot +# Copyright (C) 2026 Eri (csxkdv/nxkdv) nxkdv@thenight.club +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +require_relative '../modules/database' + +module ButtonHandler + def self.register(bot) + bot.button(custom_id: 'toggle_cheese_blacklist') do |event| + added = Database.toggle_user_blacklist(event.user.id) + + if added + event.respond(content: "You have been added to the blacklist. You will no longer receive DMs.\n(Click this button again anytime to re-enable them.)", ephemeral: true) + else + event.respond(content: "You have been removed from the blacklist. You will now receive DMs.", ephemeral: true) + end + end + end +end \ No newline at end of file diff --git a/src/events/message_check.rb b/src/events/message_check.rb index ca5f148..76962d4 100644 --- a/src/events/message_check.rb +++ b/src/events/message_check.rb @@ -14,6 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +require 'securerandom' require_relative '../modules/cheese_checker' require_relative '../modules/database' @@ -27,21 +28,39 @@ module MessageCheck event.message.react("🧀") - next if Database.server_blacklisted?(event.server.id) - next if Database.user_blacklisted?(event.user.id) + if Database.server_blacklisted?(event.server.id) + puts "[DEBUG] Ignored: Server #{event.server.name} is blacklisted." + next + end + + if Database.user_blacklisted?(event.user.id) + puts "[DEBUG] Ignored: User #{event.user.id} is blacklisted." + next + end begin - event.user.pm.send_embed do |embed| - embed.title = "Cheese Detected!" - embed.description = cheese_content - - embed.color = rand(0xFFFFFF) - embed.timestamp = Time.now - - embed.footer = Discordrb::Webhooks::EmbedFooter.new( - text: "Use /blacklist to not receive DMs anymore" + view = Discordrb::Webhooks::View.new + view.row do |r| + r.button( + label: "Toggle Blacklist", + style: :secondary, + custom_id: "toggle_cheese_blacklist" ) end + + random_color = ("0x" + Random.bytes(3).unpack1('H*')).to_i(16) + author = event.user + + embed_generated = { + title: "Cheese detected!", + description: cheese_content, + color: random_color, + timestamp: Time.now.iso8601, + footer: { text: "Click the button to stop these messages." } + } + + # send_message(content, tts, embed, attachments, allowed_mentions, message_reference, components) + event.user.pm.send_message(nil, false, [embed_generated], nil, nil, nil, view) rescue Discordrb::Errors::NoPermission puts "Could not DM user #{event.user.username} (#{event.user.id})" end