This commit is contained in:
Purplebored
2023-09-26 18:02:50 +02:00
7 changed files with 184 additions and 609 deletions

490
.gitignore vendored
View File

@@ -1,484 +1,6 @@
# Created by https://www.toptal.com/developers/gitignore/api/csharp,rider
# Edit at https://www.toptal.com/developers/gitignore?templates=csharp,rider
### Csharp ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
### Rider ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
# Shit i add.
.vscode
.idea
# End of https://www.toptal.com/developers/gitignore/api/csharp,rider
.env
bot.lua
deps
lit.exe
luvi.exe
luvit.exe

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

View File

@@ -1,66 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Revolt.Net" Version="0.1.0" />
<PackageReference Include="Revolt.Net.Commands" Version="0.1.1" />
<PackageReference Include="Revolt.Net.Core" Version="0.1.1" />
<PackageReference Include="Revolt.Net.Rest" Version="0.1.0" />
<PackageReference Include="Revolt.Net.WebSocket" Version="0.1.0" />
<PackageReference Include="RevoltSharp" Version="6.6.4" />
<PackageReference Include="RevoltSharp.Commands" Version="1.1.3" />
<PackageReference Include="RevoltSharp.InstanceAdmin" Version="1.0.1" />
</ItemGroup>
<ItemGroup>
<Content Include=".git\config" />
<Content Include=".git\description" />
<Content Include=".git\HEAD" />
<Content Include=".git\hooks\applypatch-msg.sample" />
<Content Include=".git\hooks\commit-msg.sample" />
<Content Include=".git\hooks\fsmonitor-watchman.sample" />
<Content Include=".git\hooks\post-update.sample" />
<Content Include=".git\hooks\pre-applypatch.sample" />
<Content Include=".git\hooks\pre-commit.sample" />
<Content Include=".git\hooks\pre-merge-commit.sample" />
<Content Include=".git\hooks\pre-push.sample" />
<Content Include=".git\hooks\pre-rebase.sample" />
<Content Include=".git\hooks\pre-receive.sample" />
<Content Include=".git\hooks\prepare-commit-msg.sample" />
<Content Include=".git\hooks\push-to-checkout.sample" />
<Content Include=".git\hooks\update.sample" />
<Content Include=".git\index" />
<Content Include=".git\info\exclude" />
<Content Include=".git\logs\HEAD" />
<Content Include=".git\logs\refs\heads\master" />
<Content Include=".git\logs\refs\remotes\origin\HEAD" />
<Content Include=".git\objects\pack\pack-0283571bb8bff910a6b21cf390dae1884ff16739.idx" />
<Content Include=".git\objects\pack\pack-0283571bb8bff910a6b21cf390dae1884ff16739.pack" />
<Content Include=".git\packed-refs" />
<Content Include=".git\refs\heads\master" />
<Content Include=".git\refs\remotes\origin\HEAD" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\.gitignore" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\encodings.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\indexLayout.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\projectSettingsUpdater.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\vcs.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\workspace.xml" />
</ItemGroup>
<ItemGroup>
<Folder Include=".git\objects\info\" />
<Folder Include=".git\refs\tags\" />
</ItemGroup>
</Project>

View File

@@ -1,25 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34031.279
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Chrobry", "Chrobry.csproj", "{5F72A41D-651C-45E0-A377-5F04BC7F0E4D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {570C625E-26DC-4793-998A-10733E2600CD}
EndGlobalSection
EndGlobal

View File

@@ -208,7 +208,7 @@ If you develop a new program, and you want it to be of the greatest possible use
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
Chrobry
Chrobry-Discord
Copyright (C) 2023 Purplebored
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.
@@ -221,7 +221,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
Chrobry Copyright (C) 2023 Purplebored
Chrobry-Discord Copyright (C) 2023 Purplebored
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.

View File

@@ -1,33 +1,3 @@
# Chrobry
# Chrobry-Discord
A king among revolt bots 👑
![Chrobry(1).png](Assets/Chrobry(1).png)
## Features
- [x] Ban, Unban, Kick Command.
- [x] Open source
- [x] NSFW Commands
- [x] Fun Commands
## Features which gonna be added in the future.
- [ ] Music Commands.
- [ ] Better Mod commands
- [ ] Warn system
- [ ] Economy System.
# License
This project is licensed under the terms of the GPL 3.0 license.
## Contributing
Contributions to this project are welcome! Simply fork the repository and create a pull request with your proposed changes. preferably also create a issue on codeberg first.
Truly a kind among Discord bots 👑

174
bot.rb Normal file
View 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