[Lseen][dad][InfoChannel] Made changes (#65)

* Update ccrole.py

* listener

* Update qrinvite.py

* Update qrinvite.py

* Make default enabled False

Made default enabled False, this is because with a decent amount of users this skyrockets your CPU, so making this default off, only servers that actually want it will be enabled, thus reducing CPU usage.

* Update dad.py

* Add optional bot count and online count
pull/69/head
Ianardo DiCaprio 6 years ago committed by bobloy
parent 704b1c611b
commit 4629270695

@ -105,8 +105,10 @@ class Dad(Cog):
out = message.author.mention
else:
out = lower[4:]
await message.channel.send("Hi {}, I'm {}!".format(out, guild.me.display_name))
try:
await message.channel.send("Hi {}, I'm {}!".format(out, guild.me.display_name))
except discord.HTTPException:
return
self.cooldown[guild.id] = datetime.now() + timedelta(
seconds=(await guild_config.cooldown())

@ -1,17 +1,17 @@
from typing import Any
import discord
from redbot.core import Config, commands, checks
from redbot.core.bot import Red
Cog: Any = getattr(commands, "Cog", object)
listener = getattr(commands.Cog, "listener", None) # Trusty + Sinbad
if listener is None:
def listener(name=None):
return lambda x: x
class InfoChannel(Cog):
"""
Create a channel with updating server info
@ -27,7 +27,11 @@ class InfoChannel(Cog):
default_guild = {
"channel_id": None,
"botchannel_id": None,
"onlinechannel_id": None,
"member_count": True,
"bot_count": False,
"online_count": False,
}
self.config.register_guild(**default_guild)
@ -58,7 +62,7 @@ class InfoChannel(Cog):
elif channel_id is None:
await ctx.send("Enable info channel on this server?")
else:
await ctx.send("Info channel is {}. Delete it?".format(channel.mention))
await ctx.send("Do you wish to delete current info channels?")
msg = await self.bot.wait_for("message", check=check)
@ -74,43 +78,127 @@ class InfoChannel(Cog):
if not await ctx.tick():
await ctx.send("Done!")
@commands.group()
@checks.admin()
async def infochannelset(self, ctx: commands.Context):
"""
Toggle different types of infochannels
"""
@infochannelset.command(name="botcount")
async def _infochannelset_botcount(self, ctx: commands.Context, enabled: bool = None):
"""
Toggle an infochannel that shows the amount of bots in the server
"""
guild = ctx.guild
if enabled is None:
enabled = not await self.config.guild(guild).bot_count()
await self.config.guild(guild).bot_count.set(enabled)
if enabled:
await ctx.send("InfoChannel for bot count has been enabled.")
else:
await ctx.send("InfoChannel for bot count has been disabled.")
@infochannelset.command(name="onlinecount")
async def _infochannelset_onlinecount(self, ctx: commands.Context, enabled: bool = None):
"""
Toggle an infochannel that shows the amount of online users in the server
"""
guild = ctx.guild
if enabled is None:
enabled = not await self.config.guild(guild).online_count()
await self.config.guild(guild).online_count.set(enabled)
if enabled:
await ctx.send("InfoChannel for online user count has been enabled.")
else:
await ctx.send("InfoChannel for online user count has been disabled.")
async def make_infochannel(self, guild: discord.Guild):
overwrites = {guild.default_role: discord.PermissionOverwrite(connect=False),
guild.me: discord.PermissionOverwrite(manage_channels=True, connect=True)}
botcount = await self.config.guild(guild).bot_count()
onlinecount = await self.config.guild(guild).online_count()
overwrites = {
guild.default_role: discord.PermissionOverwrite(connect=False),
guild.me: discord.PermissionOverwrite(manage_channels=True, connect=True),
}
channel = await guild.create_voice_channel(
"Placeholder", reason="InfoChannel make", overwrites=overwrites
)
await self.config.guild(guild).channel_id.set(channel.id)
if botcount:
botchannel = await guild.create_voice_channel(
"Placeholder", reason="InfoChannel botcount", overwrites=overwrites
)
await self.config.guild(guild).botchannel_id.set(botchannel.id)
if onlinecount:
onlinechannel = await guild.create_voice_channel(
"Placeholder", reason="InfoChannel onlinecount", overwrites=overwrites
)
await self.config.guild(guild).onlinechannel_id.set(onlinechannel.id)
await self.update_infochannel(guild)
async def delete_infochannel(self, guild: discord.Guild, channel: discord.VoiceChannel):
guild_data = await self.config.guild(guild).all()
botchannel_id = guild_data["botchannel_id"]
onlinechannel_id = guild_data["onlinechannel_id"]
botchannel: discord.VoiceChannel = guild.get_channel(botchannel_id)
onlinechannel: discord.VoiceChannel = guild.get_channel(onlinechannel_id)
channel_id = guild_data["channel_id"]
channel: discord.VoiceChannel = guild.get_channel(channel_id)
await channel.delete(reason="InfoChannel delete")
if botchannel_id is not None:
await botchannel.delete(reason="InfoChannel delete")
if onlinechannel_id is not None:
await onlinechannel.delete(reason="InfoChannel delete")
await self.config.guild(guild).clear()
async def update_infochannel(self, guild: discord.Guild):
guild_data = await self.config.guild(guild).all()
botcount = guild_data["bot_count"]
onlinecount = guild_data["online_count"]
# Gets count of bots
bots = lambda x: x.bot
num = len([m for m in guild.members if bots(m)])
bot_msg = f"Bots: {num}"
# Gets count of online users
members = guild.member_count
offline = len(list(filter(lambda m: m.status is discord.Status.offline, guild.members)))
num = members - offline
online_msg = f"Online: {num}"
# Gets count of actual users
total = lambda x: not x.bot
num = len([m for m in guild.members if total(m)])
human_msg = f"Total Humans: {num}"
channel_id = guild_data["channel_id"]
if channel_id is None:
return
botchannel_id = guild_data["botchannel_id"]
onlinechannel_id = guild_data["onlinechannel_id"]
channel_id = guild_data["channel_id"]
channel: discord.VoiceChannel = guild.get_channel(channel_id)
botchannel: discord.VoiceChannel = guild.get_channel(botchannel_id)
onlinechannel: discord.VoiceChannel = guild.get_channel(onlinechannel_id)
if channel is None:
return
name = ""
if guild_data["member_count"]:
name += "Members: {} ".format(guild.member_count)
if name == "":
name = "Stats not enabled"
name = "{} ".format(human_msg)
await channel.edit(reason="InfoChannel update", name=name)
if botcount:
name = "{} ".format(bot_msg)
await botchannel.edit(reason="InfoChannel update", name=name)
if onlinecount:
name = "{} ".format(online_msg)
await onlinechannel.edit(reason="InfoChannel update", name=name)
@listener()
async def on_member_join(self, member: discord.Member):
await self.update_infochannel(member.guild)
@ -118,3 +206,10 @@ class InfoChannel(Cog):
@listener()
async def on_member_remove(self, member: discord.Member):
await self.update_infochannel(member.guild)
@listener()
async def on_member_update(self, before: discord.Member, after: discord.Member):
onlinecount = await self.config.guild(after.guild).online_count()
if onlinecount:
if before.status != after.status:
await self.update_infochannel(after.guild)

@ -24,7 +24,7 @@ class LastSeen(Cog):
self.bot = bot
self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True)
default_global = {}
default_guild = {"enabled": True}
default_guild = {"enabled": False}
default_member = {"seen": None}
self.config.register_global(**default_global)

Loading…
Cancel
Save