add dockerfile and release first version
This commit is contained in:
+88
-39
@@ -1,7 +1,7 @@
|
||||
import discord
|
||||
from core.bot import bot, server_repo, channel_repo, home_debt_repo
|
||||
from utils.common import format_vnd
|
||||
|
||||
@discord.app_commands.guilds(discord.Object(id=536422615649091595))
|
||||
@bot.tree.command(name='set-home-debt', description='Set channel to home debt')
|
||||
async def set_home_debt(interaction: discord.Interaction, channel: discord.TextChannel):
|
||||
try:
|
||||
@@ -10,10 +10,12 @@ async def set_home_debt(interaction: discord.Interaction, channel: discord.TextC
|
||||
await interaction.response.send_message("Bạn cần có quyền Administrator để sử dụng lệnh này!", ephemeral=True)
|
||||
return
|
||||
|
||||
await interaction.response.defer(ephemeral=False)
|
||||
|
||||
# Ensure server is in database
|
||||
server = await server_repo.get(str(interaction.guild_id))
|
||||
if not server:
|
||||
await interaction.response.send_message("Server chưa được khởi tạo trong database! Vui lòng sử dụng lệnh /init_server trước.", ephemeral=True)
|
||||
await interaction.followup.send("Server chưa được khởi tạo trong database! Vui lòng sử dụng lệnh /init_server trước.", ephemeral=True)
|
||||
return
|
||||
|
||||
# Ensure channel was registered in database
|
||||
@@ -23,75 +25,122 @@ async def set_home_debt(interaction: discord.Interaction, channel: discord.TextC
|
||||
else:
|
||||
await channel_repo.update_channel(channel.id, 'home_debt')
|
||||
|
||||
await interaction.response.send_message(f"home_debt app đã được cấu hình cho {channel.mention}")
|
||||
await interaction.followup.send(f"home_debt app đã được cấu hình cho {channel.mention}")
|
||||
except Exception as e:
|
||||
await interaction.response.send_message(f"Lỗi khi cấu hình home_debt app: {str(e)}")
|
||||
if interaction.response.is_done():
|
||||
await interaction.followup.send(f"Lỗi khi cấu hình home_debt app: {str(e)}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message(f"Lỗi khi cấu hình home_debt app: {str(e)}", ephemeral=True)
|
||||
|
||||
# Decorator to check if the channel is registered and configured for home_debt app
|
||||
def check_channel_home_debt():
|
||||
def decorator(func):
|
||||
async def wrapper(interaction: discord.Interaction, *args, **kwargs):
|
||||
channel = await channel_repo.get_channel(interaction.channel_id)
|
||||
if not channel:
|
||||
await interaction.response.send_message("Channel chưa được đăng ký!", ephemeral=True)
|
||||
return
|
||||
if channel.app != 'home_debt':
|
||||
await interaction.response.send_message("Lệnh này chỉ có thể sử dụng trong channel đã được cấu hình cho home_debt app!", ephemeral=True)
|
||||
return
|
||||
await func(interaction, *args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
# Check if the channel is registered and configured for home_debt app
|
||||
async def check_channel_home_debt(channel_id: int) -> bool:
|
||||
# Check if channel is registered in database
|
||||
channel = await channel_repo.get_channel(channel_id)
|
||||
if not channel or channel.app != 'home_debt':
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@bot.tree.command(name="home-debt-add", description="Thêm khoản chi tiêu mới")
|
||||
# @check_channel_home_debt()
|
||||
async def home_debt_add(interaction: discord.Interaction, amount: float, description: str):
|
||||
async def home_debt_add(interaction: discord.Interaction, amount: int, description: str = "Không có lý do"):
|
||||
"""Vì home chỉ có 2 người nên sẽ tự động thêm khoản chi tiêu cho người còn lại"""
|
||||
try:
|
||||
check = await check_channel_home_debt(interaction.channel_id)
|
||||
if not check:
|
||||
await interaction.response.send_message("Channel chưa được đăng ký!", ephemeral=True)
|
||||
return
|
||||
|
||||
await interaction.response.defer(ephemeral=False)
|
||||
|
||||
# Get info other user from home_debt table
|
||||
other_user = await home_debt_repo.get_other(interaction.user.id)
|
||||
other_user.value += amount / 2
|
||||
await home_debt_repo.update_home_debt(other_user)
|
||||
await interaction.response.send_message(f"Đã thêm khoản chi tiêu: {description} - {amount / 2}đ cho {other_user.user_id}", ephemeral=False)
|
||||
other_user.value += round(amount / 2)
|
||||
resp = await home_debt_repo.update_home_debt(other_user)
|
||||
if not resp:
|
||||
await interaction.followup.send("Có lỗi xảy ra khi cập nhật dữ liệu", ephemeral=True)
|
||||
return
|
||||
|
||||
await interaction.followup.send(f"Đã thêm {format_vnd(round(amount * 1000 / 2))} cho {interaction.user.name}. Số dư hiện tại là {format_vnd(other_user.value * 1000)}", ephemeral=False)
|
||||
except Exception as e:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
if interaction.response.is_done():
|
||||
await interaction.followup.send(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
|
||||
@discord.app_commands.guilds(discord.Object(id=536422615649091595))
|
||||
@bot.tree.command(name="home-debt-check", description="Kiểm tra số dư của bạn")
|
||||
async def home_debt_check(interaction: discord.Interaction):
|
||||
"""Kiểm tra số dư của mọi người"""
|
||||
try:
|
||||
check = await check_channel_home_debt(interaction.channel_id)
|
||||
if not check:
|
||||
await interaction.response.send_message("Channel chưa được đăng ký!", ephemeral=True)
|
||||
return
|
||||
|
||||
await interaction.response.defer(ephemeral=False)
|
||||
# Lấy số dư của mọi người
|
||||
home_debts = await home_debt_repo.get_all()
|
||||
await interaction.response.send_message(f"Số dư của mọi người: {home_debts}", ephemeral=True)
|
||||
embed = discord.Embed(title="Số dư của mọi người", color=discord.Color.blue())
|
||||
for home_debt in home_debts:
|
||||
user = await bot.fetch_user(home_debt.user_id)
|
||||
value = format_vnd(home_debt.value * 1000)
|
||||
embed.add_field(name=f"{user.name}", value=f"{value}", inline=False)
|
||||
await interaction.followup.send(embed=embed, ephemeral=False)
|
||||
except Exception as e:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
if interaction.response.is_done():
|
||||
await interaction.followup.send(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
|
||||
@discord.app_commands.guilds(discord.Object(id=536422615649091595))
|
||||
@bot.tree.command(name="vay-debt", description="Vay nợ")
|
||||
async def vay_debt(interaction: discord.Interaction, amount: float, description: str):
|
||||
async def vay_debt(interaction: discord.Interaction, amount: int, description: str = "Không có lý do"):
|
||||
"""Vay nợ"""
|
||||
try:
|
||||
check = await check_channel_home_debt(interaction.channel_id)
|
||||
if not check:
|
||||
await interaction.response.send_message("Channel chưa được đăng ký!", ephemeral=True)
|
||||
return
|
||||
|
||||
await interaction.response.defer(ephemeral=False)
|
||||
|
||||
# Get info user from home_debt table
|
||||
user = await home_debt_repo.get(interaction.user.id)
|
||||
user.value += amount
|
||||
await home_debt_repo.update_home_debt(user)
|
||||
|
||||
resp = await home_debt_repo.update_home_debt(user)
|
||||
if not resp:
|
||||
await interaction.followup.send("Có lỗi xảy ra khi cập nhật dữ liệu", ephemeral=True)
|
||||
return
|
||||
|
||||
# Send message to user
|
||||
await interaction.response.send_message(f"Đã vay nợ: {description} - {amount}đ cho {user.user_id}", ephemeral=False)
|
||||
await interaction.followup.send(f"Đã vay {format_vnd(amount * 1000)} bởi {interaction.user.name}", ephemeral=False)
|
||||
except Exception as e:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
if interaction.response.is_done():
|
||||
await interaction.followup.send(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
|
||||
@discord.app_commands.guilds(discord.Object(id=536422615649091595))
|
||||
@bot.tree.command(name="tra-debt", description="Trả nợ")
|
||||
async def tra_debt(interaction: discord.Interaction, amount: float):
|
||||
async def tra_debt(interaction: discord.Interaction, amount: int):
|
||||
"""Trả nợ"""
|
||||
try:
|
||||
check = await check_channel_home_debt(interaction.channel_id)
|
||||
if not check:
|
||||
await interaction.response.send_message("Channel chưa được đăng ký!", ephemeral=True)
|
||||
return
|
||||
|
||||
await interaction.response.defer(ephemeral=False)
|
||||
|
||||
# Get info user from home_debt table
|
||||
user = await home_debt_repo.get(interaction.user.id)
|
||||
user.value -= amount
|
||||
await home_debt_repo.update_home_debt(user)
|
||||
|
||||
resp = await home_debt_repo.update_home_debt(user)
|
||||
if not resp:
|
||||
await interaction.followup.send("Có lỗi xảy ra khi cập nhật dữ liệu", ephemeral=True)
|
||||
return
|
||||
|
||||
# Send message to user
|
||||
await interaction.response.send_message(f"Đã trả nợ: {amount}đ cho {user.user_id}", ephemeral=False)
|
||||
await interaction.followup.send(f"Đã trả {format_vnd(amount * 1000)} từ {interaction.user.name}", ephemeral=False)
|
||||
except Exception as e:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
if interaction.response.is_done():
|
||||
await interaction.followup.send(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message(f"Có lỗi xảy ra: {str(e)}", ephemeral=True)
|
||||
Reference in New Issue
Block a user