157 lines
4.8 KiB
Python
157 lines
4.8 KiB
Python
import time as t
|
|
import asyncio
|
|
import logging
|
|
import datetime
|
|
import secretHandler
|
|
from addons import ProgrammerExcuses
|
|
from addons import XKCD
|
|
|
|
from models.xkcdComic import Comic
|
|
|
|
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='data/log/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='get-latest-comic', description='Get latest comic from XKCD')
|
|
async def slash(interaction: Interaction):
|
|
comic = xkcd.getLastComic()
|
|
|
|
embed = discord.Embed(title=comic.title, color=Color.blue(), url=f"{xkcd.url}/{comic.num}")
|
|
embed.set_image(url=comic.img)
|
|
await interaction.response.send_message(embed=embed)
|
|
|
|
@tree.command(name='get-random-comic', description='Get a random comic from XKCD')
|
|
async def slash(interaction: Interaction):
|
|
xkcd.getRandomComic()
|
|
await interaction.response.send_message("hi")
|
|
|
|
@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")
|