Hilmany / cogs /counting.py
HilmanBey's picture
Upload 64 files
cbb05ec verified
Raw
History Blame Contribute Delete
6.07 kB
import discord
from discord.ext import commands
from discord import app_commands
from database import Database
CYBER_BLUE = discord.Color.from_rgb(52, 152, 219)
CYBER_GREEN = discord.Color.from_rgb(46, 204, 113)
CYBER_RED = discord.Color.from_rgb(231, 76, 60)
CYBER_GOLD = discord.Color.from_rgb(241, 196, 15)
CYBER_ORANGE = discord.Color.from_rgb(230, 126, 34)
class Counting(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.hybrid_command(name="sayma-kanal-ayarla", description="Sayı sayma oyunu kanalını ayarlar.")
@commands.has_permissions(administrator=True)
@app_commands.describe(kanal="Sayı sayma kanalı")
async def sayma_kanal_ayarla(self, ctx: commands.Context, kanal: discord.TextChannel):
if ctx.interaction:
await ctx.defer()
await Database.execute(
"""INSERT OR REPLACE INTO sayi_sayma (guild_id, kanal_id, son_sayi, son_atan, rekor, aktif)
VALUES (?, ?, 0, 0, 0, 1)""",
(ctx.guild.id, kanal.id)
)
await ctx.send(f"✅ Sayı sayma kanalı {kanal.mention} olarak ayarlandı. Sayaç **0**'dan başlıyor!")
@commands.hybrid_command(name="sayma-kapat", description="Sayı sayma oyununu devre dışı bırakır.")
@commands.has_permissions(administrator=True)
async def sayma_kapat(self, ctx: commands.Context):
if ctx.interaction:
await ctx.defer()
await Database.execute("UPDATE sayi_sayma SET aktif = 0 WHERE guild_id = ?", (ctx.guild.id,))
await ctx.send("✅ Sayı sayma oyunu devre dışı bırakıldı.")
@commands.hybrid_command(name="sayma-sıfırla", description="Sayı sayma sayacını sıfırlar.")
@commands.has_permissions(administrator=True)
async def sayma_sifirla(self, ctx: commands.Context):
if ctx.interaction:
await ctx.defer()
await Database.execute(
"UPDATE sayi_sayma SET son_sayi = 0, son_atan = 0 WHERE guild_id = ?",
(ctx.guild.id,)
)
await ctx.send("✅ Sayı sayma sayacı sıfırlandı. 0'dan başlayın!")
@commands.Cog.listener()
async def on_message(self, message: discord.Message):
if message.author.bot or not message.guild:
return
if not await Database.modul_aktif_mi(message.guild.id, "Counting"):
return
cfg = await Database.fetch_one(
"SELECT * FROM sayi_sayma WHERE guild_id = ? AND aktif = 1",
(message.guild.id,)
)
if not cfg:
return
if message.channel.id != cfg['kanal_id']:
return
# Mesaj sadece rakam mı?
content = message.content.strip()
if not content.lstrip("-").isdigit():
return
try:
num = int(content)
except:
return
son_sayi = cfg['son_sayi']
son_atan = cfg['son_atan']
rekor = cfg['rekor']
beklenen = son_sayi + 1
if son_sayi == 0:
beklenen = 1
if num != beklenen:
embed = discord.Embed(
title="❌ Hatalı Sayı!",
description=f"{message.author.mention} yanlış sayı girdi!\nBeklenen: **{beklenen}**, Senin girdiğin: **{num}**\n\n**Sayaç sıfırlandı!** 🔥",
color=CYBER_RED,
timestamp=discord.utils.utcnow()
)
embed.set_footer(text="ArazAI Sayma Oyunu")
await message.channel.send(embed=embed)
await Database.execute(
"UPDATE sayi_sayma SET son_sayi = 0, son_atan = 0 WHERE guild_id = ?",
(message.guild.id,)
)
# Hatalı mesajı sil
try:
await message.add_reaction("❌")
except:
pass
return
if message.author.id == son_atan:
embed = discord.Embed(
title="⚠️ Ardışık Tespit!",
description=f"{message.author.mention}, siz art arda sayamazsınız! Sayaç sıfırlandı.",
color=CYBER_ORANGE,
timestamp=discord.utils.utcnow()
)
await message.channel.send(embed=embed)
await Database.execute(
"UPDATE sayi_sayma SET son_sayi = 0, son_atan = 0 WHERE guild_id = ?",
(message.guild.id,)
)
return
# Doğru cevap
yeni_rekor = max(rekor, num)
if num > rekor:
# Yeni rekor!
try:
await message.add_reaction("🏆")
except:
pass
else:
try:
await message.add_reaction("✅")
except:
pass
await Database.execute(
"UPDATE sayi_sayma SET son_sayi = ?, son_atan = ?, rekor = ? WHERE guild_id = ?",
(num, message.author.id, yeni_rekor, message.guild.id)
)
@commands.hybrid_command(name="sayma-durum", description="Sayı sayma oyununun mevcut durumunu gösterir.")
async def sayma_durum(self, ctx: commands.Context):
if ctx.interaction:
await ctx.defer()
cfg = await Database.fetch_one(
"SELECT * FROM sayi_sayma WHERE guild_id = ? AND aktif = 1",
(ctx.guild.id,)
)
if not cfg:
await ctx.send("❌ Sayı sayma oyunu aktif değil.", ephemeral=True)
return
embed = discord.Embed(title="🔢 Sayı Sayma Durumu", color=CYBER_BLUE, timestamp=discord.utils.utcnow())
embed.add_field(name="Son Sayı", value=f"**{cfg['son_sayi']}**", inline=True)
embed.add_field(name="Rekor", value=f"**{cfg['rekor']}**", inline=True)
son_atan_member = ctx.guild.get_member(cfg['son_atan'])
son_atan_str = son_atan_member.mention if son_atan_member else "—"
embed.add_field(name="Son Atan", value=son_atan_str, inline=True)
await ctx.send(embed=embed)
async def setup(bot):
await bot.add_cog(Counting(bot))