From 967d94242e3c569e8b2b9b3c6985f7723a3dff05 Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Wed, 28 Jul 2021 18:50:11 -0600 Subject: [PATCH 1/2] Bug fixes, add /serverinfo, closes #73 --- jarvis/__init__.py | 8 +++---- jarvis/cogs/modlog/command.py | 10 +------- jarvis/cogs/modlog/utils.py | 3 +-- jarvis/cogs/starboard.py | 11 +++------ jarvis/cogs/util.py | 44 ++++++++++++++++++++++++++++++++++- 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/jarvis/__init__.py b/jarvis/__init__.py index 35b18cf..a0b6b17 100644 --- a/jarvis/__init__.py +++ b/jarvis/__init__.py @@ -4,13 +4,13 @@ from pathlib import Path from discord import Intents from discord.ext import commands from discord.utils import find -from discord_slash import SlashCommand -from psutil import Process - from jarvis import logo, tasks, utils from jarvis.config import get_config from jarvis.db import DBManager from jarvis.events import guild, member, message +from psutil import Process + +from discord_slash import SlashCommand if asyncio.get_event_loop().is_closed(): asyncio.set_event_loop(asyncio.new_event_loop()) @@ -25,7 +25,7 @@ jarvis = commands.Bot( ) slash = SlashCommand(jarvis, sync_commands=True, sync_on_cog_reload=True) jarvis_self = Process() -__version__ = "1.8.0" +__version__ = "1.8.1" db = DBManager(get_config().mongo).mongo diff --git a/jarvis/cogs/modlog/command.py b/jarvis/cogs/modlog/command.py index a1d0f61..ff1b7dd 100644 --- a/jarvis/cogs/modlog/command.py +++ b/jarvis/cogs/modlog/command.py @@ -20,17 +20,9 @@ class ModlogCommandCog(commands.Cog): fields = [ Field("Command", ctx.name), ] - if ctx.args: - fields.append( - Field( - "Args", - " ".join(ctx.args), - False, - ) - ) if ctx.kwargs: kwargs_string = " ".join( - f"{k}: {ctx.kwargs[k]}" for k in ctx.kwargs + f"{k}: {str(ctx.kwargs[k])}" for k in ctx.kwargs ) fields.append( Field( diff --git a/jarvis/cogs/modlog/utils.py b/jarvis/cogs/modlog/utils.py index 64e3771..4830c78 100644 --- a/jarvis/cogs/modlog/utils.py +++ b/jarvis/cogs/modlog/utils.py @@ -2,7 +2,6 @@ from datetime import datetime, timedelta import discord from discord.utils import find - from jarvis.utils import build_embed from jarvis.utils.field import Field @@ -41,7 +40,7 @@ def modlog_embed( return embed -def get_latest_log(self, auditlog, target): +def get_latest_log(auditlog, target): before = datetime.utcnow() - timedelta(seconds=10) return find( lambda x: x.target.id == target.id and x.created_at > before, diff --git a/jarvis/cogs/starboard.py b/jarvis/cogs/starboard.py index eba9678..7708c5d 100644 --- a/jarvis/cogs/starboard.py +++ b/jarvis/cogs/starboard.py @@ -1,12 +1,12 @@ from discord import TextChannel from discord.ext import commands -from discord_slash import SlashContext, cog_ext -from discord_slash.utils.manage_commands import create_option - from jarvis.db.types import Star, Starboard from jarvis.utils import build_embed from jarvis.utils.permissions import admin_or_permissions +from discord_slash import SlashContext, cog_ext +from discord_slash.utils.manage_commands import create_option + supported_images = [ "image/png", "image/gif", @@ -221,11 +221,6 @@ class StarboardCog(commands.Cog): base="star", name="delete", description="Delete a starred message", - guild_ids=[ - 862402786116763668, - 418094694325813248, - 578757004059738142, - ], options=[ create_option( name="id", diff --git a/jarvis/cogs/util.py b/jarvis/cogs/util.py index 6c44b73..6e5123d 100644 --- a/jarvis/cogs/util.py +++ b/jarvis/cogs/util.py @@ -1,7 +1,7 @@ import re from io import BytesIO -from discord import File, Role, User +from discord import File, Guild, Role, User from discord.ext import commands from discord_slash import SlashContext, cog_ext from discord_slash.utils.manage_commands import create_option @@ -225,6 +225,48 @@ class UtilCog(commands.Cog): await ctx.send(embed=embed) + @cog_ext.cog_slash(name="serverinfo", description="Get server info") + async def _server_info(self, ctx: SlashContext): + guild: Guild = ctx.guild + + owner = ( + f"{guild.owner.name}#{guild.owner.discriminator}" + if guild.owner + else "||`[redacted]`||" + ) + + region = guild.region + categories = len(guild.categories) + text_channels = len(guild.text_channels) + voice_channels = len(guild.voice_channels) + members = guild.member_count + roles = len(guild.roles) + role_list = ", ".join(role.name for role in guild.roles) + + fields = [ + Field(name="Owner", value=owner), + Field(name="Region", value=region), + Field(name="Channel Categories", value=categories), + Field(name="Text Channels", value=text_channels), + Field(name="Voice Channels", value=voice_channels), + Field(name="Members", value=members), + Field(name="Roles", value=roles), + ] + if len(role_list) < 1024: + fields.append( + Field(name="Role List", value=role_list, inline=False) + ) + + embed = build_embed( + title="", description="", fields=fields, timestamp=guild.created_at + ) + + embed.set_author(name=guild.name, icon_url=guild.icon_url) + embed.set_thumbnail(url=guild.icon_url) + embed.set_footer(text=f"ID: {guild.id} | Server Created") + + await ctx.send(embed=embed) + def setup(bot): bot.add_cog(UtilCog(bot)) From 2626f91c7bb3ba6e57627bdccdabb066700655eb Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Wed, 28 Jul 2021 18:52:17 -0600 Subject: [PATCH 2/2] Fix MongoObject.update --- jarvis/db/types.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/jarvis/db/types.py b/jarvis/db/types.py index 19ba060..adc764b 100644 --- a/jarvis/db/types.py +++ b/jarvis/db/types.py @@ -4,10 +4,9 @@ from datetime import datetime from typing import Any, Optional from bson import ObjectId -from pymongo import ASCENDING, DESCENDING - from jarvis.config import get_config from jarvis.db import DBManager +from pymongo import ASCENDING, DESCENDING logger = logging.getLogger("mongodb") @@ -128,15 +127,18 @@ class MongoObject: :return: If update was successful """ to_update = self.to_dict() - search = {"_id": to_update["_id"]} - try: - result = self.coll.update_one( - search, {"$set": to_update}, upsert=True - ) - except Exception as e: - logger.error(f"Failed to update {type(self).__name__}", e) + if self._id: + search = {"_id": to_update["_id"]} + try: + result = self.coll.update_one( + search, {"$set": to_update}, upsert=True + ) + except Exception as e: + logger.error(f"Failed to update {type(self).__name__}", e) + else: + return result.modified_count > 0 else: - return result.modified_count > 0 + self.insert() @classmethod def get(cls, **kwargs) -> Optional[object]: