From 31fd3e519504012796b5745e35ff55a151a4115a Mon Sep 17 00:00:00 2001 From: David Afonso Date: Sun, 28 Jan 2024 22:31:19 +0900 Subject: [PATCH] Add undo command --- db/prod.db | Bin 18165760 -> 18165760 bytes immersion_bot/cogs/undo.py | 37 +++++++++++++++++++++++++++++++------ immersion_bot/sql.py | 18 ++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/db/prod.db b/db/prod.db index f9a32cc4079078fe550f519f8f610ecc6fa9206e..9f2188f2986f1a813c0bba62d4e504f024b81c66 100644 GIT binary patch delta 3145 zcmchZdwf(!7037P?%iiL`{S8(Lz?g^l#*n3vm`fZd899bg@%U~)FRYs!Bz_R0<_2^ zfgf!#lDgWd7KHl5Dnitf1QG()7OYZ0D-;U?J_=P+5MQMhuQT^eX5l+vf4~o8|GuFRH(FkBqK1wzbXQym&#(qkf>q?@`al{FjWg z|Cgtyaf#PxG`tNnvlSda#41gvYAchq6&(u_9QYo(rTp^7PdvNyD!=^mcZkPGhP?;X8S6<#}IjzHQ~>R1q?@nM`@QrmChgGg`$(E)zL-mz}4khWB0`Lb`Tb zs=TJUDqU%*;PCRxM4rn9S6msgy6n7=#}j&4eO4po(p~ltxv7Iwc6eijn&)4aO>x2iXHO*4<*BNg>SWD8HD2q?d$v(`!`JJG0ZoqBtb|^b zZDNly2u$fkK)5AU*z;_2FCb#1b$ zJYAVdS?M8iX>!!@CP86Pcqx1oehQN!KoO(}QG_WX6j6#iiWo&cMVtZ@{V4iV44@cD zF^FO?MFB-2#Z?puiXw_36vY%*Qb?H8+@^Pnx>7Jn#ymv8;s{*3&eN)U zn-7wi>ia!KwdDEwflZT)bTXYOOQy=wZ#hS1sJNjr>bDZ|lFy2$jS;=5<%kC59ezuK zWU4fotaW~GR{`7qTfj6Gu>Nv@G&=2sIaQ4q#MER!uc(BOgtIWS6|a6#C1fjUE?=8fuHIV#HnPOk7axiX+~ zt?E)_k|Jxh*5$+VT!L;zCMaDk59CN(dkGm2Ix7yHk;Or0N~lMBg>r7tS#e0pMLDoo zc5ART2PSK&i-byKETq6C4dTawLdy}_ns^s-a|3O9zB>NP*lCvSJDZPRXq< z2y|#Kkrhp0vs{5zc_{}L%4uPhYGT+)6_})@P8CoK(#2cCPI2?R+~@*xzxGs1+!^L( z*_#8)<@ktIm_5HbYF-mRW=_{qr!q%tFCkY&oEoM_wz$CmqV@{qfrwMXzg?clfd^$- z)GCstQ7fzx_~&b>Q~53JCFJ6$lgbad(gnV=+AETK+!?+-@<0weroAGGJSUZJi7d`@ zQu*q&myq-FoK(J2xyS|H*R+?A+g#v1B)fB9iw3G6dCqdZsvj{Yl~?s6re-w6oK#-b zj~obTuTXA`IWr8^4;L66F6hkx)sGxl=z{V2?hMtBe5Zy{s6EvW7kE@ZT;SO+dlksO z+7dNG@nasH5Vgeh#0|uF zVgfOdm_*bOHxf4yHxsuIw-S?ydSVLk4&pXqDlv_?ooFDY6EldJ#4O^S#JdQUd^RzM zcsKDL;=RP3#9ZQi#5`g?aToD^;%?#t#0QCchy}z#;zPu}#C^nviABWy#A0Fzv6T1- z@loPq#K(zG5X*?=#0uh*#HWY{h?T^riB*Ik8i^*NnOIG%AxNwx9wZ(j9wycipCMX^ z&l2m2R^k!jb3~T-Jn;qMQ9=@r5nm*}L_AJxAT|e9i6@A!5ML#}Mtq(42JuZ| z3-K-DN#fhYcZjXTcZqGpcA|~=9`SwR2gFmv4x*jtAUcVi#4e(X=q7d(J;WYjFY!a- zY2ru3GsLsRK4L%dW8yjDC&W*Q1H|*hLE;c`nD`m-bK(W!7sL_bDDfh3jQAz-5^YL;RNb9q}@8hB!;SLj0ci1Mx?qmw1&pN1P}AL|h>LO#FrTEAcnt z@5F1wMdEehAH*BPCE}kuU^ZR`=&OlF8~!#yI-8VHyQ;&l)?>zG02M zaEz}c*k1;>+t>SocL&?saQ{AUduwZn?QK_^GuU?{9@zH}>dK9H>WnN_7rXc1{(bn$ zJ$P+fyS=Wh-B_<)+IY3`Y2(+%)Fz-!P@9l8VQnJXM77D&CZ`<77@g3WOfs1yw}2?3GN>RR%XFU>u@pr_g^D}4)Vd>TL1h)?fp8HK0Y{Bk zwBU{#jtdn;3+|wRporj7aYIlL+!1knX_}z^@tl{N``!D#``&p;&WZT^15Lp|1h3q}@UOuODiQ;4~oL^%_LZOgi@0Do(Y45F{l&G!Csh^#wo&6u&lDj}@p%+XR z6beNPiX4hCMTA17h*D@2Iz^1apomkL6c&X|0g7CTmK3chT2mZA(T3tcii0THQXEXt zj^YrCLn#iUXit%#=s!lguGzo~g&T z#Fxb9#D~Qz;%$xH#!6#>G0qrlbTO3JrdTF6Jysnnjpgdw^cDJCeWX4>@1X6`)@cj1 zN!k!CPt&7Y?2J7YZY8O?BY>H$e(<9Z9(nxN2TX;oy zZg^xkn$xH(RhGW+SZZsFx~ldEC`W`tA>)s_^CUgEZob5Ljuf0~JJr@ngi{e`Urs6( zly=`lSS?V@32RPlJ-LsPpUf}pp3IXYkxZ5~jY0o6VW1agF3DQTDNQ`x{d!9|*^@Vi zQ?|#pyAuX@ylbRcwUcFq#bx<wcCjo3mt#>de&rZ7m86$uy@i=*R{}Wh|wpcTF*rPTnH2ZqAZS zb0)_8Md|`WGSyif^B4IcFv^XT?j&4jIwM&&M@gnRHHIHGD=;L}o#jDCV_-<8JBa&H zJ>!0qWSUbI_oF5ThGd$vC@|Lk(~wUj?r*of=||O=vZK=Uqh#57Q^o`?<&PAQVYK3mZHrzU6edrkfd(JOOBn!*(i`<~% z{A8*yMaWS~lo7p%V~F0wu|zr1ho~U>62}q86a9!2i2lTh!~o(X;$-3!VjwYys3cA$ z1{0?drxRxoXA)--XA|cTLx`coxx{(I`NRc86>%X^OEjaXm4L7)^{J#uDR*@x%?p1mZ^GCSoEXh)Kj`;$~tBF_j=O zjktxFPTWe&AZ{aO61Nkxh}py(;tnEB+)3O;+)X&dJ;Yq%UZR$mN8Cr;Pt+0fi3P+1 z#Dl~`#KXiR#G}Mx#6se6;tAqO;wj>3ViEBSks+QXo+F+oULY0|^~8(B5@IRw60wYU znRtb0AeIv=h*yc%h}VfXh&PG1h_{KA#46$);$31jv4&Vnyhp4f))Vg&9}pXe4~dP$ zN5m##Gx0I;3GpfM8PQ05PHZ8*AigBNBEBZRA+{3V65ELF#COE^#13L7@dL4o*iHOM z{6zdr{6hRn{6_pv>>>Uj_7Z;*`-s05BO4u|46WBhc6cNnlm7y-WU{2NP}x|kM3e)a z 5: + return await interaction.edit_original_response( + content="Por precaución no se pueden deshacer más de 5 registros de una vez." + ) + + store = Store(_DB_NAME) + deleted_rows = store.delete_last_log_user( + interaction.user.id, records_to_delete ) + print(deleted_rows) + + if len(deleted_rows) > 0: + bodyMessage = "### Se han eliminado los siguientes registros:\n" + for row in deleted_rows: + note = ast.literal_eval(row.note) + bodyMessage += f"* **[{row.created_at.strftime('%Y-%m-%d')}]** {row.media_type.value} {note[0]} - {round(row.amount, 2)} {helpers.media_type_format(row.media_type.value, (row.amount > 1))} - {row.time} minutos - {helpers._to_amount(row.media_type.value, row.amount)} puntos\n" + if note[1]: + bodyMessage += f"\t* {note[1]}" + else: + bodyMessage = "No se ha encontrado ningún registro a eliminar." + + return await interaction.edit_original_response(content=bodyMessage) # message_link = message_link.split('/') diff --git a/immersion_bot/sql.py b/immersion_bot/sql.py index 40adeb5..a5b12b0 100644 --- a/immersion_bot/sql.py +++ b/immersion_bot/sql.py @@ -144,6 +144,24 @@ def get_latest_content_by_user_autocomplete( print(content_results) return content_results + def delete_last_log_user(self, discord_user_id, limit): + query = f""" + DELETE FROM logs + WHERE ROWID IN (SELECT ROWID + FROM logs WHERE discord_user_id == '{discord_user_id}' + ORDER BY created_at DESC + LIMIT {limit}) + RETURNING * + """ + + print(query) + + cursor = self.conn.cursor() + cursor.execute(query) + deleted_rows = cursor.fetchall() + self.conn.commit() + return deleted_rows + def get_logs_by_user(self, discord_user_id, media_type, timeframe): if media_type == None and timeframe == None: where_clause = f"discord_user_id={discord_user_id}"