# 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 'discordrb' require 'securerandom' class CheeseBot def initialize @bot = Discordrb::Bot.new( token: ENV['BOT_TOKEN'], intents: [:servers, :server_messages] ) load_commands start_bot end def run @bot.run end private def load_commands Dir["#{File.dirname(__FILE__)}/commands/**/*.rb"].each do |file| require file end Commands.constants.each do |const| cmd = Commands.const_get(const) if cmd.is_a?(Module) && cmd.respond_to?(:register) cmd.register(@bot) puts "Loaded command: #{const}" sleep(2) end end end def start_bot @bot.ready do puts "#{@bot.profile.username} is online... GIVE ME THE CHEESE." @bot.update_status("online", "We're so back.", nil, 0, false, 0) end @bot.server_create do |event| server = event.server bot_profile = server.bot # Prevent spam on restart # Check if the bot joined a server in the last 60 seconds next if bot_profile.joined_at && (Time.now - bot_profile.joined_at) > 60 # Try system channel first. # If nil or no permissions, search text channels. channel = server.system_channel unless channel && bot_profile.permission?(:send_messages, channel) channel = server.text_channels.find { |c| bot_profile.permission?(:send_messages, c) } end next unless channel random_color = ("0x" + Random.bytes(3).unpack1('H*')).to_i(16) channel.send_embed do |embed| embed.title = "cheeseBot has joined!" embed.description = "What now?" embed.color = random_color embed.timestamp = Time.now embed.add_field(name: "Well...", value: "You can start with the /help command!") embed.add_field(name: "And then?", value: "Start trying out the rest of commands!") embed.add_field(name: "Sounds good!", value: "We hope you enjoy cheeseBot! Stay cheesy :)") embed.footer = Discordrb::Webhooks::EmbedFooter.new( text: "Be advised this bot automatically sends DMs when detected. Use /blacklist to not receive DMs." ) end end end end