Super - bot.py
user_3671787
plain_text
2 years ago
7.2 kB
3
Indexable
import nextcord from nextcord import SlashOption from nextcord.ui import Select, View import asyncio import datetime from datetime import date from dateutil.relativedelta import relativedelta import constants import gamestats import apis import roles import messages as messagesImport TOKEN = constants.TOKEN GuildID = constants.GuildID intents = nextcord.Intents.default() intents.members = True bot = nextcord.Client(intents=intents) colors = { "main": 0x50b7df, "error": 0x800000, "log": 0x50b7df } channelIDs = { "log": 1134441604506193970} categoryIDs = { } roleIDs = { "setRank": 1082385525178122341, "staff": 1135490570261893230} permissionsEmbed = constants.permissionsEmbed @bot.event async def on_ready(): print(f"{bot.user} is now online!") class gameInfoButtons(nextcord.ui.View): def __init__(self): super().__init__(timeout=None) emoji = nextcord.PartialEmoji(name="🔗") self.add_item(nextcord.ui.Button( style=nextcord.ButtonStyle.link, url=constants.GameLink, label="Link", disabled=False, emoji=emoji)) @bot.slash_command(guild_ids=[GuildID], description="Get the information about a game") async def gameinfo(interaction: nextcord.Interaction): gameStats = gamestats.getStats() embed = nextcord.Embed(title="Game Statistics", description=f""" **Playing: ** {gameStats['playing']} **Visits: ** {gameStats['visits']} **Favorites: ** {gameStats['favorited']} **Up votes: ** {gameStats['upvotes']} **Down votes: ** {gameStats['downvotes']} """, color=colors['main']) embed.set_thumbnail(url=gameStats['image']) view = gameInfoButtons() await interaction.response.send_message(embed=embed, view=view) # Roles @bot.slash_command(guild_ids=[GuildID], description="Set a users rank in the group") async def setrank(interaction: nextcord.Interaction, username: str): if interaction.user.get_role(roleIDs['setRank']): userID = apis.getID(username) if userID: # deferredInteraction = await interaction.response.defer() if apis.isGroupMember(userID): async def channelCallback(cbinteraction): for value in dropdownForHire.values: groupRank = apis.getGroupRank(userID) if groupRank['rank'] == int(value): embed = nextcord.Embed( title="Same rank", description="You cannot change the users rank to be the same as it already is.", color=colors['error']) await viewInteraction.edit(embed=embed, view=None) else: setRankResponse = await roles.setRank(username, int(value)) if setRankResponse: groupRank = apis.getGroupRank(userID) embed = nextcord.Embed( title=f"{username}'s rank has been changed to {groupRank['name']}", description=f"{username}'s rank has been changed to {groupRank['name']} by <@{interaction.user.id}>", color=colors['main']) embed.set_thumbnail(url=apis.avatar(userID)) await viewInteraction.edit(embed=embed, view=None) options = constants.setRankOptions dropdownForHire = Select( placeholder="What rank to set the user to?", options=options, max_values=1) dropdownForHire.callback = channelCallback rankView = View(timeout=None) rankView.add_item(dropdownForHire) embed = nextcord.Embed( title="Change user rank", description="Please choose what rank to role the user below.", color=colors['main']) viewInteraction = await interaction.response.send_message(embed=embed, view=rankView) else: embed = nextcord.Embed( title="User not in group", description="The user is not in the group. Please make sure they are in it and try again.") await interaction.response.send_message(embed=embed, ephemeral=True) else: embed = nextcord.Embed( title="User not found", description="Please check that the username is correct and try again later.") await interaction.response.send_message(embed=embed, ephemeral=True) else: await interaction.response.send_message(permissionsEmbed) @bot.slash_command(guild_ids=[GuildID], description="Get the messages leaderboard") async def leaderboard(interaction: nextcord.Interaction): leaderboardDict = messages.getLeaderboard() descriptionText = "" for key in leaderboardDict: descriptionText = descriptionText + \ f"<@{key}>: `{leaderboardDict[key]}` messages \n" embed = nextcord.Embed(title="Messages Leaderboard", description=descriptionText, color=colors['main']) await interaction.response.send_message(embed=embed) @bot.slash_command(guild_ids=[GuildID], description="Message history") async def messages(interaction: nextcord.Interaction, timeframe: str = SlashOption( name="time", description="Choose the time from which you want to see messages", choices=["Weekly", "BiWeekly", "Monthly", "3-Months", "6-Months", "Yearly", "All time"], required=True )): guild = bot.get_guild(GuildID) channel = guild.get_channel(1134441604506193970) messagesDict = {} afterTime = datetime.datetime.utcnow() if timeframe == "Weekly": afterTime = afterTime - datetime.timedelta(weeks=1) elif timeframe == "BiWeekly": afterTime = afterTime - datetime.timedelta(weeks=2) elif timeframe == "Monthly": afterTime = afterTime - relativedelta(months=1) elif timeframe == "3-Months": afterTime = afterTime - relativedelta(months=3) elif timeframe == "6-Months": afterTime = afterTime - relativedelta(months=6) elif timeframe == "Yearly": afterTime = afterTime - relativedelta(years=1) elif timeframe == "All time": afterTime = None async for message in channel.history(limit=None, after=afterTime): userID = str(message.author.id) if userID in messagesDict: messagesDict[userID] += 1 else: messagesDict[userID] = 1 finalText = "" sortedDict = messagesImport.sortMessages(messagesDict) for item in sortedDict: finalText += f"<@{str(item)}>: {sortedDict[item]} \n" staffRole = guild.get_role(roleIDs['staff']) for user in staffRole.members: if not str(user.id) in sortedDict: finalText += f"<@{str(user.id)}>: 0 \n" embed = nextcord.Embed( title=f"{timeframe} User messages", description=finalText, color=colors['main']) await interaction.response.send_message(embed=embed)
Editor is loading...