Files
cheeseBot-rewrite/src/bot.rb

96 lines
3.2 KiB
Ruby

# 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 <https://www.gnu.org/licenses/>.
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