Skip to content

Commit 075d13a

Browse files
AmbratolmAmbratolm
authored andcommitted
Added donate cmd, improved help cmd, & other imrpv. hlA~
1 parent 634f78f commit 075d13a

File tree

10 files changed

+291
-247
lines changed

10 files changed

+291
-247
lines changed

bot/cogs/act_cog.py

Lines changed: 0 additions & 56 deletions
This file was deleted.

bot/cogs/board_cog.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@
77
from tabulate import tabulate
88

99
from bot.main import ActBot
10+
from bot.ui import EmbedX
1011
from db.actor import Actor
1112

1213

14+
# ----------------------------------------------------------------------------------------------------
15+
# * Board Cog
16+
# ----------------------------------------------------------------------------------------------------
1317
class Board(Cog, description="Allows players to view their data."):
1418
def __init__(self, bot: ActBot):
1519
self.bot = bot
@@ -23,10 +27,7 @@ async def profile(
2327
):
2428
await interaction.response.defer()
2529
member = member or interaction.user
26-
embed = Embed(
27-
title=f"👤 {member.display_name}",
28-
color=Color.blue(),
29-
)
30+
embed = EmbedX.info(icon="👤", title=member.display_name)
3031
if isinstance(member, Member):
3132
embed.description = " ".join(
3233
[
@@ -36,7 +37,7 @@ async def profile(
3637
]
3738
)
3839
db = self.bot.get_db(interaction.guild)
39-
actor = db.find_one(Actor, Actor.id == member.id) if db else None
40+
actor = db.find_one(Actor, Actor.id == member.id)
4041
if not actor:
4142
actor = self.bot.create_actor(member)
4243
embed.add_field(name="", value="", inline=False)
@@ -75,19 +76,15 @@ async def leaderboard(self, interaction: Interaction):
7576
# Get top actors
7677
await interaction.response.defer()
7778
db = self.bot.get_db(interaction.guild)
78-
actors = (
79-
db.find(
80-
Actor,
81-
sort=(
82-
query.desc(Actor.rank),
83-
query.desc(Actor.level),
84-
query.desc(Actor.xp),
85-
query.desc(Actor.gold),
86-
),
87-
limit=10,
88-
)
89-
if db
90-
else None
79+
actors = db.find(
80+
Actor,
81+
sort=(
82+
query.desc(Actor.rank),
83+
query.desc(Actor.level),
84+
query.desc(Actor.xp),
85+
query.desc(Actor.gold),
86+
),
87+
limit=10,
9188
)
9289
if not actors:
9390
await interaction.followup.send(
@@ -114,7 +111,7 @@ async def leaderboard(self, interaction: Interaction):
114111
leaderboard_text += "```"
115112

116113
# Create embed
117-
embed = Embed(title="🏆 Leaderboard", color=Color.blue())
114+
embed = EmbedX.info(icon="🏆", title="Leaderboard")
118115
try:
119116
top_member = guild.get_member(top_actor.id) or await guild.fetch_member(
120117
top_actor.id
@@ -125,4 +122,3 @@ async def leaderboard(self, interaction: Interaction):
125122
pass
126123
embed.add_field(name="", value=leaderboard_text, inline=False)
127124
await interaction.followup.send(embed=embed)
128-
await interaction.followup.send(embed=embed)

bot/cogs/console_cog.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import argparse
2+
import shlex
3+
4+
from discord import Color, Embed, Interaction, Member, Message, app_commands
5+
from discord.ext import commands
6+
from discord.ext.commands import Cog, GroupCog
7+
from tabulate import tabulate
8+
9+
from bot.main import ActBot
10+
from bot.ui import EmbedX
11+
from db.actor import Actor
12+
13+
14+
# ----------------------------------------------------------------------------------------------------
15+
# * Console Cog
16+
# ----------------------------------------------------------------------------------------------------
17+
class Console(Cog, description="Provides control and management interface."):
18+
def __init__(self, bot: ActBot):
19+
self.bot = bot
20+
21+
@app_commands.checks.has_permissions(administrator=True)
22+
@app_commands.command(description="Synchronize commands")
23+
async def sync(self, interaction: Interaction):
24+
count = await self.bot.sync_commands()
25+
await interaction.response.send_message(
26+
embed=EmbedX.success(
27+
title="Commands Synchronization",
28+
description=f"{count[0]}/{count[1]} commands synchronized.",
29+
),
30+
ephemeral=True,
31+
)

bot/cogs/farm_cog.py

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
1-
import asyncio
2-
import random
31
import re
2+
from random import randint
43

5-
from discord import (
6-
Color,
7-
Embed,
8-
Member,
9-
Message,
10-
Permissions,
11-
Role,
12-
TextChannel,
13-
User,
14-
utils,
15-
)
16-
from discord.ext.commands import Bot, Cog
4+
from discord import Color, Embed, Member, Message, Role, utils
5+
from discord.ext.commands import Cog
176

187
from bot.main import ActBot
8+
from bot.ui import EmbedX
199
from db.actor import Actor
2010

2111

12+
# ----------------------------------------------------------------------------------------------------
13+
# * Farm Cog
14+
# ----------------------------------------------------------------------------------------------------
2215
class Farm(Cog, description="Allows players to gain stats and roles."):
2316
def __init__(self, bot: ActBot):
2417
self.bot = bot
@@ -32,8 +25,6 @@ async def on_message(self, message: Message):
3225

3326
# Get or create actor
3427
db = self.bot.get_db(message.guild)
35-
if not db:
36-
return
3728
actor = db.find_one(Actor, Actor.id == member.id)
3829
if not actor:
3930
actor = self.bot.create_actor(member)
@@ -55,12 +46,12 @@ async def on_message(self, message: Message):
5546

5647
# Try level-up
5748
if actor.try_level_up():
58-
gold_reward = random.randint(1, 500) * actor.level
49+
gold_reward = randint(1, 500) * actor.level
5950
actor.gold += gold_reward
60-
embed = Embed(
61-
title=f"🏅 Level Up",
51+
embed = EmbedX.success(
52+
icon="🏅",
53+
title="Level Up",
6254
description=f"{member.display_name} {member.mention} has reached a new level and has been rewarded.",
63-
color=Color.green(),
6455
)
6556
embed.add_field(name="", value="", inline=False)
6657
embed.add_field(name="Level ✨", value=f"🏅 **{actor.level}**")
@@ -72,12 +63,12 @@ async def on_message(self, message: Message):
7263
if actor.try_rank_up():
7364
# awarded_role = await self.award_role(member, actor.rank_name)
7465
# if awarded_role:
75-
gold_reward = random.randint(1, 1000) * actor.level
66+
gold_reward = randint(1, 1000) * actor.level
7667
actor.gold += gold_reward
77-
embed = Embed(
78-
title=f"🏆 Rank Up",
68+
embed = EmbedX.success(
69+
icon="🏆",
70+
title="Rank Up",
7971
description=f"{member.display_name} {member.mention} has reached a new rank and has been rewarded.",
80-
color=Color.green(),
8172
)
8273
embed.add_field(name="", value="", inline=False)
8374
embed.add_field(name="Rank ✨", value=f"🏆 **{actor.rank_name}**")
@@ -108,7 +99,7 @@ def calculate_xp_reward(message: Message):
10899
# Minimum word count (to avoid 0 XP rewards)
109100
word_count = max(1, word_count) # Ensure at least 1 word is counted
110101

111-
return random.randint(1, word_count)
102+
return randint(1, word_count)
112103

113104
@staticmethod
114105
async def try_award_role(member: Member, role_name: str) -> Role | None:

bot/cogs/filter_cog.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from profanity_check import predict_prob
77

88
from bot.main import ActBot
9+
from bot.ui import EmbedX
910
from db.actor import Actor
1011
from utils.log import logger
1112

@@ -43,11 +44,7 @@ async def on_message(self, message: Message):
4344

4445
# Delete & replace message
4546
await message.delete()
46-
embed = Embed(
47-
title="",
48-
description=censored_content,
49-
color=Color.red(),
50-
)
47+
embed = EmbedX.error(censored_content, "", "")
5148
embed.add_field(name="", value="")
5249
embed.set_author(name=member.display_name, icon_url=member.avatar)
5350
embed.set_footer(text="🚫 Censored Message")
@@ -62,8 +59,6 @@ async def on_message(self, message: Message):
6259

6360
# Penalize by gold
6461
db = self.bot.get_db(message.guild)
65-
if not db:
66-
return
6762
actor = db.find_one(Actor, Actor.id == member.id)
6863
if not actor:
6964
actor = self.bot.create_actor(member)
@@ -82,10 +77,10 @@ async def on_message(self, message: Message):
8277
await member.timeout(time, reason="Filter")
8378

8479
# Notice
85-
embed = Embed(
86-
title=f"🚨 Penalty",
80+
embed = EmbedX.error(
81+
icon="🚨",
82+
title="Penalty",
8783
description=f"{member.display_name} {member.mention} has been penalized for repeated use of offensive language.",
88-
color=Color.red(),
8984
)
9085
embed.add_field(name="", value="", inline=False)
9186
embed.add_field(name="Gold 🔻", value=f"💰 **-{self.GOLD_PENALTY}**")

bot/cogs/gift_cog.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
from random import randint
2+
3+
from discord import Interaction, Member, app_commands
4+
from discord.ext.commands import Cog
5+
6+
from bot.main import ActBot
7+
from bot.ui import EmbedX
8+
from db.actor import Actor
9+
10+
11+
# ----------------------------------------------------------------------------------------------------
12+
# * Gift Cog
13+
# ----------------------------------------------------------------------------------------------------
14+
class Gift(Cog, description="Allows players to gift eachother."):
15+
def __init__(self, bot: ActBot):
16+
self.bot = bot
17+
18+
@app_commands.guild_only()
19+
@app_commands.command(description="Give your gold to another member")
20+
async def donate(self, interaction: Interaction, member: Member, gold: int):
21+
await interaction.response.defer(ephemeral=True)
22+
23+
# Validate input
24+
if gold <= 0:
25+
await interaction.followup.send(
26+
embed=EmbedX.error(
27+
f"Your gold input value of **{gold}** is invalid.\nDid you mean **{-gold if gold else randint(1, 1000)}** ?"
28+
)
29+
)
30+
return
31+
32+
# Retrieve donor user
33+
db = self.bot.get_db(interaction.guild)
34+
donor_member = interaction.user
35+
donor_actor = db.find_one(Actor, Actor.id == donor_member.id)
36+
if not donor_actor:
37+
await interaction.followup.send(
38+
embed=EmbedX.error(f"There seems to be a problem from your side.")
39+
)
40+
return
41+
42+
# Retrieve recipient user
43+
recipient_member = member
44+
recipient_actor = db.find_one(Actor, Actor.id == recipient_member.id)
45+
if not recipient_actor:
46+
await interaction.followup.send(
47+
embed=EmbedX.error(
48+
f"There seems to be a problem from the side of {recipient_member.mention}."
49+
)
50+
)
51+
return
52+
53+
# Check if user is trying to donate to themselves
54+
if donor_member == recipient_member:
55+
await interaction.followup.send(
56+
embed=EmbedX.warning(f"You can't donate to yourself.")
57+
)
58+
return
59+
60+
# Chek if donor has the gold
61+
if donor_actor.gold < gold:
62+
await interaction.followup.send(
63+
embed=EmbedX.warning(
64+
f"You don't have enough to donate **💰 {gold} Gold**.\nYou have **💰 {donor_actor.gold} Gold**."
65+
)
66+
)
67+
return
68+
69+
# Add gold and update user data
70+
donor_actor.gold = max(0, donor_actor.gold - gold)
71+
recipient_actor.gold += gold
72+
db.save_all([donor_actor, recipient_actor])
73+
74+
# Create the response embed
75+
embed = EmbedX.success(
76+
icon="💛",
77+
title="Gold Donation",
78+
description=(
79+
f"{recipient_member.display_name} {recipient_member.mention} has received **💰 {gold} Gold** from {donor_member.display_name} {donor_member.mention}."
80+
),
81+
)
82+
embed.set_author(
83+
name=donor_member.display_name, icon_url=donor_member.display_avatar
84+
)
85+
embed.set_thumbnail(url=recipient_member.display_avatar)
86+
87+
# Respond with confirmation
88+
await interaction.followup.send(embed=embed)

0 commit comments

Comments
 (0)