Merge pull request #23 from ElBe-Plaq/main

Removed replit directory
This commit is contained in:
ElBe 2022-12-19 13:16:58 +01:00 committed by GitHub
commit 17f26530a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 2 additions and 689 deletions

View File

@ -4,16 +4,13 @@ This is a discord.py bot template.
## How to use the template
1. Download the code from the releases tab.
2. Fill out the `config.json` file.
3. Run `pip install -r requirements.txt` in your console (the folder has to be open in you console).
3. Run `pip install -r requirements.txt` in your console (the `Bot` folder has to be open in you console).
4. Execute the `bot.py` file.
You should already have the discord bot on your server. It needs administrator and command permissions.
## Replit (OUTDATED)
### :warning: The Replit port is outdated and won't be updated until further notice.
1. Download the code from the releases tab and upload it to replit.
2. Fill out the `config.json` file and add the `token` and `appliction_id` secret.
3. Execute the `main.py` file.
### :warning: The Replit port is outdated and was removed for now.
# Support server
[disboard.org](https://disboard.org/server/1041044933290770563) /

View File

@ -1,106 +0,0 @@
'''
Functions for the discord.py Bot.
© by ElBe.
Version: 0.1.1
'''
#Imports
import json
import os
import colorama
import datetime
import re
class variables():
'''All variables used in this module.'''
standart_config_file = 'config.json'
standart_datetime_format = datetime.date.isoformat
class json_module():
def get_config(name: str, file = variables.standart_config_file):
'''Returns a value from the given/standart JSON file.'''
with open(file, 'r') as f:
return json.load(f)[name]
def write_json(data, show_text = False, file = variables.standart_config_file):
'''Writes the text to the given/standart JSON file.'''
with open(file, 'w') as f:
json.dump(data, f)
f.close()
if show_text:
print(console.log('Data ' + str(data) + ' added to ' + str(file) + '.'))
class console():
def info(text: str):
'''Returns a info text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [' + colorama.Fore.GREEN + 'INFO' + colorama.Style.RESET_ALL + '] ' + text
def error(text: str):
'''Returns a error text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [' + colorama.Fore.RED + 'ERROR' + colorama.Style.RESET_ALL + '] ' + text
def warn(text: str):
'''Returns a warn text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [' + colorama.Fore.YELLOW + 'WARNING' + colorama.Style.RESET_ALL + '] ' + text
def log(text: str):
'''Returns a log text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [LOG] ' + text
def clear():
'''Clear the console.'''
os.system('cls')
def crusor_up():
'''Changes the position of the crusor to the line above.'''
print('\x1b[1A')
def erase_line():
'''Erases the current line.'''
print('\x1b[2K')
def erase_last():
'''Erases the last line.'''
print('\x1b[1A' + '\x1b[2K' + '\x1b[1A')

View File

@ -1,3 +0,0 @@
{
"Created": 0
}

View File

@ -1,116 +0,0 @@
'''
Command creator for the discord.py Bot.
© by ElBe.
Version: 0.1.6
NOTE: Only execute once.
'''
#Imports
import command_creator
import bot_functions
class run():
def __init__(self):
#Stop command
json = {
'name': 'stop',
'type': 1,
'description': 'Stops the bot.'
}
command_creator.create_command(json)
#Help command
json = {
'name': 'help',
'type': 1,
'description': 'Shows you help about the bot.'
}
command_creator.create_command(json)
#Ping command
json = {
'name': 'ping',
'type': 1,
'description': 'Shows you the ping of the bot in ms.'
}
command_creator.create_command(json)
#Info command
json = {
'name': 'info',
'type': 1,
'description': 'Shows you information about the bot.'
}
command_creator.create_command(json)
#Kick command
json = {
'name': 'kick',
'type': 1,
'description': 'Kicks a member from the server.',
"options": [
{
"name": "member",
"description": "The member to kick.",
"type": 6,
"required": True
},
{
"name": "reason",
"description": "Reason for the kick.",
"type": 3,
"required": False
}
]
}
command_creator.create_command(json)
#Ban command
json = {
'name': 'ban',
'type': 1,
'description': 'Bans a member from the server.',
"options": [
{
"name": "member",
"description": "The member to ban.",
"type": 6,
"required": True
},
{
"name": "reason",
"description": "Reason for the ban.",
"type": 3,
"required": False
}
]
}
command_creator.create_command(json)
#Unban command
json = {
'name': 'unban',
'type': 1,
'description': 'Unbans a member from the server.',
"options": [
{
"name": "member",
"description": "The member to unban.",
"type": 6,
"required": True
},
{
"name": "reason",
"description": "Reason for the unban.",
"type": 3,
"required": False
}
]
}
command_creator.create_command(json)
#File
bot_functions.json_module.write_json({"Created": 1}, False, 'command.json')

View File

@ -1,31 +0,0 @@
'''
Slash command creator for the discord.py Bot.
© by ElBe.
Version: 0.1.5
'''
#Imports
import os
import requests
#Variables
url = 'https://discord.com/api/v10/applications/' + str(os.environ['application_id']) + '/commands'
headers = {
'Authorization': 'Bot ' + str(os.environ['token'])
}
#Example Command
json = {
'name': 'ping',
'type': 1,
'description': 'Shows you the ping of the bot.'
}
#Function
def create_command(json):
try:
r = requests.post(url, headers=headers, json=json)
print('Command /' + str(json['name']) + ' was sucessfully created.')
except Exception as e:
print('Error while trying to create the command /' + str(json['name']) + '.\n' + str(e))

View File

@ -1,21 +0,0 @@
{
"Config": {
"Version": "0.1.9.2 final-r",
"Version-Comment": "Bugfix and error handler.",
"Footer": "Bot made by ElBe.",
"Credits": true
},
"Channels": {
"Welcome": "<Insert welcome channel name here>",
"Goodbye": "<Insert goodbye channel name here>"
},
"Commands": {
"stop": true,
"help": true,
"info": true,
"ping": true,
"kick": true,
"ban": true,
"unban": true
}
}

View File

@ -1,407 +0,0 @@
'''
Discord bot template.
© by ElBe.
Version: 0.1.9.2-R
'''
#Imports
import os
import discord
from discord import utils
import asyncio
import datetime
import time
import logging
import platform
import psutil
#Bot modules
import bot_functions
import command
#Start
print('Discord.py Bot')
print('----------------------------')
print('© by ElBe 2022.')
print('')
print('Start Informations')
print('------------------')
print('Discord version: ' + discord.__version__)
print('Bot version: ' +
bot_functions.json_module.get_config('Config')['Version'])
print('')
print('Starting')
print('--------')
#Variables
bold = '**'
italic = '*'
underline = '_'
stroke = '~~'
MISSING = utils.MISSING
#Starttime
starttime = time.time()
#JSON data
try:
token = os.environ['token']
version = bot_functions.json_module.get_config('Config')['Version']
credits = bot_functions.json_module.get_config('Config')['Credits']
footer = bot_functions.json_module.get_config('Config')['Footer']
welcomeChannel = bot_functions.json_module.get_config('Channels')['Welcome']
goodbyeChannel = bot_functions.json_module.get_config('Channels')['Goodbye']
commands = bot_functions.json_module.get_config('Commands')
except Exception as e:
print(bot_functions.console.error('Error while trying to get data from the config file.\n' + str(e)))
#Setup
logging.basicConfig(filename='log.txt', level=logging.INFO)
intents = discord.Intents.all()
#Create commands
try:
if bot_functions.json_module.get_config('Created', 'command.json') == 0:
command.run()
except Exception as e:
print(bot_functions.console.error('Error while trying to create the commands.\n' + str(e)))
#Main
class Bot(discord.Client):
'''Bot.'''
async def on_connect(self):
logging.info(
str(datetime.datetime.now()) + ' Bot connected to the Discord API.')
print(bot_functions.console.info('Bot connected to the Discord API.'))
async def on_ready(self):
logging.info(
str(datetime.datetime.now()) + ' Bot logged in as ' + client.user.name +
'.')
print(
bot_functions.console.info('Bot logged in as ' + client.user.name + '.'))
print('')
print('Log (Consolebased)')
print('------------------')
while True:
await client.change_presence(activity=discord.Activity(
type=discord.ActivityType.watching, name=f'/help for help.'))
await asyncio.sleep(10)
await client.change_presence(activity=discord.Game(
name=f'Version {version}'))
await asyncio.sleep(10)
if credits:
await client.change_presence(activity=discord.Game(
name=' programmed by ElBe.'))
await asyncio.sleep(10)
async def on_resumed(self):
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) +
' -- Bot resumed session.')
print(bot_functions.console.log('Bot resumed a session.'))
async def on_interaction(self, interaction):
async def log(text: str):
'''Log a text and save it in the logfile and the console.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- ' +
str(text))
print(bot_functions.console.log(str(text)))
if interaction.type == discord.InteractionType.application_command:
command_name = str(interaction.data['name'])
await log('Command /' + command_name + ' was used by @' +
str(interaction.user) + '.')
if command_name == 'ping' and commands['ping']:
pingEmbed = discord.Embed(title='Ping',
description='Ping of the bot in ms.')
pingEmbed.add_field(name='Latency: ',
value=str(round(client.latency * 1000)) + ' ms',
inline=False)
pingEmbed.set_thumbnail(url=client.user.avatar.url)
pingEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=pingEmbed,
ephemeral=True)
elif command_name == 'ping' and not commands['ping']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'info' and commands['info']:
infoEmbed = discord.Embed(title='Information',
description='Informations about the bot.')
infoEmbed.add_field(name='Running on: ',
value=str(platform.system()) + ' ' +
str(platform.release()),
inline=False)
infoEmbed.add_field(name='CPU usage: ',
value=str(psutil.cpu_percent(2)) + '%',
inline=False)
infoEmbed.add_field(
name='Uptime: ',
value=str(
datetime.timedelta(seconds=int(round(time.time() - starttime)))),
inline=False)
infoEmbed.set_thumbnail(url=client.user.avatar.url)
infoEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=infoEmbed,
ephemeral=True)
elif command_name == 'info' and not commands['info']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'stop' and commands['stop']:
if interaction.user.guild_permissions.administrator:
await log('Client stoped.')
exit()
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'stop' and not commands['stop']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'help' and commands['help']:
helpEmbed = discord.Embed(
title='Help',
description='Help for commands and the usage of the bot.')
helpEmbed.add_field(name='Ping',
value='Shows the ping of the bot in ms.',
inline=True)
helpEmbed.add_field(name='Info',
value='Shows information about the bot.',
inline=True)
helpEmbed.add_field(
name='Help',
value='Shows you help for commands and the usage of the bot.',
inline=True)
helpEmbed.add_field(name='Kick',
value='Kicks a member from the server.',
inline=True)
helpEmbed.add_field(name='Ban',
value='Bans a member from the server.',
inline=True)
helpEmbed.add_field(name='Unban',
value='Unbans a member from the server.',
inline=True)
helpEmbed.add_field(
name='more',
value=
'For more help write a direct message to <@!745695237380243457>.',
inline=False)
helpEmbed.set_thumbnail(url=client.user.avatar.url)
helpEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=helpEmbed,
ephemeral=True)
if command_name == 'kick' and commands['kick']:
options = interaction.data['options']
if interaction.user.guild_permissions.administrator:
member = options[0]['value']
member = await interaction.guild.fetch_member(int(member))
reason = options[1]['value']
if reason == None:
reason = 'Kicked by @' + str(
interaction.user) + ' with the /kick command.'
await member.kick(reason=reason)
kickEmbed = discord.Embed(title='Kick',
description='Succesfully kicked <@!' +
options[0]['value'] + '>!')
kickEmbed.set_thumbnail(url=client.user.avatar.url)
kickEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=kickEmbed,
ephemeral=True)
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'kick' and not commands['kick']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'ban' and commands['ban']:
options = interaction.data['options']
if interaction.user.guild_permissions.administrator:
member = options[0]['value']
member = await interaction.guild.fetch_member(int(member))
reason = options[1]['value']
if reason == None:
reason = 'Banned by @' + str(
interaction.user) + ' with the /ban command.'
await member.ban(reason=reason)
banEmbed = discord.Embed(title='Ban',
description='Succesfully banned <@!' +
options[0]['value'] + '>!')
banEmbed.set_thumbnail(url=client.user.avatar.url)
banEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=banEmbed,
ephemeral=True)
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'ban' and not commands['ban']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'unban' and commands['unban']:
options = interaction.data['options']
if interaction.user.guild_permissions.administrator:
member = options[0]['value']
member = await client.fetch_user(int(member))
reason = options[1]['value']
if reason == None:
reason = 'Unbanned by @' + str(
interaction.user) + ' with the /unban command.'
await interaction.guild.unban(member, reason=reason)
unbanEmbed = discord.Embed(title='Unban',
description='Succesfully unbanned <@!' +
options[0]['value'] + '>!')
unbanEmbed.set_thumbnail(url=client.user.avatar.url)
unbanEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=unbanEmbed,
ephemeral=True)
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'unban' and not commands['unban']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
async def on_member_join(self, member):
async def log(text: str):
'''Log a text and save it in the logfile and the console.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- ' +
str(text))
print(bot_functions.console.log(str(text)))
if not member == client.user:
channel = discord.utils.get(member.guild.text_channels,
name=welcomeChannel)
joinEmbed = discord.Embed(
title='Welcome!',
description='Hello <@!' + str(member.id) +
f'>! \nThank you for joining {member.guild.name}!')
joinEmbed.set_thumbnail(url=member.avatar.url)
joinEmbed.set_footer(text=footer)
await channel.send(embed=joinEmbed)
await member.add_roles(
discord.utils.get(member.guild.roles, name='member'))
await log('@' + str(member) + ' joined to ' + str(member.guild.name) +
'.')
async def on_member_remove(self, member):
async def log(text: str):
'''Log a text and save it in the logfile and the console.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- ' +
str(text))
print(bot_functions.console.log(str(text)))
if not member == client.user:
channel = discord.utils.get(member.guild.text_channels,
name=goodbyeChannel)
leaveEmbed = discord.Embed(title='Goodbye!',
description='<@!' + str(member.id) +
f'> left {member.guild.name}.')
leaveEmbed.set_thumbnail(url=member.avatar.url)
leaveEmbed.set_footer(text=footer)
await channel.send(embed=leaveEmbed)
await log('@' + str(member) + ' left ' + str(member.guild.name) + '.')
async def on_disconnect(self):
async def error(text: str):
'''Send a error text and save it in the logfile.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- Error: ' +
str(text))
print(bot_functions.console.error(str(text)))
await error('Bot disconected from discord.')
#Run
try:
client = Bot(intents=intents, max_messages=None)
client.run(token, log_handler=None)
except Exception as e:
print(bot_functions.console.error('Error while trying to connect to discord.\n' + str(e)))