Big Update
This commit is contained in:
174
bot.rb
Normal file
174
bot.rb
Normal file
@@ -0,0 +1,174 @@
|
||||
require 'discordrb'
|
||||
require 'open-uri'
|
||||
require 'json'
|
||||
require 'dotenv/load'
|
||||
|
||||
TOKEN = ENV['BOT_TOKEN']
|
||||
bot = Discordrb::Bot.new(token: TOKEN)
|
||||
|
||||
# Help command
|
||||
bot.message(content: '!help') do |event|
|
||||
embed = Discordrb::Webhooks::Embed.new(
|
||||
title: 'Available Categories',
|
||||
description: 'To get help for a specific category, use `!help-category_name`. (everything needs to be in lower case.)',
|
||||
color: 800080
|
||||
)
|
||||
embed.add_field(name: 'help-fun', value: 'Fun commands')
|
||||
embed.add_field(name: 'help-mod', value: 'Mod commands')
|
||||
# Add more categories as needed
|
||||
|
||||
event.channel.send_embed('', embed)
|
||||
end
|
||||
|
||||
# Fun help command
|
||||
bot.message(content:('!help-fun')) do |event|
|
||||
# Provide help for fun commands in this category
|
||||
event.respond("Here are the fun commands: !joke, !sploot, !roast, !dogfact, !rps, !shitpost")
|
||||
end
|
||||
|
||||
# Mod help command
|
||||
bot.message(content:('!help-mod')) do |event|
|
||||
# Provide help for mod commands in this category
|
||||
event.respond("Here are the mod commands: !kick @user, !purge <num>")
|
||||
end
|
||||
# End of help command
|
||||
|
||||
|
||||
# Simple joke command.
|
||||
bot.message(content: '!joke') do |event|
|
||||
begin
|
||||
response = JSON.parse(open('https://v2.jokeapi.dev/joke/Any?type=twopart').read)
|
||||
setup = response['setup']
|
||||
punchline = response['delivery']
|
||||
event.respond(setup)
|
||||
event.respond(punchline)
|
||||
rescue StandardError => e
|
||||
event.respond("Sorry, I couldn't fetch a joke at the moment. Please try again later.")
|
||||
puts "Error fetching joke: #{e.message}"
|
||||
end
|
||||
end
|
||||
# End of Joke Command.
|
||||
|
||||
# Sploot
|
||||
bot.message(content: '!sploot') do |event|
|
||||
# You can replace this URL with any other source of sploot images.
|
||||
sploot_image_url = 'https://cdn.discordapp.com/attachments/1030188681472000120/1152930346229301338/YUVfoERh3CiqXUdc9a9qwZ9paHWPf4GETsIslDBExFqsRVGds9pk9MicwErTq1N8sowFpUyO5Q9oVgs640-nd-v1.png'
|
||||
|
||||
event.respond(sploot_image_url)
|
||||
end
|
||||
# End of Sploot Command
|
||||
|
||||
# Roast command.
|
||||
bot.message(content: '!roast') do |event|
|
||||
roasts = [
|
||||
"You must be a parking ticket, because you've got 'Fine' written all over you.",
|
||||
"If you were any more inbred, you'd be a sandwich.",
|
||||
"I'd say you're dumb as a rock, but at least a rock can serve a purpose.",
|
||||
"Is your ass jealous of the amount of shit that comes out of your mouth?",
|
||||
"You're not pretty enough to be this stupid."
|
||||
]
|
||||
event.respond(roasts.sample)
|
||||
end
|
||||
|
||||
# Kick Command
|
||||
bot.message(content: /^!kick\s<@(\d+)>$/) do |event|
|
||||
user_id = event.content.match(/^!kick\s<@(\d+)>$/)[1].to_i
|
||||
|
||||
# Check if the user has the necessary permissions to kick members
|
||||
if event.author.permission?(:kick_members)
|
||||
begin
|
||||
user_to_kick = event.server.member(user_id)
|
||||
user_to_kick.kick
|
||||
event.respond("Successfully kicked <@#{user_id}>.")
|
||||
rescue StandardError => e
|
||||
event.respond("Error: #{e.message}")
|
||||
end
|
||||
else
|
||||
event.respond("You do not have permission to kick members.")
|
||||
end
|
||||
end
|
||||
# End of the kick command
|
||||
|
||||
# Ping Command
|
||||
bot.message(content: '!ping') do |event|
|
||||
start_time = Time.now
|
||||
msg = event.respond('Pong!')
|
||||
end_time = Time.now
|
||||
|
||||
ping = ((end_time - start_time) * 1000).to_i
|
||||
msg.edit("Pong! Latency is #{ping} ms.")
|
||||
end
|
||||
# End of ping command.
|
||||
|
||||
# Purge Command.
|
||||
bot.message(content: /^!purge (\d{1,2})$/) do |event|
|
||||
num_to_delete = event.message.content.match(/^!purge (\d{1,2})$/)[1].to_i
|
||||
|
||||
if num_to_delete >= 1 && num_to_delete <= 100
|
||||
event.channel.prune(num_to_delete + 1) # Adding 1 to also delete the command message
|
||||
else
|
||||
event.respond("Please specify a number between 1 and 100.")
|
||||
end
|
||||
end
|
||||
# End of Purge Command.
|
||||
|
||||
# Dogfact Command.
|
||||
def fetch_dog_fact
|
||||
url = URI.parse('https://dog-api.kinduff.com/api/facts')
|
||||
response = Net::HTTP.get(url)
|
||||
JSON.parse(response)['facts'].first
|
||||
end
|
||||
|
||||
bot.message(content: /^!dogfact$/) do |event|
|
||||
dog_fact = fetch_dog_fact
|
||||
event.respond("#{dog_fact}")
|
||||
end
|
||||
# End of Dogfact
|
||||
|
||||
# RPS Command.
|
||||
valid_choices = ['rock', 'paper', 'scissors']
|
||||
|
||||
bot.message(content: /^!rps (rock|paper|scissors)$/) do |event|
|
||||
user_choice = event.message.content.match(/^!rps (rock|paper|scissors)$/)[1]
|
||||
|
||||
if valid_choices.include?(user_choice)
|
||||
bot_choice = valid_choices.sample
|
||||
|
||||
result = case [user_choice, bot_choice]
|
||||
when ['rock', 'scissors'], ['paper', 'rock'], ['scissors', 'paper']
|
||||
"You win!"
|
||||
when ['scissors', 'rock'], ['rock', 'paper'], ['paper', 'scissors']
|
||||
"I win!"
|
||||
else
|
||||
"It's a tie!"
|
||||
end
|
||||
|
||||
event.respond("You chose #{user_choice}, I chose #{bot_choice}. #{result}")
|
||||
else
|
||||
event.respond("Please choose either rock, paper, or scissors!")
|
||||
end
|
||||
end
|
||||
# End of RPS command
|
||||
|
||||
# Begining of the Shitpost command.
|
||||
bot.message(content: '!shitpost') do |event|
|
||||
begin
|
||||
uri = URI.parse('https://api.thedailyshitpost.net/random')
|
||||
response = Net::HTTP.get_response(uri)
|
||||
|
||||
if response.is_a?(Net::HTTPSuccess)
|
||||
meme_json = JSON.parse(response.body)
|
||||
title = meme_json['title']
|
||||
image_url = meme_json['url']
|
||||
event.respond("#{title}: #{image_url}")
|
||||
else
|
||||
event.respond("Sorry, I couldn't fetch a meme at the moment. 99% chance that ratelimit or Shitpost API dead.")
|
||||
end
|
||||
rescue StandardError => e
|
||||
event.respond("An error occurred: #{e.message}")
|
||||
end
|
||||
end
|
||||
# End of the Shitpost command.
|
||||
|
||||
bot.run
|
||||
|
||||
Reference in New Issue
Block a user