From 06f3311e57317dc7cac3c382fc6e1b068221c952 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 14 Feb 2026 05:58:06 +0000 Subject: [PATCH] activate_all_gamescomando com a --forceflag para a --- core/__pycache__/urls.cpython-311.pyc | Bin 1933 -> 2046 bytes core/__pycache__/views.cpython-311.pyc | Bin 19444 -> 21881 bytes .../activate_all_games.cpython-311.pyc | Bin 3382 -> 4407 bytes .../update_all_games_ai.cpython-311.pyc | Bin 0 -> 3303 bytes .../management/commands/activate_all_games.py | 30 +++-- .../commands/update_all_games_ai.py | 44 ++++++++ core/templates/base.html | 60 ++++++++++ core/templates/core/admin_dashboard.html | 17 ++- core/templates/core/admin_game_form.html | 84 ++++++++++---- core/urls.py | 3 +- core/views.py | 103 ++++++++++++++---- media/game_covers/139038.jpg | Bin 0 -> 219924 bytes media/game_covers/14421753.jpg | Bin 0 -> 32038 bytes media/game_covers/15702596.jpg | Bin 0 -> 115193 bytes media/game_covers/1637436.jpg | Bin 0 -> 38716 bytes media/game_covers/1670977.jpg | Bin 0 -> 307402 bytes media/game_covers/30771471.jpg | Bin 0 -> 55541 bytes media/game_covers/3905310.jpg | Bin 0 -> 34730 bytes media/game_covers/619417.jpg | Bin 0 -> 140958 bytes media/game_covers/6693058.jpg | Bin 0 -> 131392 bytes media/game_covers/718952.jpg | Bin 0 -> 232376 bytes media/game_covers/847402.jpg | Bin 0 -> 194436 bytes media/game_covers/965875.jpg | Bin 0 -> 66723 bytes 23 files changed, 282 insertions(+), 59 deletions(-) create mode 100644 core/management/commands/__pycache__/update_all_games_ai.cpython-311.pyc create mode 100644 core/management/commands/update_all_games_ai.py create mode 100644 media/game_covers/139038.jpg create mode 100644 media/game_covers/14421753.jpg create mode 100644 media/game_covers/15702596.jpg create mode 100644 media/game_covers/1637436.jpg create mode 100644 media/game_covers/1670977.jpg create mode 100644 media/game_covers/30771471.jpg create mode 100644 media/game_covers/3905310.jpg create mode 100644 media/game_covers/619417.jpg create mode 100644 media/game_covers/6693058.jpg create mode 100644 media/game_covers/718952.jpg create mode 100644 media/game_covers/847402.jpg create mode 100644 media/game_covers/965875.jpg diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index e33ebf356ee7f126cac96da3f7407bef8edc71cf..1c76a4ceeee339e5d4ca84930a33e1f7a3445fee 100644 GIT binary patch delta 225 zcmeC>|HrSsoR^o20SL@_CuGiMWng#=;=q6?l<~Q3qk1gU#0{*Ps;SIbA~5L`wKZ(Z zm>C#W12F`o3r2~is0TA>YHaRf%4XCPOH9el%+pUwEJ@DLEiFh%EJ@W(%+$Xn3KowC zi^oI6;}bJC|6mqiWE7js$(qAdBr&;&HGoSFXf7iV7hl?ZhE<+X@&*e>gUba@#RaBU klk008p1W`v3p{ delta 115 zcmeyz-^;JQoR^o20SI2)?a#DjWng#=;=q6il<_%fqk1e8SGquyNQ!DOgQnW%O-$L0 yn|)aL85u<<$FSy1KFjLMB@0x|2*kxZH> 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 j13MLan>{tzUqOIbMQE=gAsFYu$S3-L4wrwF delta 4973 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 diff --git a/core/management/commands/__pycache__/activate_all_games.cpython-311.pyc b/core/management/commands/__pycache__/activate_all_games.cpython-311.pyc index 37ae39297e12b306383960558e99f79e5897080c..8781de61427a653de0ebf1517aaa4743aa94889b 100644 GIT binary patch delta 2248 zcmZ`)-ER{|5a09N`75^bbs?G!+6s3?*Lii{YA;<@)fhxIpkKkbY+`Ds& zEJxv?s(7d>=(Ym2L`p>kRGNRtvEb-e<8e7bQUc-qxT2#ggj;NZZ%-xy0r3UFxQZ+qlT7J zQhgwFSk>n4$XLdj(lw!IvIUHZf(@0ZI)0nkWbtlvpyz6+AK_qp~)UiYo~N1O#1)oiEsvvZgDV&H|zjorBZfwPJd@ zW+gGodF82~6#r5PFXrTzl=*n=y zyBwZpPa%_4kU%)3y3!_^;_18GUQVDzaf_YUGQzCL(o6s0s`nB6 zu!ECULaDYw>EgxN8tdSD#r-VqYH0(0%?!^nL4Ou&Yc{R-goDfQ-gpUtt7UT2Ru%eB z6hx~A(}AOjXe0_PK*dQ-jVQV*`|0(*?I{^O2EO2=s_UsJ9v(OjRc|O-Lhi)LRLnwK*E5!(!}Je(Yh?wV zfT-}e9Jx55si_2^<&I5F>CF~?znp|tmx!nd13X||PnTnF$zj^+IACXImO4%2jzDiS z9xAn=<*X>sCvT}(O~j%J1=M6CCC8#^h(fo*D1{6W%k)b}+UXb^?(aV|I7mC3yQc*s z8dnOU9#fQL(53kRs31U}(hCkX$vT*>No-AIuImMXy$YU$q7Z#_Iktj*}uXI_MP}c z*`u#I&#COtnfabGSB^g^4-}Ext8n?+fLYsKM6OEUCI5%7El92NQfszN z&JLV52hK6ZnmK9Ql*Y5tIQ`qzuv@5!bNP-PHw4q)p7%H0EL-pg=l#LEE%!qUp`Q6r zPque77aB7|V>!QU`sJ)OX`B1S)~rAFWGzr6ClOO3S&0UAE242Hk}KnUoVW;2CJ?DB)<`jAQOu l4*ccpiK`?PQ}$`S^qPnC?c$j2=hG_}7pQ?cQVV| zSSqfQa}YY^hIu^4{If61Mfsz2}@e z=l7d?=7*v0Q_)+INC;s1jI9-?h0mi8#*+B-CD1^gQb9hTQh8bpd<^o8O6R~BZ3@4CnR7Q!~2oTkTmE``Xoi88a>QXHoe25B{q&O)3Nk*payQx zyEyc_b~puWdLGoMl|RrnJ@N)^GZ#5OFZO4i_E%Y(S>=5n>`%%!$xK>tUk89#&^DV$ zs@$cPc^kiK0w+g!g>=}>cNRpyGXwL7n!xt3pA_p6U*DxM47^*k$=a+b*rYYT9kj{6 zi2e~0v|ux+!A?YRbeHcBZ<6YlgPql%hHDM`F-=H^KThayKi5HL>?UV(=8(;);*oZW zo#)yrR?rH|r-2$)Bf9~N2JaSO6n>{o6n}9E8n;hSFgCLz`8SGE!Zg)GPCY=4bzteb zL8A+N8eJ87d%8O>y+(cdC)(ntTG42QADmJFp0)V7N+0gw%toJ#OHq06vR&>%#QLj&kl zv5I~cUtZ>OZ_UlUmdkmJRn#?)g(XcZkMSM@wbFYYqnK;ZiNM#I0itC9N8L^2a^jI+Lk|d3--x09^?WW*7I^JK|5` zkCEFEC$-pGbz#XBmK`a>V6m(OtE?BN$IsSTtv4eACEczgJ>}`)(*Ggq`9KZS&m=jo- z#|a}pU6YZ|2`4ezYCrp;x;5WmhS>_$0MF*;1PXV(du-6pVonpSo&K>fqZ?|aq@6Nf aL07xf)1ws0^=$shrH4(+zyD)zru`4F##Xuj diff --git a/core/management/commands/__pycache__/update_all_games_ai.cpython-311.pyc b/core/management/commands/__pycache__/update_all_games_ai.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e8dfd56ab9528b053d217e693db0bc8264d0667 GIT binary patch literal 3303 zcmb_eQEU^*8J>;T_9nK;QcNL17cCBi8iRd;qoQ2ZQw|UcIRYeUp*|vavpaFtti5J- zP3|m5;^7`b6{%?ziAq-_S3Ln0SLv?p0}of}B>KSPuCP(I}HA(btM^I?}~)kry-kGgzV4-?h-G|*XeBHeASR2rf{AG0LJ{-@T_Q@A>SIgTkd_Ne3ek-j zsW-LTFg@YLeqin)jPi_(@&huH56J@`pgb#wV0qSw_SUS;gWaT26IG=y3Wg?Yx&Tzt zicsVC6y3lT1M5Of2Y{L|H7Qg@A__%7MFbDeF<}|Zp8ka>qJV`(u>z3wtmGr1fCk|| z4F4COvlNv^rls24+!9??q^-Po6-Db!`<8Z)o z%X!GL`vXDyRj$F28x2m5kMsvM_w?BvW~y%EA8`nncY6$2DARx|BJVF2WJjS zG{8gj{N7CM06>|lD3anvMX?t@pFVv02ThQ%P#^RnXf~UD$-Mg&4ID3-Tzz;!@Ix&G z(=)<+eM}IJ3v+H*cVjAqSV=1jdQHN*u4U^ZwEsLInjmU{pqq6fRs0@S_4=qlbAzxV zs%llNVgeCZx>+Pzts*-^swRnQp(+~7^+*}ZikNdyeGi@VZ8uK$7Cj@>4gp50pP^e= z(iEYp>H5<@-NtHfT`#a_>u=2mlf;rn#IoSK0P@E%5R}^@%_LY*AbS*vE6|NiO&(0| zCp0iSQEicCIo$~XawjYSV8e;%hOE^LC%i%w13O{ecwfa%bnd5T&z_%~a|UsxR(2Dj z6E+k>#e_z7a0SuIRTu^7l3*w1<)wn8$=DfG^nxe>Aeim^?Cj-PXILqVMO+|w2@_nA zuoKb^LTD;*q6Ak}5meD@le05ZGZ!3I7hxo8C}oO9#kiUt1SM9N99ASn9kx+56s@Ae z;&2Sm7@8rf4x>0MRX9TxywXeDPRu*9f-D-MP9uommzS4w%UT)dYK!27S`JQDsu>!| zt!U(?UIj!sNh3H1uLOWzhLjAl`)1H{wJJ=93*bcekpR0@veoyU$TD0_71ww55`ET_ z>C;Dl9iq)0^aX#w=EvLokrsc%;?p*tUJG~lz4v0jiTygUnE-){ugBWlNQ)c!?V;Zt zZI2#njUF?Pzx(VIR32HQH|)_H7Pnw?3nsVlX)+X1C zPMlw#ZpUA1#a}bWE;bJ~Cx1T<4A7&n*FKRyD|wt1pSI)EW_0QnO(cs86N2(E-}k=#*c5XHZOEJl$zLJH+OaTi>V$dnvX#1Gr>jbNl-zIcfel3x z67%Tv-%dU;?6>BuH|Om)=gkbIFUHc3=0DDxN9R1U#^&v@`Hfg-&sZ0+yCtTR`QaxG zJ9Dm`d8d_m=h=1h+Rv>_-p=GV&e_Qybdviwr`yTHt>odR{86brak@2e+WZlIX4sb{ zXo0MWC3|AYN*3*8(RAtg&VznoO^Eh{XeAfz-e2HTBD>yVL8_YtvuC8C=}B zb@$TxrL{|UFFoJ+d@I(dW{+wXSGBpS>C+3iIA|svcDO>JLLZ|AXQ)spYjRDce7sP& z1&_#H54()jD#^i!KO*uvG$czacx`(X%~U!K?RWaWPE5RWuFIyvx0o*4x%OtFlca~7 z19C~M6tyh%+ NYq#g0|DoSS{cqu55?BBL literal 0 HcmV?d00001 diff --git a/core/management/commands/activate_all_games.py b/core/management/commands/activate_all_games.py index d4ecec2..74de642 100644 --- a/core/management/commands/activate_all_games.py +++ b/core/management/commands/activate_all_games.py @@ -5,11 +5,19 @@ from core.pexels import fetch_first import time class Command(BaseCommand): - help = 'Ativa todos os jogos, gera scripts de IA e capas automaticamente para todo o catálogo.' + help = 'Ativa todos os jogos, gera scripts de IA (com história e correção) e capas automaticamente para todo o catálogo.' + + def add_arguments(self, parser): + parser.add_argument( + '--force', + action='store_true', + help='Força a re-geração de todos os scripts, mesmo que já existam.', + ) def handle(self, *args, **options): + force = options['force'] games = GameProject.objects.all() - self.stdout.write(f"Iniciando atualização de {games.count()} jogos...") + self.stdout.write(f"Iniciando processamento de {games.count()} jogos (Force={force})...") for game in games: self.stdout.write(f"Processando: {game.title}...") @@ -17,22 +25,28 @@ class Command(BaseCommand): # 1. Ativar o jogo game.is_active = True - # 2. Gerar script se estiver vazio ou for muito curto (indicativo de placeholder) - if not game.script_code or len(game.script_code) < 100: + # 2. Gerar script se estiver vazio, for placeholder ou se force for True + needs_script = force or not game.script_code or len(game.script_code) < 500 + + if needs_script: if not game.external_url: - self.stdout.write(f" -> Gerando script de IA para {game.title}...") + self.stdout.write(f" -> Gerando script de IA Autônomo para {game.title}...") script = generate_game_script(game.title, game.prompt, game.genre) if script: game.script_code = script + self.stdout.write(self.style.SUCCESS(f" -> Script gerado com sucesso.")) else: self.stdout.write(self.style.ERROR(f" -> Falha ao gerar script para {game.title}")) + else: + self.stdout.write(f" -> Jogo possui URL externa, pulando geração de script.") # 3. Gerar Capa se não tiver if not game.image_reference: self.stdout.write(f" -> Buscando capa no Pexels para {game.title}...") - pexels_data = fetch_first(f"{game.title} game {game.genre}") + pexels_data = fetch_first(f"{game.title} game background") if pexels_data: game.image_reference = pexels_data['local_path'].replace('media/', '') + self.stdout.write(self.style.SUCCESS(f" -> Capa encontrada e salva.")) else: self.stdout.write(self.style.WARNING(f" -> Capa não encontrada para {game.title}")) @@ -40,6 +54,6 @@ class Command(BaseCommand): self.stdout.write(self.style.SUCCESS(f" -> {game.title} ATUALIZADO E ATIVO!")) # Pequena pausa para evitar sobrecarga na API de IA/Pexels - time.sleep(1) + time.sleep(2) - self.stdout.write(self.style.SUCCESS("Processamento concluído com sucesso! Todos os jogos estão online.")) \ No newline at end of file + self.stdout.write(self.style.SUCCESS("Processamento concluído! Todos os jogos estão online e atualizados com IA Autônoma.")) diff --git a/core/management/commands/update_all_games_ai.py b/core/management/commands/update_all_games_ai.py new file mode 100644 index 0000000..388561a --- /dev/null +++ b/core/management/commands/update_all_games_ai.py @@ -0,0 +1,44 @@ +from django.core.management.base import BaseCommand +from core.models import GameProject +from core.views import generate_game_script +from core.pexels import fetch_first +import time + +class Command(BaseCommand): + help = 'Atualiza todos os jogos existentes usando IA para gerar script, história e banners.' + + def handle(self, *args, **options): + games = GameProject.objects.all() + total = games.count() + self.stdout.write(self.style.SUCCESS(f'Iniciando atualização de {total} jogos...')) + + for i, game in enumerate(games): + self.stdout.write(f'[{i+1}/{total}] Atualizando: {game.title}') + + # 1. Gerar Script e História via IA + # O prompt original do jogo é usado como base + new_script = generate_game_script(game.title, game.prompt, game.genre) + if new_script: + game.script_code = new_script + # Se o prompt estiver vazio, podemos pedir para a IA gerar uma descrição/história também + # Mas o generate_game_script já coloca a história no código HTML. + # Vamos garantir que o is_active esteja True + game.is_active = True + self.stdout.write(self.style.SUCCESS(f' - Script gerado com sucesso.')) + else: + self.stdout.write(self.style.ERROR(f' - Erro ao gerar script.')) + + # 2. Gerar Banner via Pexels (IA baseada no título) + if not game.image_reference or "pexels" not in str(game.image_reference): + pexels_data = fetch_first(f"{game.title} game wallpaper background") + if pexels_data: + game.image_reference = pexels_data['local_path'].replace('media/', '') + self.stdout.write(self.style.SUCCESS(f' - Banner gerado: {game.image_reference}')) + else: + self.stdout.write(self.style.WARNING(f' - Não foi possível gerar banner.')) + + game.save() + # Pequeno delay para evitar hitting limits se houver muitos + time.sleep(1) + + self.stdout.write(self.style.SUCCESS('Todos os jogos foram atualizados, ativados e integrados com IA!')) diff --git a/core/templates/base.html b/core/templates/base.html index 4ab3a6b..b104fba 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -43,6 +43,30 @@ border-radius: 16px; padding: 2rem; } + /* Google Translate customization */ + .goog-te-banner-frame.skiptranslate { display: none !important; } + body { top: 0px !important; } + #google_translate_element { + margin-right: 15px; + } + .goog-te-gadget-icon { display: none !important; } + .goog-te-gadget-simple { + background-color: rgba(255,255,255,0.1) !important; + border: 1px solid rgba(255,255,255,0.2) !important; + padding: 5px 10px !important; + border-radius: 20px !important; + color: white !important; + } + .goog-te-menu-value span { color: white !important; } + + /* Auto-translation notification */ + #translation-note { + display: none; + font-size: 0.7rem; + color: var(--cyan-accent); + text-align: right; + margin-right: 15px; + } {% block extra_css %}{% endblock %} @@ -52,11 +76,18 @@ AI GAME FORGE +