diff --git a/Bot.py b/Bot.py index a3440ea..4149600 100644 --- a/Bot.py +++ b/Bot.py @@ -1,5 +1,5 @@ """ Beardless Bot """ -__version__ = "Full Release 1.6.12" +__version__ = "Full Release 1.6.13" import asyncio from random import choice, randint @@ -403,7 +403,7 @@ async def cmdAnimal(ctx, breed=None, *args): if species == "moose" or (breed and breed.lower() == "moose"): await ctx.send( file=discord.File( - f"resources/images/moose/moose{randint(1, 72)}.jpg" + f"resources/images/moose/moose{randint(1, 75)}.jpg" ) ) return @@ -512,13 +512,11 @@ async def cmdMute(ctx, target=None, duration=None, *args): report = "Muted " + target.mention report += (" for " + duration + mString + ".") if mTime else "." emb = misc.bbEmbed("Beardless Bot Mute", report).set_author( - name=str(ctx.author), icon_url=ctx.author.avatar_url + name=ctx.author, icon_url=ctx.author.avatar_url ) if args: emb.add_field( - name="Mute Reason:", - value=" ".join(args), - inline=False + name="Mute Reason:", value=" ".join(args), inline=False ) await ctx.send(embed=emb) # Iterate through channels, make Muted unable to send msgs @@ -585,11 +583,10 @@ async def cmdPurge(ctx, num=None, *args): try: mNum = int(num) except ValueError: - await ctx.send( - embed=misc.bbEmbed( - "Beardless Bot Purge", "Invalid message number!" - ) + emb = misc.bbEmbed( + "Beardless Bot Purge", "Invalid message number!" ) + await ctx.send(embed=emb) else: await ctx.channel.purge( limit=mNum + 1, check=lambda msg: not msg.pinned @@ -743,7 +740,9 @@ async def cmdBrawlclaim(ctx, profUrl="None", *args): else: report = "Invalid profile URL/Brawlhalla ID! " if profUrl else "" report += brawl.badClaim - await ctx.send(embed=misc.bbEmbed("Beardless Bot Brawlhalla Rank", report)) + await ctx.send( + embed=misc.bbEmbed("Beardless Bot Brawlhalla Rank", report) + ) @bot.command(name="brawlrank") @@ -762,7 +761,9 @@ async def cmdBrawlrank(ctx, target=None, *args): except Exception as err: print(err) report = brawl.reqLimit - await ctx.send(embed=misc.bbEmbed("Beardless Bot Brawlhalla Rank", report)) + await ctx.send( + embed=misc.bbEmbed("Beardless Bot Brawlhalla Rank", report) + ) @bot.command(name="brawlstats") @@ -802,7 +803,9 @@ async def cmdBrawlclan(ctx, target=None, *args): except Exception as err: print(err) report = brawl.reqLimit - await ctx.send(embed=misc.bbEmbed("Beardless Bot Brawlhalla Clan", report)) + await ctx.send( + embed=misc.bbEmbed("Beardless Bot Brawlhalla Clan", report) + ) @bot.command(name="brawllegend") diff --git a/README.MD b/README.MD index 2d19c62..ffa41dc 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,6 @@ # Beardless Bot -### Full Release 1.6.12 +### Full Release 1.6.13 A Discord bot supporting gambling (coin flips and blackjack), a currency system, fun facts, and more. diff --git a/bb_test.py b/bb_test.py index 0dbc566..9013241 100644 --- a/bb_test.py +++ b/bb_test.py @@ -135,9 +135,7 @@ def test_dice(): sideRoll = misc.roll(message) assert 1 <= sideRoll and sideRoll <= sideNum assert ( - misc.rollReport(message, user) - .description - .startswith("You got") + misc.rollReport(message, user).description.startswith("You got") ) sideRoll = misc.roll("d20-4") assert -3 <= sideRoll and sideRoll <= 16 @@ -560,16 +558,13 @@ def test_animal(): "b'\\xff\\xd8\\xff\\xe1\\tPh" ) for animalName in misc.animalList[:-4]: - print(animalName) r = requests.get(misc.animal(animalName)) assert r.ok and r.headers["content-type"] in imageTypes for animalName in misc.animalList[-4:]: - print(animalName) # Koala, Bird, Raccoon, Kangaroo APIs lack a content-type field; # check if URL points to an image instead r = requests.get(misc.animal(animalName)) - print(str(r.content)[:30]) assert r.ok and any( str(r.content).startswith(signature) for signature in imageSigs ) diff --git a/brawl.py b/brawl.py index ee152b1..f26d481 100644 --- a/brawl.py +++ b/brawl.py @@ -41,6 +41,20 @@ "eu": 0 } +thumbBase = ( + "https://static.wikia.nocookie.net/brawlhalla_gamepedia/images/" + "{}/Banner_Rank_{}.png/revision/latest/scale-to-width-down/{}" +) + +rankedThumbnails = { + "Diamond": ("4/46", "Diamond", "84?cb=20161110140154"), + "Platinum": ("6/6e", "Platinum", "102?cb=20161110140140"), + "Gold": ("6/69", "Gold", "109?cb=20161110140126"), + "Silver": ("5/5c", "Silver", "119?cb=20161110140055"), + "Bronze": ("a/a6", "Bronze", "112?cb=20161110140114"), + "Tin": ("e/e1", "Tin", "112?cb=20161110140036") +} + def pingMsg(target: discord.Member, h: int, m: int, s: int) -> str: def plural(t): @@ -57,8 +71,7 @@ def randomBrawl(ranType: str, key: str = None) -> discord.Embed: if ranType in ("legend", "weapon"): if ranType == "legend": choices = tuple( - legend["legend_name_key"].title() - for legend in fetchLegends() + legend["legend_name_key"].title() for legend in fetchLegends() ) else: choices = ( @@ -82,8 +95,7 @@ def randomBrawl(ranType: str, key: str = None) -> discord.Embed: f"Your {ranType} is {choice(choices)}." ) return bbEmbed( - "Brawlhalla Randomizer", - "Please do !random legend or !random weapon." + "Brawlhalla Randomizer", "Please do !random legend or !random weapon." ) @@ -118,7 +130,7 @@ def getBrawlID(brawlKey: str, profileURL: str) -> int: .format(steamID, brawlKey) ) return r.json()["brawlhalla_id"] - except Exception: + except KeyError: return None @@ -218,7 +230,7 @@ def getRank(target: discord.Member, brawlKey: str) -> discord.Embed: emb = ( bbEmbed(f"{r['name']}, {r['region']}") .set_footer(text=f"Brawl ID {brawlID}") - .set_author(name=str(target), icon_url=target.avatar_url) + .set_author(name=target, icon_url=target.avatar_url) ) if "games" in r: winRate = round(r["wins"] / r["games"] * 100, 1) @@ -240,6 +252,9 @@ def getRank(target: discord.Member, brawlKey: str) -> discord.Embed: for key, value in rankColors.items(): if key in r["tier"]: emb.color = value + emb.set_thumbnail( + url=thumbBase.format(*rankedThumbnails[key]) + ) break if "2v2" in r: twosTeam = None @@ -251,25 +266,24 @@ def getRank(target: discord.Member, brawlKey: str) -> discord.Embed: emb.add_field( name="Ranked 2s", value=( - "**{}\n{}** ({} / {} Peak)\n" - "{} W / {} L / {}% winrate" - ).format( - twosTeam["teamname"], - twosTeam["tier"], - twosTeam["rating"], - twosTeam["peak_rating"], - twosTeam["wins"], - twosTeam["games"] - twosTeam["wins"], - round(twosTeam["wins"] / twosTeam["games"] * 100, 1) + f"**{twosTeam['teamname']}\n" + f"{twosTeam['tier']}** ({twosTeam['rating']} /" + f" {twosTeam['peak_rating']} Peak)\n{twosTeam['wins']}" + f" W / {twosTeam['games'] - twosTeam['wins']} L /" + f" {round(twosTeam['wins'] / twosTeam['games'] * 100, 1)}" + "% winrate" ) ) if ( - emb.color == discord.Color(0xFFF994) + emb.color.value == 0xFFF994 or twosTeam["rating"] > r["rating"] ): for key, value in rankColors.items(): if key in twosTeam["tier"]: emb.color = value + emb.set_thumbnail( + url=thumbBase.format(*rankedThumbnails[key]) + ) break return emb @@ -299,7 +313,7 @@ def getStats(target: discord.Member, brawlKey: str) -> discord.Embed: .set_footer(text=f"Brawl ID {brawlID}") .add_field(name="Name", value=r["name"]) .add_field(name="Overall W/L", value=embVal) - .set_author(name=str(target), icon_url=target.avatar_url) + .set_author(name=target, icon_url=target.avatar_url) ) if "legends" in r: topUsed = topWinrate = topDPS = topTTK = None @@ -382,15 +396,6 @@ def getClan(target: discord.Member, brawlKey: str) -> discord.Embed: ).set_footer(text=f"Clan ID {r['clan_id']}") for i in range(min(len(r["clan"]), 9)): member = r["clan"][i] - emb.add_field( - name=member["name"], - value="{} ({} xp)\nJoined {}" - .format( - member["rank"], - member["xp"], - str(datetime.fromtimestamp(member["join_date"]))[:-9] - ) - ) emb.add_field( name=member["name"], value=( diff --git a/bucks.py b/bucks.py index 2b8a090..86eb3d4 100644 --- a/bucks.py +++ b/bucks.py @@ -34,17 +34,47 @@ " going, {}. Type !blackjack to start one." ) -# Blackjack class. New Instance is made for each game of Blackjack -# and is kept around until the player finishes the game. -# An active Instance for a given user prevents the creation of a new -# Instance. Instances are server-agnostic. - class Instance: + """ + Blackjack game instance. New instance created for each game. + Instances are server-agnostic; only one game allowed per player + across all servers. + + Attributes: + cardVals (tuple): Blackjack values for each card + user (discord.User): The user who is playing this game + bet (int): The number of BeardlessBucks the user is betting + cards (list): The list of cards the user has been dealt + dealerUp (int): The card the dealer is showing face-up + dealerSum (int): The running count of the dealer's cards + message (str): The report to be sent in the Discord channel + + Methods: + perfect(): + Checks if the user has reached a Blackjack + startingHand(debugBlackjack=False, debugDoubleAces=False): + Deals the user a starting hand of 2 cards + deal(debug=False): + Deals the user a card + checkBust(): + Checks if the user has gone over 21 + stay(): + Determines the game result after ending the gmae + cardName(card): + Gives the human-friendly name of a given card + """ cardVals = (2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11) - def __init__(self, user: discord.User, bet: int, fix: bool = False): + def __init__(self, user: discord.User, bet: int, debug: bool = False): + """ + Args: + user (discord.User): The user who is playing this game + bet (int): The number of BeardlessBucks the user is betting + debug (bool): Whether to fix the game while testing + (default is False) + """ self.user = user self.bet = bet self.cards = [] @@ -52,14 +82,27 @@ def __init__(self, user: discord.User, bet: int, fix: bool = False): self.dealerSum = self.dealerUp while self.dealerSum < 17: self.dealerSum += randint(1, 10) - self.message = self.startingHand(fix) + self.message = self.startingHand(debug) def perfect(self) -> bool: + """Checks if the user has reached a Blackjack.""" return sum(self.cards) == 21 def startingHand( - self, fixBlackjack: bool = False, fixDoubleAces: bool = False + self, debugBlackjack: bool = False, debugDoubleAces: bool = False ) -> str: + """ + Deals the user a starting hand of 2 cards. + + Args: + debugBlackjack (bool): Used to test hitting 21 + (default is False) + debugDoubleAces(bool): Used to test dealing two Aces + (default is False) + + Returns: + str: the message to show the user + """ self.cards.append(choice(Instance.cardVals)) self.cards.append(choice(Instance.cardVals)) message = ( @@ -69,15 +112,14 @@ def startingHand( self.cardName(self.cards[1]), sum(self.cards) ) - if self.perfect() or fixBlackjack: - # "fixBlackjack" used to test being dealt a blackjack + if self.perfect() or debugBlackjack: message += f"You hit 21! You win, {self.user.mention}!" else: message += ( f"The dealer is showing {self.dealerUp}," " with one card face down. " ) - if self.checkBust() or fixDoubleAces: + if self.checkBust() or debugDoubleAces: # Case only fires if you're dealt two aces or testing this self.cards[1] = 1 self.bet *= -1 @@ -91,7 +133,17 @@ def startingHand( ) return message - def deal(self, fix: bool = False) -> str: + def deal(self, debug: bool = False) -> str: + """ + Deals the user a single card. + + Args: + debug (bool): Used to test hitting 21 + (default is False) + + Returns: + str: the message to show the user + """ dealt = choice(Instance.cardVals) self.cards.append(dealt) self.message = ( @@ -114,7 +166,7 @@ def deal(self, fix: bool = False) -> str: ).format(", ".join(str(card) for card in self.cards), self.dealerUp) if self.checkBust(): self.message += f" You busted. Game over, {self.user.mention}." - elif self.perfect() or fix: # "fix" used to test this line + elif self.perfect() or debug: self.message += f" You hit 21! You win, {self.user.mention}!" else: self.message += ( @@ -124,12 +176,14 @@ def deal(self, fix: bool = False) -> str: return self.message def checkBust(self) -> bool: + """Checks if a user has gone over 21. Returns bool.""" if sum(self.cards) > 21: self.bet *= -1 return True return False def stay(self) -> int: + """Ends the game. Returns int: 1 if user's bal changed, else 0.""" change = 1 self.message = "The dealer has a total of {}." if sum(self.cards) > self.dealerSum and not self.checkBust(): @@ -164,6 +218,7 @@ def stay(self) -> int: @staticmethod def cardName(card: int) -> str: + """Returns the human-friendly name of a card based on int value.""" if card == 10: return "a " + choice(("10", "Jack", "Queen", "King")) if card == 11: @@ -173,25 +228,27 @@ def cardName(card: int) -> str: return "a " + str(card) -# BeardlessBucks modifying/referencing methods: -# writeMoney() is the helper method for checking or -# modifying a given user's balance. -# register() is used for signing up a new user -# to the BeardlessBucks system. -# balance() is essentially a more user-friendly wrapper for -# writeMoney's balance lookup -# reset() is used for resetting a given user to 200 BeardlessBucks. -# leaderboard() finds the top min(len(money.csv), 10) -# users by balance in O(nlogn) time. -# flip() gambles a certain number of BeardlessBucks -# on a coin toss (randint(0,1)). - - def writeMoney( member: discord.User, amount, writing: bool, adding: bool ) -> tuple: - # "writing" is True if you want to modify money.csv; - # "adding" is True if you want to add an amount to a member's balance + """ + Helper method for checking or modifying a user's BeardlessBucks balance. + + Args: + member (discord.User): The target user + amount (int or str): The amount to change member's balance by + writing (bool): Whether to modify member's balance + adding (bool): Whether to add to or overwrite member's balance + + Returns: + int: the status of calling the method: + -1 means member's username contains a comma; + -2 means member doesn't have enough to bet that much; + 0 means member's balance has not been changed; + 1 means it has; + 2 means this call has just registered them. + str: an additional report, if necessary. + """ if "," in member.name: return -1, commaWarn.format(member.mention) with open("resources/money.csv") as csvfile: @@ -202,30 +259,40 @@ def writeMoney( newBank = str(int(row[1]) + amount if adding else amount) if writing and row[1] != newBank: if int(row[1]) + amount < 0: - # Don't have enough to bet that much + # Don't have enough to bet that much: return -2, None newLine = ",".join((row[0], newBank, str(member))) with open("resources/money.csv", "r") as oldMoney: - oldMoney = ( + newMoney = ( "".join([i for i in oldMoney]) .replace(",".join(row), newLine) ) - with open("resources/money.csv", "w") as money: - money.writelines(oldMoney) + with open("resources/money.csv", "w") as money: + money.writelines(newMoney) return 1, newBank - return 0, int(row[1]) # no change in balance - with open("resources/money.csv", "a") as money: - money.write(f"\r\n{member.id},300,{member}") - return ( - 2, - ( - "Successfully registered. You have 300" - f" BeardlessBucks, {member.mention}." - ) + # No change in balance: + return 0, int(row[1]) + with open("resources/money.csv", "a") as money: + money.write(f"\r\n{member.id},300,{member}") + return ( + 2, + ( + "Successfully registered. You have 300" + f" BeardlessBucks, {member.mention}." ) + ) def register(target: discord.User) -> discord.Embed: + """ + Register a new user for BeardlessBucks. + + Args: + target (discord.User): The user to register + + Returns: + discord.Embed: the report of the target's registration. + """ result, bonus = writeMoney(target, 300, False, False) report = ( "You are already in the system! Hooray! You" @@ -237,9 +304,19 @@ def register(target: discord.User) -> discord.Embed: def balance(target: discord.Member, msg: discord.Message) -> discord.Embed: + """ + Checks a user's BeardlessBucks balance. + + Args: + target (discord.User): The user whose balance is to be checked + msg (discord.Message): The message sent that called this command + + Returns: + discord.Embed: the report of the target's balance. + """ report = ( - "Invalid user! Please @ a user when you do !balance " - "(or enter their username), or do !balance without a target" + "Invalid user! Please @ a user when you do !balance (or" + " enter their username), or do !balance without a target" f" to see your own balance, {msg.author.mention}." ) if not isinstance(target, discord.User): @@ -254,6 +331,15 @@ def balance(target: discord.Member, msg: discord.Message) -> discord.Embed: def reset(target: discord.User) -> discord.Embed: + """ + Resets a user's Beardless balance to 200. + + Args: + target (discord.User): The user to reset + + Returns: + discord.Embed: the report of the target's balance reset. + """ result, bonus = writeMoney(target, 200, True, False) report = f"You have been reset to 200 BeardlessBucks, {target.mention}." if result in (-1, 2): @@ -262,8 +348,21 @@ def reset(target: discord.User) -> discord.Embed: def leaderboard(target: discord.User = None) -> discord.Embed: - # Runtime = 2 * |money.csv| + runtime of sorted(money.csv) + 10 - # = 2 * O(n) + O(nlogn) + 10 = O(nlogn) + """ + Finds the top min(len(money.csv), 10) users + by balance in money.csv. + Runtime = 2 * |money.csv| + runtime of sorted(money.csv) + 10 + = 2 * O(n) + O(nlogn) + 10 = O(nlogn). + + Args: + target (discord.User): The user calling leaderboard() + (default is None) + + Returns: + discord.Embed: a summary of the richest users by balance. + If target is somewhere on the leaderboard, also + reports target's position and balance. + """ diction = {} emb = bbEmbed("BeardlessBucks Leaderboard") with open("resources/money.csv") as csvfile: @@ -274,28 +373,37 @@ def leaderboard(target: discord.User = None) -> discord.Embed: # Sort by value for each key in diction, which is BeardlessBucks balance sortedDict = OrderedDict(sorted(diction.items(), key=itemgetter(1))) if target: + users = list(sortedDict.keys()) try: - users = list(sortedDict.keys()) pos = len(users) - users.index(target.name) except ValueError: pos = None for i in range(min(len(sortedDict), 10)): head, body = sortedDict.popitem() - emb.add_field( - name=(str(i + 1) + ". " + head), - value=str(body), - inline=(i != min(len(sortedDict), 10) - 1) - ) + lastEntry = (i != min(len(sortedDict), 10) - 1) + emb.add_field(name=f"{i + 1}. {head}", value=body, inline=lastEntry) if target and pos: - emb.add_field(name=f"{target.name}'s position:", value=str(pos)) + emb.add_field(name=f"{target.name}'s position:", value=pos) emb.add_field( - name=f"{target.name}'s balance:", - value=str(sortedDict[target.name]) + name=f"{target.name}'s balance:", value=sortedDict[target.name] ) return emb -def flip(author: discord.user, bet: str, fix: bool = False) -> str: +def flip(author: discord.user, bet: str, debug: bool = False) -> str: + """ + Gambles a certain number of BeardlessBucks on a coin toss. + + Args: + author (discord.User): The user who is gambling + bet (str): The amount author is wagering + debug (bool): Whether to fix the outcome of the flip. + Only used for testing in bb_test.py. + (default is False) + + Returns: + str: A report of the outcome and how author's balance changed. + """ heads = randint(0, 1) report = ( "Invalid bet. Please choose a number greater than or equal" @@ -309,9 +417,7 @@ def flip(author: discord.user, bet: str, fix: bool = False) -> str: bet = int(bet) except ValueError: bet = -1 - if (isinstance(bet, str) and "all" in bet) or ( - isinstance(bet, int) and bet >= 0 - ): + if (isinstance(bet, str) and "all" in bet) or (bet >= 0): result, bank = writeMoney(author, 300, False, False) if result == 2: report = ( @@ -325,13 +431,12 @@ def flip(author: discord.user, bet: str, fix: bool = False) -> str: "You do not have enough BeardlessBucks to bet that much, {}!" ) else: - if isinstance(bet, int) and (fix or not heads): - # Fix just used to help test + if isinstance(bet, int) and (debug or not heads): bet *= -1 result, bonus = writeMoney(author, bet, True, True) if result == 2: report = newUserMsg - elif heads or fix: + elif heads or debug: report = ( "Heads! You win! Your winnings have" " been added to your balance, {}." @@ -350,6 +455,19 @@ def flip(author: discord.user, bet: str, fix: bool = False) -> str: def blackjack(author: discord.User, bet: str) -> str: + """ + Gambles a certain number of BeardlessBucks on blackjack. + + Args: + author (discord.User): The user who is gambling + bet (str): The amount author is wagering + + Returns: + str: A report of the outcome and how author's balance changed. + bucks.Instance: If there is still a game to play, returns + the object representing the game of blackjack + author is playing. + """ game = None report = ( "Invalid bet. Please choose a number greater than or equal" @@ -360,9 +478,7 @@ def blackjack(author: discord.User, bet: str) -> str: bet = int(bet) except ValueError: bet = -1 - if (isinstance(bet, str) and bet == "all") or ( - isinstance(bet, int) and bet >= 0 - ): + if (isinstance(bet, str) and bet == "all") or (bet >= 0): result, bank = writeMoney(author, 300, False, False) if result == 2: report = ( @@ -371,10 +487,7 @@ def blackjack(author: discord.User, bet: str) -> str: ) elif result == -1: report = bank - elif not ( - isinstance(bet, str) - or (isinstance(bet, int) and result == 0 and bet <= bank) - ): + elif isinstance(bet, int) and bet > bank: report = ( "You do not have enough BeardlessBucks to bet that much, {}!" ) diff --git a/logs.py b/logs.py index 8322de3..b036a40 100644 --- a/logs.py +++ b/logs.py @@ -19,7 +19,7 @@ def logDeleteMsg(msg: discord.Message) -> discord.Embed: f"**{msg.channel.mention}\n{contCheck(msg)}", 0xFF0000, True - ).set_author(name=str(msg.author), icon_url=msg.author.avatar_url) + ).set_author(name=msg.author, icon_url=msg.author.avatar_url) def logPurge(msg: discord.Message, msgList: list) -> discord.Embed: @@ -43,8 +43,7 @@ def logEditMsg( True ) .set_author( - name=str(before.author), - icon_url=before.author.avatar_url + name=before.author, icon_url=before.author.avatar_url ) .add_field(name="Before:", value=before.content, inline=False) .add_field( @@ -64,7 +63,7 @@ def logClearReacts(msg: discord.Message, reactions: list) -> discord.Embed: 0xFF0000, True ) - .set_author(name=str(msg.author), icon_url=msg.author.avatar_url) + .set_author(name=msg.author, icon_url=msg.author.avatar_url) .add_field( name="Message content:", value=contCheck(msg) + f"\n[Jump to Message]({msg.jump_url})" @@ -117,7 +116,7 @@ def logMemberNickChange( ) -> discord.Embed: return ( bbEmbed("", f"Nickname of {after.mention} changed.", 0xFFFF00, True) - .set_author(name=str(after), icon_url=after.avatar_url) + .set_author(name=after, icon_url=after.avatar_url) .add_field(name="Before:", value=before.nick, inline=False) .add_field(name="After:", value=after.nick, inline=False) ) @@ -138,7 +137,7 @@ def logMemberRolesChange( break return bbEmbed( "", f"Role {newRole.mention} {verb} {after.mention}.", color, True - ).set_author(name=str(after), icon_url=after.avatar_url) + ).set_author(name=after, icon_url=after.avatar_url) def logBan(member: discord.Member) -> discord.Embed: @@ -180,10 +179,10 @@ def logMute( f"Muted {member.mention}{mid} in {message.channel.mention}.", 0xFF0000, True - ).set_author(name=str(message.author), icon_url=message.author.avatar_url) + ).set_author(name=message.author, icon_url=message.author.avatar_url) def logUnmute(member: discord.Member, author: discord.Member) -> discord.Embed: return bbEmbed( "Beardless Bot Mute", f"Unmuted {member.mention}.", 0x00FF00, True - ).set_author(name=str(author), icon_url=author.avatar_url) + ).set_author(name=author, icon_url=author.avatar_url) diff --git a/misc.py b/misc.py index fa058b3..62f1fbd 100644 --- a/misc.py +++ b/misc.py @@ -239,7 +239,7 @@ def info(target: discord.Member, msg: discord.Message) -> discord.Embed: target.activity.name if target.activity else "", target.color ) - .set_author(name=str(target), icon_url=target.avatar_url) + .set_author(name=target, icon_url=target.avatar_url) .set_thumbnail(url=target.avatar_url) .add_field( name="Registered for Discord on", @@ -279,7 +279,7 @@ def av(target: discord.Member, msg: discord.Message) -> discord.Embed: return ( bbEmbed(col=target.color) .set_image(url=target.avatar_url) - .set_author(name=str(target), icon_url=target.avatar_url) + .set_author(name=target, icon_url=target.avatar_url) ) return bbEmbed( "Invalid target!", @@ -366,7 +366,7 @@ def hints() -> discord.Embed: hints = f.read().splitlines() emb = bbEmbed("Hints for Beardless Bot's Secret Word") for i in range(len(hints)): - emb.add_field(name=str(i + 1), value=hints[i]) + emb.add_field(name=i + 1, value=hints[i]) return emb diff --git a/resources/claimedProfs.json b/resources/claimedProfs.json index fe4c7f5..362d54a 100644 --- a/resources/claimedProfs.json +++ b/resources/claimedProfs.json @@ -75,5 +75,7 @@ "745368899838804139": 72512301, "304996008448753665": 9896074, "817465470856069210": 64867210, - "287680923607105539": 9482272 + "287680923607105539": 9482272, + "406076896682442752": 7798186, + "759156148795867167": 70795325 } \ No newline at end of file diff --git a/resources/images/moose/moose73.jpg b/resources/images/moose/moose73.jpg new file mode 100644 index 0000000..ee6ece9 Binary files /dev/null and b/resources/images/moose/moose73.jpg differ diff --git a/resources/images/moose/moose74.jpg b/resources/images/moose/moose74.jpg new file mode 100644 index 0000000..bbb9fdb Binary files /dev/null and b/resources/images/moose/moose74.jpg differ diff --git a/resources/images/moose/moose75.jpg b/resources/images/moose/moose75.jpg new file mode 100644 index 0000000..9318c54 Binary files /dev/null and b/resources/images/moose/moose75.jpg differ diff --git a/resources/images/moose/moose76.jpg b/resources/images/moose/moose76.jpg new file mode 100644 index 0000000..d4696e8 Binary files /dev/null and b/resources/images/moose/moose76.jpg differ diff --git a/resources/images/moose/moose77.jpg b/resources/images/moose/moose77.jpg new file mode 100644 index 0000000..9ae30ea Binary files /dev/null and b/resources/images/moose/moose77.jpg differ diff --git a/resources/money.csv b/resources/money.csv index e4f349c..3747f40 100644 --- a/resources/money.csv +++ b/resources/money.csv @@ -334,7 +334,7 @@ 735436444134277140,400,AyoBlaze#2395 462092912390438922,300,NinjaTim60#7263 661164105994076171,69,Billie Eyelash#3685 -196354892208537600,410,Captain No-Beard#7511 +196354892208537600,400,Captain No-Beard#7511 689174104925929597,300,Sharker#5377 699783670768205884,300,Kaanav#3110 441012860588654633,240,Aura#0230 @@ -348,7 +348,7 @@ 831580718358200344,413,Evilychee#6693 737945994679025675,300,SpaceGod#3861 709698228987363339,200,Sir Theodore lll#2817 -753094428813557861,320,DKeane120#2084 +753094428813557861,350,DKeane120#2084 569218129532682250,2,fryfry#1949 489787046051971073,0,Hl_Pavgiss#4509 808315985680924702,503,crabpatty ツ#1800 @@ -389,7 +389,7 @@ 836190327886446603,300,RoAndroid#8181 865853932622708746,298,Saltվ.exe#0227 557878874562625536,292,Zero601#0601 -713183973999902811,1601,Fiches#6766 +713183973999902811,0,Fiches#6766 504366142752686090,340,-emia#9956 733276279427825715,200,captain sharkie too#2983 583541533232594944,320,AlphaBatZx#2862 @@ -430,5 +430,8 @@ 697101990081331210,300,LolNani?#5402 908751940857511987,600,Aceu ッ#3386 533433597164519434,390,flip3r#5372 -579306008938020886,69,Xoro#0741 -788061755267743814,300,catler#7191 \ No newline at end of file +579306008938020886,0,Xoro#0741 +788061755267743814,300,catler#7191 +643933096231698472,300,CD-2K#2421 +739811934525718559,300,Dharo#1111 +912317264060096534,200,DAnnyBoyTriple1#9858 \ No newline at end of file