First official build of bot!

Co-authored-by: iakrules <64628083+iakrules@noreply.github.com>
This commit is contained in:
rzmk 2021-08-01 14:24:02 -04:00
parent 953c89ead0
commit 2b8e2345f9
32 changed files with 1164 additions and 383 deletions

View file

@ -1,59 +1,56 @@
import os
import discord
import DiscordUtils
import datetime
from dateutil.parser import parse
import requests
from discord.ext import commands
class CalendarCog(commands.Cog):
def __init__(self, client):
self.client = client
# Commands
@commands.command()
async def events(self, ctx):
"""Gets all upcoming events from Google Calendar"""
# Check if environment variable exists
if not os.environ.get("GOOGLE_CALENDAR_ENDPOINT"):
return await ctx.send("No Google Calendar endpoint specified!")
# Get upcoming events data from calendar
current_time = datetime.datetime.utcnow()
formatted_time = current_time.isoformat("T") + "Z"
calendar = os.environ.get("GOOGLE_CALENDAR_ENDPOINT") + "&timeMin=" + formatted_time
data = requests.get(calendar).json()
# Check if there are any events
if not data["items"]:
return await ctx.send("There are no upcoming events!")
# Get all upcoming events as a list
list_of_events = data["items"]
embeds = []
for event in list_of_events:
# Create data set
title = event["summary"]
start_time = event["start"]["dateTime"]
description = "No description."
if "description" in event:
description = event["description"]
formatted_start_time = datetime.datetime.strftime(parse(start_time), format="%B %d, %Y")
# Create embed for single event and add to embeds list
embed = discord.Embed(color=ctx.author.color, title=title, description=description)
embed.add_field(name="Starts On", value=formatted_start_time, inline=True)
embeds.append(embed)
# Create paginator
paginator = DiscordUtils.Pagination.CustomEmbedPaginator(ctx)
paginator.add_reaction('⏮️', "first")
paginator.add_reaction('', "back")
paginator.add_reaction('', "next")
paginator.add_reaction('⏭️', "last")
await paginator.run(embeds)
def setup(client):
client.add_cog(CalendarCog(client))
import os
import discord
import DiscordUtils
import datetime
from dateutil.parser import parse
import requests
from discord.ext import commands
class CalendarCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Commands
@commands.command()
async def events(self, ctx):
"""Gets all upcoming events from Google Calendar"""
# Check if environment variable exists
if not os.environ.get("GOOGLE_CALENDAR_ENDPOINT"):
return await ctx.send("No Google Calendar endpoint specified!")
# Get upcoming events data from calendar
current_time = datetime.datetime.utcnow()
formatted_time = current_time.isoformat("T") + "Z"
calendar = os.environ.get("GOOGLE_CALENDAR_ENDPOINT") + "&timeMin=" + formatted_time
data = requests.get(calendar).json()
# Check if there are any events
if not data["items"]:
return await ctx.send("There are no upcoming events!")
# Get all upcoming events as a list
list_of_events = data["items"]
embeds = []
for event in list_of_events:
# Create data set
title = event["summary"]
start_time = event["start"]["dateTime"]
description = event["description"] if "description" in event else "No description."
formatted_start_time = datetime.datetime.strftime(parse(start_time), format="%B %d, %Y")
# Create embed for single event and add to embeds list
embed = discord.Embed(color=ctx.author.color, title=title, description=description)
embed.add_field(name="Starts On", value=formatted_start_time, inline=True)
embeds.append(embed)
# Create paginator
paginator = DiscordUtils.Pagination.CustomEmbedPaginator(ctx)
paginator.add_reaction('⏮️', "first")
paginator.add_reaction('', "back")
paginator.add_reaction('', "next")
paginator.add_reaction('⏭️', "last")
await paginator.run(embeds)
def setup(bot):
bot.add_cog(CalendarCog(bot))

30
cogs/info/infoCog.py Normal file
View file

@ -0,0 +1,30 @@
import discord
from discord.ext import commands
class InfoCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Commands
@commands.command(aliases=['botinfo'])
async def info(self, ctx):
embed = discord.Embed(
title=f"Rutgers Esports Bot <:RutgersEsports:608498339192766505>",
description=(
f'Rutgers Esports Bot is the official Discord bot\n'
'for handling all internal Rutgers Esports operations.\n\n'
'🔗 Check out Rutgers Esports '
'[here](https://linktr.ee/RutgersEsports).\n'
'🤖 To add this bot to your server use '
'[this link](https://bit.ly/rutgers-esports-bot).\n'
"⭐ Star our repo on GitHub [here](https://github.com/rutgersesports/discord-bot)."
),
color=0xC94949
)
embed.set_thumbnail(url=ctx.bot.user.avatar_url)
await ctx.send(embed=embed)
def setup(bot):
bot.add_cog(InfoCog(bot))

View file

@ -1,16 +1,16 @@
import discord
from discord.ext import commands
class PingCog(commands.Cog):
def __init__(self, client):
self.client = client
# Commands
@commands.command(aliases=['latency'])
async def ping(self, ctx):
"""Returns the bot client latency"""
await ctx.send(f'Pong! {round(self.client.latency * 1000)}ms')
def setup(client):
client.add_cog(PingCog(client))
import discord
from discord.ext import commands
class PingCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Commands
@commands.command(aliases=['latency'])
async def ping(self, ctx):
"""Returns the bot bot latency"""
await ctx.send(f'Pong! {round(self.bot.latency * 1000)}ms')
def setup(bot):
bot.add_cog(PingCog(bot))

35
cogs/info/serverCog.py Normal file
View file

@ -0,0 +1,35 @@
import discord
from discord.ext import commands
class ServerCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Commands
@commands.command(aliases=['server', 'sinfo'])
async def serverinfo(self, ctx):
"""Get information about the current server"""
guild = ctx.guild
roles = str(len(guild.roles))
emojis = str(len(guild.emojis))
vchannels = str(len(guild.voice_channels))
tchannels = str(len(guild.text_channels))
embed = discord.Embed(title='Server info', description=guild.name, color=ctx.guild.get_member(ctx.bot.user.id).color)
embed.set_thumbnail(url=guild.icon_url)
embed.add_field(name='ID', value=guild.id, inline=True)
embed.add_field(name='Owner', value=guild.owner, inline=True)
embed.add_field(name='Members', value=guild.member_count, inline=True)
embed.add_field(name='Text channels', value=tchannels, inline=True)
embed.add_field(name='Voice channels', value=vchannels, inline=True)
embed.add_field(name='Created on', value=guild.created_at.strftime('%B %d, %Y'), inline=True)
embed.add_field(name='Region', value=guild.region, inline=True)
embed.add_field(name='Roles', value=roles, inline=True)
embed.add_field(name='Verification', value=guild.verification_level, inline=True)
await ctx.send(embed=embed)
def setup(bot):
bot.add_cog(ServerCog(bot))

44
cogs/info/userCog.py Normal file
View file

@ -0,0 +1,44 @@
import discord
from discord.ext import commands
class UserCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Commands
@commands.command(aliases=['whois'])
async def userinfo(self, ctx, member: discord.Member = None):
"""Get information about a given user"""
# Gather data
member = ctx.author if not member else member
roles = [role for role in member.roles]
default_role = discord.utils.get(member.guild.roles, name='@everyone')
role_mentions = [f'{role.mention}' for role in sorted(member.roles, key=lambda x: x.position, reverse=True) if role != default_role]
all_perms = [x for x in dir(ctx.channel.permissions_for(member))]
permissions = []
for perm in all_perms:
perm_name = perm
if getattr(ctx.channel.permissions_for(member), perm_name) is True:
permissions.append(perm_name.title().replace("_", " ").replace("Tts", "TTS"))
# Create embed
embed = discord.Embed(description = member.mention, color = member.color, timestamp = ctx.message.created_at)
embed.set_author(name = member, icon_url = member.avatar_url)
embed.set_thumbnail(url = member.avatar_url)
embed.set_footer(text = member.id)
embed.add_field(name = 'Joined', value = member.joined_at.strftime('%a, %d %B %Y, %I:%M %p UTC'), inline=True)
embed.add_field(name = 'Registered', value = member.created_at.strftime('%a, %d %B %Y, %I:%M %p UTC'), inline=True)
embed.add_field(name=f'Roles [{len(roles)}]', value=", ".join(role_mentions)+f', {default_role}', inline=False)
embed.add_field(name=f'Permissions [{len(permissions)}]', value=", ".join(permissions), inline=False)
embed.add_field(name='Nickname', value=member.nick if hasattr(member, 'nick') else 'None', inline=True)
await ctx.send(embed = embed)
def setup(bot):
bot.add_cog(UserCog(bot))