Merge branch 'serverinfo' into 'main'

Bug fixes, add /serverinfo, closes #73

Closes #73

See merge request stark-industries/j.a.r.v.i.s.!24
This commit is contained in:
Zeva Rose 2021-07-29 00:52:33 +00:00
commit e6055e58b8
6 changed files with 64 additions and 34 deletions

View file

@ -4,13 +4,13 @@ from pathlib import Path
from discord import Intents from discord import Intents
from discord.ext import commands from discord.ext import commands
from discord.utils import find from discord.utils import find
from discord_slash import SlashCommand
from psutil import Process
from jarvis import logo, tasks, utils from jarvis import logo, tasks, utils
from jarvis.config import get_config from jarvis.config import get_config
from jarvis.db import DBManager from jarvis.db import DBManager
from jarvis.events import guild, member, message from jarvis.events import guild, member, message
from psutil import Process
from discord_slash import SlashCommand
if asyncio.get_event_loop().is_closed(): if asyncio.get_event_loop().is_closed():
asyncio.set_event_loop(asyncio.new_event_loop()) 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) slash = SlashCommand(jarvis, sync_commands=True, sync_on_cog_reload=True)
jarvis_self = Process() jarvis_self = Process()
__version__ = "1.8.0" __version__ = "1.8.1"
db = DBManager(get_config().mongo).mongo db = DBManager(get_config().mongo).mongo

View file

@ -20,17 +20,9 @@ class ModlogCommandCog(commands.Cog):
fields = [ fields = [
Field("Command", ctx.name), Field("Command", ctx.name),
] ]
if ctx.args:
fields.append(
Field(
"Args",
" ".join(ctx.args),
False,
)
)
if ctx.kwargs: if ctx.kwargs:
kwargs_string = " ".join( 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( fields.append(
Field( Field(

View file

@ -2,7 +2,6 @@ from datetime import datetime, timedelta
import discord import discord
from discord.utils import find from discord.utils import find
from jarvis.utils import build_embed from jarvis.utils import build_embed
from jarvis.utils.field import Field from jarvis.utils.field import Field
@ -41,7 +40,7 @@ def modlog_embed(
return embed return embed
def get_latest_log(self, auditlog, target): def get_latest_log(auditlog, target):
before = datetime.utcnow() - timedelta(seconds=10) before = datetime.utcnow() - timedelta(seconds=10)
return find( return find(
lambda x: x.target.id == target.id and x.created_at > before, lambda x: x.target.id == target.id and x.created_at > before,

View file

@ -1,12 +1,12 @@
from discord import TextChannel from discord import TextChannel
from discord.ext import commands 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.db.types import Star, Starboard
from jarvis.utils import build_embed from jarvis.utils import build_embed
from jarvis.utils.permissions import admin_or_permissions 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 = [ supported_images = [
"image/png", "image/png",
"image/gif", "image/gif",
@ -221,11 +221,6 @@ class StarboardCog(commands.Cog):
base="star", base="star",
name="delete", name="delete",
description="Delete a starred message", description="Delete a starred message",
guild_ids=[
862402786116763668,
418094694325813248,
578757004059738142,
],
options=[ options=[
create_option( create_option(
name="id", name="id",

View file

@ -1,7 +1,7 @@
import re import re
from io import BytesIO from io import BytesIO
from discord import File, Role, User from discord import File, Guild, Role, User
from discord.ext import commands from discord.ext import commands
from discord_slash import SlashContext, cog_ext from discord_slash import SlashContext, cog_ext
from discord_slash.utils.manage_commands import create_option from discord_slash.utils.manage_commands import create_option
@ -225,6 +225,48 @@ class UtilCog(commands.Cog):
await ctx.send(embed=embed) 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): def setup(bot):
bot.add_cog(UtilCog(bot)) bot.add_cog(UtilCog(bot))

View file

@ -4,10 +4,9 @@ from datetime import datetime
from typing import Any, Optional from typing import Any, Optional
from bson import ObjectId from bson import ObjectId
from pymongo import ASCENDING, DESCENDING
from jarvis.config import get_config from jarvis.config import get_config
from jarvis.db import DBManager from jarvis.db import DBManager
from pymongo import ASCENDING, DESCENDING
logger = logging.getLogger("mongodb") logger = logging.getLogger("mongodb")
@ -128,6 +127,7 @@ class MongoObject:
:return: If update was successful :return: If update was successful
""" """
to_update = self.to_dict() to_update = self.to_dict()
if self._id:
search = {"_id": to_update["_id"]} search = {"_id": to_update["_id"]}
try: try:
result = self.coll.update_one( result = self.coll.update_one(
@ -137,6 +137,8 @@ class MongoObject:
logger.error(f"Failed to update {type(self).__name__}", e) logger.error(f"Failed to update {type(self).__name__}", e)
else: else:
return result.modified_count > 0 return result.modified_count > 0
else:
self.insert()
@classmethod @classmethod
def get(cls, **kwargs) -> Optional[object]: def get(cls, **kwargs) -> Optional[object]: