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")