[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 out = message.author.mention
else: else:
out = lower[4:] out = lower[4:]
try:
await message.channel.send("Hi {}, I'm {}!".format(out, guild.me.display_name)) await message.channel.send("Hi {}, I'm {}!".format(out, guild.me.display_name))
except discord.HTTPException:
return
self.cooldown[guild.id] = datetime.now() + timedelta( self.cooldown[guild.id] = datetime.now() + timedelta(
seconds=(await guild_config.cooldown()) seconds=(await guild_config.cooldown())

@ -1,17 +1,17 @@
from typing import Any from typing import Any
import discord import discord
from redbot.core import Config, commands, checks from redbot.core import Config, commands, checks
from redbot.core.bot import Red from redbot.core.bot import Red
Cog: Any = getattr(commands, "Cog", object) Cog: Any = getattr(commands, "Cog", object)
listener = getattr(commands.Cog, "listener", None) # Trusty + Sinbad listener = getattr(commands.Cog, "listener", None) # Trusty + Sinbad
if listener is None: if listener is None:
def listener(name=None): def listener(name=None):
return lambda x: x return lambda x: x
class InfoChannel(Cog): class InfoChannel(Cog):
""" """
Create a channel with updating server info Create a channel with updating server info
@ -27,7 +27,11 @@ class InfoChannel(Cog):
default_guild = { default_guild = {
"channel_id": None, "channel_id": None,
"botchannel_id": None,
"onlinechannel_id": None,
"member_count": True, "member_count": True,
"bot_count": False,
"online_count": False,
} }
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
@ -58,7 +62,7 @@ class InfoChannel(Cog):
elif channel_id is None: elif channel_id is None:
await ctx.send("Enable info channel on this server?") await ctx.send("Enable info channel on this server?")
else: 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) msg = await self.bot.wait_for("message", check=check)
@ -74,43 +78,127 @@ class InfoChannel(Cog):
if not await ctx.tick(): if not await ctx.tick():
await ctx.send("Done!") 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): async def make_infochannel(self, guild: discord.Guild):
overwrites = {guild.default_role: discord.PermissionOverwrite(connect=False), botcount = await self.config.guild(guild).bot_count()
guild.me: discord.PermissionOverwrite(manage_channels=True, connect=True)} 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( channel = await guild.create_voice_channel(
"Placeholder", reason="InfoChannel make", overwrites=overwrites "Placeholder", reason="InfoChannel make", overwrites=overwrites
) )
await self.config.guild(guild).channel_id.set(channel.id) 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) await self.update_infochannel(guild)
async def delete_infochannel(self, guild: discord.Guild, channel: discord.VoiceChannel): 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") 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() await self.config.guild(guild).clear()
async def update_infochannel(self, guild: discord.Guild): async def update_infochannel(self, guild: discord.Guild):
guild_data = await self.config.guild(guild).all() 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"] channel_id = guild_data["channel_id"]
if channel_id is None: if channel_id is None:
return 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) 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"]: if guild_data["member_count"]:
name += "Members: {} ".format(guild.member_count) name = "{} ".format(human_msg)
if name == "":
name = "Stats not enabled"
await channel.edit(reason="InfoChannel update", name=name) 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() @listener()
async def on_member_join(self, member: discord.Member): async def on_member_join(self, member: discord.Member):
await self.update_infochannel(member.guild) await self.update_infochannel(member.guild)
@ -118,3 +206,10 @@ class InfoChannel(Cog):
@listener() @listener()
async def on_member_remove(self, member: discord.Member): async def on_member_remove(self, member: discord.Member):
await self.update_infochannel(member.guild) 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.bot = bot
self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True) self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True)
default_global = {} default_global = {}
default_guild = {"enabled": True} default_guild = {"enabled": False}
default_member = {"seen": None} default_member = {"seen": None}
self.config.register_global(**default_global) self.config.register_global(**default_global)

Loading…
Cancel
Save