first push
This commit is contained in:
24
src/addons.py
Normal file
24
src/addons.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import requests
|
||||
|
||||
class ProgrammerExcuses:
|
||||
def __init__(self) -> None:
|
||||
self.__url = "http://programmingexcuses.com"
|
||||
|
||||
def getExcuse(self):
|
||||
page = requests.get(url=self.__url)
|
||||
content = page.content.decode().split("\n")
|
||||
for html in content:
|
||||
if 'href="/"' in html:
|
||||
start_index = html.find('3;">')
|
||||
end_index = html.find("</a></center>")
|
||||
return html[start_index+4:end_index]
|
||||
|
||||
class XKCD:
|
||||
def __init__(self) -> None:
|
||||
self.__url = "https://xkcd.com"
|
||||
|
||||
def getRandomComic(self):
|
||||
pass
|
||||
|
||||
def getLastComic(self):
|
||||
pass
|
||||
146
src/main.py
Normal file
146
src/main.py
Normal file
@@ -0,0 +1,146 @@
|
||||
import time as t
|
||||
import asyncio
|
||||
import logging
|
||||
import datetime
|
||||
from unicodedata import category
|
||||
import secretHandler
|
||||
from addons import ProgrammerExcuses
|
||||
from addons import XKCD
|
||||
|
||||
import discord
|
||||
from discord import Status
|
||||
from discord import app_commands
|
||||
from discord import Interaction
|
||||
from discord import Embed
|
||||
from discord import Guild
|
||||
from discord import Color
|
||||
from discord.activity import Game
|
||||
|
||||
botVersion = "1.0.1"
|
||||
botDate = "03.02.2023"
|
||||
|
||||
secret = secretHandler.secret()
|
||||
token = secret.loadSecret("secret.txt")
|
||||
if token[0] != 0:
|
||||
exit(f"Cannot load token. Error Code {token[0]}")
|
||||
botToken = token[1]
|
||||
|
||||
# Init Logger
|
||||
logger = logging.getLogger('discord')
|
||||
logger.setLevel(logging.DEBUG)
|
||||
handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='a')
|
||||
handler.setFormatter(logging.Formatter('%(asctime)s|%(levelname)s|%(name)s|:%(message)s'))
|
||||
logger.addHandler(handler)
|
||||
|
||||
#Init Addons
|
||||
programmerExcuses = ProgrammerExcuses()
|
||||
xkcd = XKCD()
|
||||
|
||||
class client(discord.Client):
|
||||
async def startup(self):
|
||||
await self.wait_until_ready()
|
||||
|
||||
def getDateTime():
|
||||
dateNow = datetime.datetime.now()
|
||||
dateNow = str(dateNow).split(" ")
|
||||
unix = t.time()
|
||||
time = dateNow[1]
|
||||
time = time.split(".")
|
||||
time = time[0]
|
||||
dateNow = dateNow[0]
|
||||
return dateNow, time, unix
|
||||
|
||||
startTime = getDateTime()[2]
|
||||
|
||||
bot = client(intents=discord.Intents.all())
|
||||
tree = app_commands.CommandTree(client=bot)
|
||||
|
||||
async def chnagePresence():
|
||||
while True:
|
||||
await bot.change_presence(activity=Game(name="with penguins"), status=Status.online)
|
||||
await asyncio.sleep(20)
|
||||
|
||||
countGuilds = 0
|
||||
async for guild in bot.fetch_guilds():
|
||||
countGuilds += 1
|
||||
|
||||
await bot.change_presence(activity=Game(name=f"on {countGuilds} Servers"), status=Status.online)
|
||||
await asyncio.sleep(20)
|
||||
|
||||
@bot.event
|
||||
async def on_ready():
|
||||
startTime = getDateTime()[2]
|
||||
bot.loop.create_task(chnagePresence())
|
||||
logger.info(f"Logged in as: {bot.user.name} with ID {bot.user.id}")
|
||||
await bot.change_presence(activity=Game(name="with penguins"), status=Status.online)
|
||||
await tree.sync()
|
||||
|
||||
@bot.event
|
||||
async def on_guild_join(guild: Guild):
|
||||
logger.info("Added to Guild")
|
||||
await guild.system_channel.send("Hii^^")
|
||||
|
||||
|
||||
|
||||
@tree.command(name='excuse', description='Get a random excuse from programmer excuses')
|
||||
async def slash(interaction: Interaction):
|
||||
await interaction.response.send_message(programmerExcuses.getExcuse())
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@tree.command(name="info", description="get info about this server")
|
||||
async def slash(interaction: Interaction):
|
||||
logger.info("Command: info")
|
||||
timeNow = getDateTime()[2]
|
||||
uptime = timeNow - startTime
|
||||
|
||||
serverString = \
|
||||
f"""\
|
||||
Owner: {interaction.guild.owner}
|
||||
Name: {interaction.guild.name}
|
||||
"""
|
||||
botString = \
|
||||
f"""\
|
||||
Uptime: {int(round(uptime/60, 1))}m
|
||||
Version: {botVersion} from {botDate}
|
||||
Developer: DasMoorhuhn.py#2604
|
||||
Sourcecode: https://gitlab.com/HendrikHeine/it-discord-bot
|
||||
"""
|
||||
|
||||
embed = discord.Embed(title=f"Info", description="about this Server", timestamp=datetime.datetime.utcnow(), color=Color.blue())
|
||||
#embed.set_thumbnail(url=interaction.guild.icon)
|
||||
embed.add_field(name="Server", value=serverString, inline=False)
|
||||
embed.add_field(name="Bot", value=botString, inline=False)
|
||||
await interaction.response.send_message(embed=embed)
|
||||
|
||||
@tree.command(name="help", description="List of all Commands")
|
||||
async def slash(interaction: Interaction):
|
||||
logger.info("Command: help")
|
||||
commandListString = \
|
||||
"""\
|
||||
`/info`: Get infos about the server and the Bot
|
||||
`/help`: Get this view
|
||||
"""
|
||||
embed = discord.Embed(title=f"Help", description="List of commands", color=Color.blue())
|
||||
#embed.set_thumbnail(url=interaction.guild.icon)
|
||||
embed.add_field(name="Commands", value=commandListString, inline=True)
|
||||
|
||||
await interaction.response.send_message(embed=embed)
|
||||
|
||||
@tree.error
|
||||
async def on_app_command_error(interaction: Interaction, error):
|
||||
if isinstance(error, app_commands.MissingPermissions):
|
||||
await interaction.response.send_message(content="Du hast keine Adminrechte", ephemeral=True)
|
||||
else:
|
||||
raise error
|
||||
|
||||
#Prevent Gateway Heartbeat Block
|
||||
try:
|
||||
bot.run(token=botToken)
|
||||
except Exception as err:
|
||||
raise err
|
||||
exit(1)
|
||||
finally:
|
||||
logger.info("Stopped")
|
||||
69
src/secretHandler.py
Normal file
69
src/secretHandler.py
Normal file
@@ -0,0 +1,69 @@
|
||||
'''https://gitlab.com/HendrikHeine/py-secret-handler'''
|
||||
|
||||
import json
|
||||
|
||||
class __fileType:
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
|
||||
def _loadFromTXT(self, fileName:str):
|
||||
'''!!!DONT USE!!!'''
|
||||
try:
|
||||
with open(file=fileName, mode="r") as file:
|
||||
return [0, str(file.readlines()[0].strip("\n"))]
|
||||
except:
|
||||
return [1]
|
||||
|
||||
def _loadFromJSON(self, fileName:str, item:str):
|
||||
'''!!!DONT USE!!!'''
|
||||
if item == "":
|
||||
return [2]
|
||||
else:
|
||||
try:
|
||||
with open(file=fileName, mode="r") as file:
|
||||
try:return [0, json.loads(file.read())[item]]
|
||||
except:return [5]
|
||||
except:
|
||||
return [1]
|
||||
|
||||
class secret(__fileType):
|
||||
'''Class for load secrets like API keys or tokens'''
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
|
||||
def loadSecret(self, fileName:str, item=""):
|
||||
'''
|
||||
fileName(str)
|
||||
the name of the secret file.
|
||||
Valid formats: .json and .txt
|
||||
|
||||
item(str)
|
||||
name of the item in the JSON file. By default empty
|
||||
|
||||
Return Values(list):
|
||||
0: Ok
|
||||
1: File could not load
|
||||
2: No item given for JSON
|
||||
3: Invalid file format (for example .exe, .csv)
|
||||
4: No format for file given
|
||||
5: Invalid item for JSON
|
||||
'''
|
||||
try:fileType = fileName.split(".")[1]
|
||||
except:return [4]
|
||||
|
||||
if fileType == "json":
|
||||
result = self._loadFromJSON(fileName=fileName, item=item)
|
||||
if result[0] == 0:
|
||||
return result
|
||||
else:
|
||||
return [result[0]]
|
||||
|
||||
elif fileType == "txt":
|
||||
result = self._loadFromTXT(fileName=fileName)
|
||||
if result[0] == 0:
|
||||
return result
|
||||
else:
|
||||
return [result[0]]
|
||||
|
||||
else:
|
||||
return [3]
|
||||
Reference in New Issue
Block a user