Skip to content

Commit f86e4dc

Browse files
committed
refactor: move everything to flat hiearchy, lots of in-file changes
- bot now uses loguru as logger.xxx instead of log.xxx for simplicity - bot now prints the Cog loaded: in the load_cogs function instead of in every cogs setup() - removed report message as it's sort of useless with tickets and the way discord reports work makes it unnecessarily confusing, cool idea - changed cogs from XXXCommands and XXXListeners to just XXXCog - replaced some legacy dataset code in BanCog - removed unnecessary functions in boost.py - too lazy to finish this up!
1 parent ea6436f commit f86e4dc

27 files changed

+528
-843
lines changed

chiya/bot.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import asyncio
22
import glob
3+
import logging
34
import os
45
import sys
5-
import logging
66

77
import discord
88
from discord.ext import commands
9-
from loguru import logger as log
9+
from loguru import logger
1010

1111
from chiya import database # noqa
1212
from chiya.config import config
@@ -23,7 +23,7 @@
2323
@bot.event
2424
async def on_ready() -> None:
2525
"Called when the client is done preparing the data received from Discord."
26-
log.info(f"Logged in as: {str(bot.user)}")
26+
logger.info(f"Logged in as: {str(bot.user)}")
2727
await bot.tree.sync(guild=discord.Object(config.guild_id))
2828

2929

@@ -37,7 +37,7 @@ async def setup_logger():
3737
log_level = config.bot.log_level
3838
if not log_level:
3939
log_level = "NOTSET"
40-
log.remove()
40+
logger.remove()
4141

4242
class InterceptHandler(logging.Handler):
4343
"Setup up an Interceptor class to redirect all logs from the standard logging library to loguru."
@@ -46,11 +46,11 @@ def emit(self, record: logging.LogRecord) -> None:
4646
# Get corresponding Loguru level if it exists.
4747
level: str | int
4848
try:
49-
level = log.level(record.levelname).name
49+
level = logger.level(record.levelname).name
5050
except ValueError:
5151
level = record.levelno
5252

53-
log.opt(exception=record.exc_info).log(level, record.getMessage())
53+
logger.opt(exception=record.exc_info).log(level, record.getMessage())
5454

5555
# TODO: Replace deprecated getLevelName call
5656
discord.utils.setup_logging(
@@ -59,15 +59,16 @@ def emit(self, record: logging.LogRecord) -> None:
5959

6060
# TODO: Replace with pathlib
6161
fmt = "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan> | <level>{message}</level>"
62-
log.add(sys.stdout, format=fmt, level=log_level, backtrace=False)
63-
log.add(os.path.join("logs", "bot.log"), format=fmt, rotation="1 day")
62+
logger.add(sys.stdout, format=fmt, level=log_level, backtrace=False)
63+
logger.add(os.path.join("logs", "bot.log"), format=fmt, rotation="1 day")
6464

6565

6666
async def load_cogs():
6767
# TODO: Replace with pathlib
6868
# TODO: Honestly, rewrite this logic, it's so icky
6969
for cog in glob.iglob(os.path.join("cogs", "**", "[!^_]*.py"), root_dir="chiya", recursive=True):
7070
await bot.load_extension(cog.replace("/", ".").replace("\\", ".").replace(".py", ""))
71+
logger.info(f"Cog loaded: {list(bot.cogs.keys())[-1]}")
7172

7273

7374
if __name__ == "__main__":

chiya/cogs/apps/report_message.py

-210
This file was deleted.

chiya/cogs/commands/ban.py renamed to chiya/cogs/ban.py

+35-23
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import time
22

3+
import arrow
34
import discord
45
from discord import app_commands
56
from discord.ext import commands
6-
from loguru import logger as log
77

8-
from chiya import database
98
from chiya.config import config
9+
from chiya.database import ModLog
1010
from chiya.utils import embeds
1111
from chiya.utils.helpers import can_action_member, log_embed_to_channel
1212

1313

14-
class BansCommands(commands.Cog):
14+
class BanCog(commands.Cog):
1515
def __init__(self, bot: commands.Bot) -> None:
1616
self.bot = bot
1717

@@ -93,18 +93,13 @@ async def ban(
9393
),
9494
)
9595

96-
db = database.Database().get()
97-
db["mod_logs"].insert(
98-
dict(
99-
user_id=user.id,
100-
mod_id=ctx.user.id,
101-
timestamp=int(time.time()),
102-
reason=reason,
103-
type="ban",
104-
)
105-
)
106-
db.commit()
107-
db.close()
96+
ModLog(
97+
user_id=user.id,
98+
mod_id=ctx.user.id,
99+
timestamp=arrow.utcnow().timestamp(),
100+
reason=reason,
101+
type="ban",
102+
).save()
108103

109104
await ctx.guild.ban(user=user, reason=reason, delete_message_days=daystodelete or 0)
110105
await ctx.followup.send(embed=mod_embed)
@@ -140,18 +135,35 @@ async def unban(self, ctx: discord.Interaction, user: discord.Member | discord.U
140135
color=discord.Color.green(),
141136
)
142137

143-
db = database.Database().get()
144-
db["mod_logs"].insert(
145-
dict(user_id=user.id, mod_id=ctx.user.id, timestamp=int(time.time()), reason=reason, type="unban")
146-
)
147-
db.commit()
148-
db.close()
138+
ModLog(
139+
user_id=user.id,
140+
mod_id=ctx.user.id,
141+
timestamp=arrow.utcnow().timestamp(),
142+
reason=reason,
143+
type="unban",
144+
).save()
149145

150146
await ctx.guild.unban(user, reason=reason)
151147
await ctx.followup.send(embed=mod_embed)
152148
await log_embed_to_channel(ctx=ctx, embed=mod_embed)
153149

150+
@commands.Cog.listener()
151+
async def on_member_ban(self, guild: discord.Guild, user: discord.Member | discord.User) -> None:
152+
"""
153+
Add the user's ban entry to the database if they were banned manually.
154+
"""
155+
# TODO: Emit an embed in #moderation when this happens
156+
ban_entry = await guild.fetch_ban(user)
157+
logs = [log async for log in guild.audit_logs(limit=1, action=discord.AuditLogAction.ban)]
158+
if logs[0].user != self.bot.user:
159+
ModLog(
160+
user_id=user.id,
161+
mod_log=logs[0].user.id,
162+
timestamp=int(time.time()),
163+
reason=ban_entry.reason,
164+
type="ban",
165+
)
166+
154167

155168
async def setup(bot: commands.Bot) -> None:
156-
await bot.add_cog(BansCommands(bot))
157-
log.info("Commands loaded: ban")
169+
await bot.add_cog(BanCog(bot))

0 commit comments

Comments
 (0)