Files
titlebot-ng-ng/__pycache__/room.cpython-314.pyc
T

324 lines
48 KiB
Plaintext
Raw Normal View History

2026-08-06 21:34:52 -05:00
+
2026-09-04 10:43:53 -05:00
æšjˆ“ãó®€Rt^RIt^RIt^RIt^RIt^RIt^RIt^RIH t H
2026-08-06 21:34:52 -05:00
t
2026-09-04 10:21:24 -05:00
H t H t H
2026-08-06 21:34:52 -05:00
t
HtHtHt^RIHt^RIt^RIt.ROt!RR4t!RR4tR#) zè
This is an instance of connecting to a room and maintaining suggestions.
2026-09-04 10:21:24 -05:00
I've been re-writing the original functions of methods for this class, so
2026-08-06 21:34:52 -05:00
there's some elements that need to be cleaned up and only make sense in that light.
2026-09-04 10:21:24 -05:00
N)Ú AsyncClientÚ
2026-08-06 21:34:52 -05:00
LoginResponseÚMessageDirectionÚProfileGetDisplayNameResponseÚRoomMessageTextÚRoomMessagesResponseÚRoomSendResponseÚ SyncResponse)ÚPostcó4a€]tRt^toRRltRRltRtVtR#)ÚConfigcó(€VPV4R#©N)Ú load_config)ÚselfÚ config_paths&&Úroom.pyÚ__init__ÚConfig.__init__s€Ø ×јÖ%ócóþ€\VR4;_uu_4p\P!V4pVPRR4VnVPRR4VnVPRR4VnVPRR4VnVPRR4VnVPR ^d4Vn VPR
2026-09-04 10:21:24 -05:00
R 4Vn
VPR R
4Vn VPRR4Vn VPR^H4Vn
VPRR4VnVPRR4VnVPR^4VnVPRR4VnVPRR4VnVPRR4VnVPR^4VnVPRR4VnVPR^<4VnRRR4R# +'giR#;i) ÚrÚusernameÚmagbotÚpasswordÚÚroom_idÚlookback_limitÚdbNamezsuggestions.dbÚ
batch_sizeÚuser_lookback_limitiˆÚ
homeserverzhttps://matrix.orgÚ vote_hostÚ localhostÚvote_activity_hoursÚ vote_pathÚ sync_timeouti¸ Ú
poll_intervalÚcommand_sync_timeouti0uÚ
2026-09-04 10:43:53 -05:00
post_intervalgà?Úinitial_sync_timeouti,Úpost_loop_intervalÚuser_list_intervalÚuser_list_retry_intervalNi )ÚopenÚyamlÚ safe_loadÚgetrrrrÚdb_namerr r!r"r$r%r&r'r(r)r*r+r,r-)rÚpathÚfileÚconfigs&& rrÚConfig.load_configs•€Ü
2026-09-04 10:21:24 -05:00
�$˜�_Œ_ Ü—^’^ DÓ)ˆFØ"ŸJ™J z°8Ó<ˆDŒMØ"ŸJ™J z°2Ó6ˆDŒMØ!Ÿ:™: i°Ó4ˆDŒLØ"(§*¡*Ð-=¸xÓ"HˆDÔ Ø!Ÿ:™: hÐ0@ÓAˆDŒLØ$Ÿj™j¨°sÓ;ˆDŒOØ'-§z¡zÐ2GÈÓ'NˆDÔ $Ø$Ÿj™j¨Ð7KÓLˆDŒOØ#ŸZ™Z¨ °[ÓAˆDŒNØ'-§z¡zÐ2GÈÓ'LˆDÔ $Ø#ŸZ™Z¨ °RÓ8ˆDŒNØ &§
2026-09-04 10:43:53 -05:00
¡
2026-09-04 10:21:24 -05:00
¨>¸4Ó @ˆDÔ Ø!'§¡¨O¸RÓ!@ˆDÔ Ø(.¯
©
Ð3IÈ5Ó(QˆDÔ %Ø!'§¡¨O¸SÓ!AˆDÔ Ø(.¯
2026-08-06 21:34:52 -05:00
©
Ð3IÈ3Ó(OˆDÔ %Ø&,§j¡jÐ1EÀqÓ&IˆDÔ #Ø&,§j¡jÐ1EÀsÓ&KˆDÔ #Ø,2¯J©JÐ7QÐSUÓ,VˆDÔ )÷)�_�_Š_ús •G G+Ç+ G< )rr(r2r!r*rrr'r)r+rr&r,r-r rr$r"r%N)úconfigs/config.yaml)Ú__name__Ú
__module__Ú __qualname__Ú__firstlineno__rrÚ__static_attributes__Ú__classdictcell__©Ú
__classdict__s@rr r sø‡€ô&÷WòWrr có6a€]tRt^/toR)RltRtRtRtRtRt Rt
R t R
t R t
]R 4tR
tRtRtR*RltRtRtRtRtR*RltR*RltR*RltR*RltRtR*RltR+RltRtRt R,Rlt!Rt"R t#R!t$R"t%R*R#lt&R$t'R%t(R&t)R't*R(t+Vt,R#)-ÚRoomNcó¼€\V4VnT;'g\VnRVn.Vn.Vn.VnRVnRVn RVn
RVn RVn ^Vn
/VnV'dW0PnVP!VPP"4VnRVnVP)4VP+4R#)rNzbanned_users.db)r r5Údefault_search_termsÚ search_termsÚformatted_sugsÚpostsÚnewly_inserted_postsÚrejected_banned_postsÚclientÚroomÚuser_idÚmemberÚ display_nameÚlast_runÚ_display_name_cacher!Ú safe_db_namerÚdb_pathÚbanned_db_pathÚinit_dbÚinit_banned_db)rrrDr!s&&&&rrÚ
Room.__init__0s·€Ü˜[Ó)ˆŒ Ø(×@Ð@Ô,@ˆÔØ ˆÔ؈Œ
Ø$&ˆÔ!Ø%'ˆÔ"؈Œ ؈Œ ؈Œ ؈Œ Ø ˆÔ؈Œ
Ø#%ˆÔ ç Ø%/�K‰KÔ "à×(Ñ(¨¯©×)<Ñ)<Ó=ˆŒ Ø/ˆÔØ � ‰ ŒØ ×ÑÖrcó>€\P!RRV4pRV R2#)z[^a-zA-Z0-9_-]Ú_Ú suggestions_z.db)ÚreÚsub)rrÚsafes&& rrPÚRoom.safe_db_nameHs$€Ü�vŠvÐ'¨¨gÓ6ˆØ˜d˜V 3Ð'Ð'rcóT€\P!VP4pVP4pVP R4pVP R4pVP 4Uu.uF qD^,NK
ppRV9dVP R4pRV9dVP R4pVP R4pVP R4pVP R4pVP R 4pVP R
4p\P !V4VP4R #uupi) a›
CREATE TABLE IF NOT EXISTS suggestions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user TEXT,
display_name TEXT,
message TEXT,
timestamp INTEGER,
age INTEGER,
is_posted INTEGER DEFAULT 0,
event_id TEXT,
UNIQUE(user, message, timestamp)
)
zPRAGMA table_info(suggestions)Ú is_postedz>ALTER TABLE suggestions ADD COLUMN is_posted INTEGER DEFAULT 0Úevent_idz0ALTER TABLE suggestions ADD COLUMN event_id TEXTzSCREATE UNIQUE INDEX IF NOT EXISTS idx_suggestions_event_id ON suggestions(event_id)aJ
CREATE TABLE IF NOT EXISTS gettitles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT,
sender TEXT,
timestamp INTEGER,
datetime TEXT,
UNIQUE(event_id),
UNIQUE(sender, timestamp)
)
aG
CREATE TABLE IF NOT EXISTS mayhem (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT,
sender TEXT,
timestamp INTEGER,
datetime TEXT,
UNIQUE(event_id),
UNIQUE(sender, timestamp)
)
aK
CREATE TABLE IF NOT EXISTS countvotes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT,
sender TEXT,
2026-09-04 10:21:24 -05:00
timestamp INTEGER,
datetime TEXT,
UNIQUE(event_id),
UNIQUE(sender, timestamp)
)
aH
CREATE TABLE IF NOT EXISTS voteurl (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT,
2026-08-06 21:34:52 -05:00
sender TEXT,
2026-09-04 10:21:24 -05:00
timestamp INTEGER,
datetime TEXT,
UNIQUE(event_id),
UNIQUE(sender, timestamp)
)
N)ÚdbutilÚconnectrQÚcursorÚexecuteÚfetchallÚcommitÚclose©rÚconnÚcrWÚrowÚcolss& rrSÚ Room.init_dbLs€Ü�~Š~˜dŸl™lÓ+ˆØ �K‰K‹MˆØ
2026-09-04 10:43:53 -05:00
�I‰Ið  ó
2026-09-04 10:21:24 -05:00
ˆð
�I‰IÐ6Ó 7ˆØ"#§*¡*¤,Ó/¡,˜3�A—�¡,ˆÐ/Ø ˜dÔ "Ø— ‘ ÐZÓ[ˆAØ ˜TÔ !Ø— ‘ ÐLÓMˆAà
�I‰IÐkÓ lˆð
2026-09-04 10:43:53 -05:00
�I‰Ið
2026-09-04 10:21:24 -05:00
 ó
2026-09-04 10:43:53 -05:00
2026-09-04 10:21:24 -05:00
ˆð
�I‰Ið
 ó
2026-08-06 21:34:52 -05:00
ˆð
2026-09-04 10:21:24 -05:00
�I‰Ið
 ó
2026-09-04 10:43:53 -05:00
2026-09-04 10:21:24 -05:00
ˆð
2026-08-06 21:34:52 -05:00
�I‰Ið
2026-09-04 10:43:53 -05:00
 ó
2026-09-04 10:21:24 -05:00
2026-08-06 21:34:52 -05:00
2026-09-04 10:21:24 -05:00
ˆô �
Š
�dÔØ �
‰
Ž ùòy0sÁ%D%c óÔ€\P!VP4pVP4pVP R4p\P
!V4VP
2026-09-04 10:43:53 -05:00
4R#)zHInitialize the shared banned-users database (primary key + user string).z¤
CREATE TABLE IF NOT EXISTS banned_users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user TEXT UNIQUE
2026-09-04 10:21:24 -05:00
)
2026-08-06 21:34:52 -05:00
N©r`rarRrbrcrerf©rrhrirWs& rrTÚRoom.init_banned_dbœsK€ä�~Š~˜d×1Ñ1Ó2ˆØ �K‰K‹MˆØ
�I‰Ið ó
2026-09-04 10:21:24 -05:00
ˆô �
2026-08-06 21:34:52 -05:00
Š
2026-09-04 10:43:53 -05:00
�dÔØ �
2026-09-04 10:21:24 -05:00
‰
2026-09-04 10:43:53 -05:00
Ž rc óä€V'gR#\P!VP4pVP4pVP RV34pVP 4pVP
2026-08-06 21:34:52 -05:00
4VRJ#)zDReturn True if the given Matrix account/homeserver string is banned.Fz)SELECT 1 FROM banned_users WHERE user = ?N)r`rarRrbrcÚfetchonerf)rÚuserrhrirWrjs&& rÚ is_bannedÚRoom.is_banned©sX€çÙÜ�~Š~˜d×1Ñ1Ó2ˆØ �K‰K‹MˆØ
2026-09-04 10:21:24 -05:00
�I‰IÐAÀDÀ7Ó KˆØ�j‰j‹lˆØ �
2026-09-04 10:43:53 -05:00
‰
2026-08-06 21:34:52 -05:00
Œ ؘ$ˆÐrc óØ€\P!VP4pVP4pVP RV34p\P
2026-09-04 10:21:24 -05:00
!V4VP
2026-08-06 21:34:52 -05:00
4R#)z:Add a Matrix account/homeserver string to the banned list.z4INSERT OR IGNORE INTO banned_users (user) VALUES (?)Nrn©rrsrhrirWs&& rÚban_userÚ
Room.ban_user´sI€ä�~Š~˜d×1Ñ1Ó2ˆØ �K‰K‹MˆØ
�I‰IÐLÈtÈgÓ VˆÜ�
Š
�dÔØ �
‰
2026-09-04 10:43:53 -05:00
Ž rc óØ€\P!VP4pVP4pVP RV34p\P
2026-08-06 21:34:52 -05:00
!V4VP
2026-09-04 10:43:53 -05:00
4R#)z?Remove a Matrix account/homeserver string from the banned list.z'DELETE FROM banned_users WHERE user = ?Nrnrws&& rÚ
unban_userÚRoom.unban_user¼sI€ä�~Š~˜d×1Ñ1Ó2ˆØ �K‰K‹MˆØ
2026-08-06 21:34:52 -05:00
�I‰IÐ?À$ÀÓ IˆÜ�
2026-09-04 10:43:53 -05:00
Š
2026-08-06 21:34:52 -05:00
�dÔØ �
‰
2026-09-04 10:43:53 -05:00
Ž rcƒ ó^"€VPVP R24GRjx€L
2026-08-06 21:34:52 -05:00
R#L5i)z9Reply to a banned user's suggestion and do not insert it.z2: this user has been banned from submitting titlesN)Ú
2026-09-04 10:43:53 -05:00
alert_postrM©rÚposts&&rÚreject_banned_suggestionÚRoom.reject_banned_suggestionÄs&é€à�o‰o ×!2Ñ!2Ð 3Ð3eÐfÓg×gÔgùs ‚"-¤+¥-cƒó0"€VPf:\VPPVPP4Vn\ VPRR4'd)\
2026-08-06 21:34:52 -05:00
R4VPPVnR#VPPVPP4GRjx€L
p\V\4'd)\
2026-09-04 10:43:53 -05:00
R4VPPVnR#\
2026-08-06 21:34:52 -05:00
RV 24R#LR5i)NÚ access_tokenzReusing existing login.Tz
2026-09-04 10:43:53 -05:00
Logged in!zFailed to log in: F) rIrr5r!rÚgetattrÚprintrKÚloginrÚ
2026-08-06 21:34:52 -05:00
isinstancer)rÚresps& rÚlogin_to_matrixÚRoom.login_to_matrixÈsÃé€à �;‰;Ò Ü% d§k¡k×&<Ñ&<¸d¿k¹k×>RÑ>RÓSˆDŒKä �4—;‘; °× 5Ò 5Ü Ð+Ô ,ØŸ;™;×.Ñ.ˆDŒLÙà—[‘[×&Ñ& t§{¡{×';Ñ';Ó<×<ˆÜ �dœM× *Ò *Ü �,Ô ØŸ;™;×.Ñ.ˆDŒLÙä Ð& t fÐ-Ô .Ùñ=ùs‚B?DÃDÃADcƒóz"€WP9dVPV,#VPfQhTpVPPPVPP
4pV'dTWP 9dDVP V,p\VR4'dVP'd
2026-09-04 10:43:53 -05:00
VPpW!8XdXVPPV4GRjx€L
2026-08-06 21:34:52 -05:00
p\V\4'dVP'd
VPpW PV&V#LH5i)NrM)
2026-09-04 10:43:53 -05:00
rOrIÚroomsr1r5rÚusersÚhasattrrMÚget_displaynamerˆrÚ displayname)rrKÚnamerJrLr‰s&& rÚget_display_nameÚRoom.get_display_nameÛsð逨 ×.Ñ.Ô .Ø×+Ñ+¨GÕ4Ð 4Ø�{‰{Ò&Ð&Ð&؈Ø�{‰{× Ñ ×$Ñ$ T§[¡[×%8Ñ%8Ó9ˆß �GŸz™zÔ)Ø—Z‘Z Õ(ˆFÜ�v˜~×.Ò.°6×3F×3FÐ3FØ×*Ñ*�Ø Œ?ØŸ™×4Ñ4°WÓ=×=ˆDܘ$Ô =×>Ò>À4×CS×CSÐCSØ×'Ñ'�Ø,0× Ñ  Ñ)؈ ñ >ùs%‚A6D;Á9AD;Ã0D;Ã0D9Ã1+D;ÄD;có‚€\P!RR\V4P44P R4pV#)z
2026-09-04 10:21:24 -05:00
[^a-z0-9]+Ú-)rYrZÚstrÚlowerÚstrip)Útexts&rÚslugifyÚ Room.slugifyìs/€ä�vŠv�m S¬#¨d«)¯/©/Ó*;Ó<×BÑBÀ3ÓGˆØˆ rc óü€VPP'dVPP#RpVP'ddVPPP VPP
4pV'd#\
VRR4;'g\
VRR4pV'gVPP
pVPV4VPnVPP#)zTResolve a URL-safe slug for this room (config override, then room name, then alias).Nr’Úcanonical_alias)r5r%rIr�r1rr…r›)rÚslugrJs& rÚ
get_room_slugÚRoom.get_room_slugñs¯€à �;‰;× × Ð Ø—;‘;×(Ñ(Ð (ØˆØ �;�;ˆ;Ø—;‘;×$Ñ$×(Ñ(¨¯©×)<Ñ)<Ó=ˆDßܘt V¨TÓ2×\Ð\´g¸dÐDUÐW[Ó6\�ߨ—;‘;×&Ñ&ˆDØ $§ ¡ ¨TÓ 2ˆ� ‰ ÔØ�{‰{×$Ñ$Ð$rc  óü€^RIp^RIpVP4pRp/pVPP V4'd0\ VR4;_uu_4pVP
V4pRRR4W5VPP&\ VR4;_uu_4pVPWV^RR7RRR4R# +'giL[;i TP\3d/pLyi;i +'giR#;i)zFPersist the resolved slug so the Go voting services can route by path.Nzroom_slugs.jsonrÚwT)ÚindentÚ sort_keys) ÚjsonÚosr r3Úexistsr.ÚloadÚJSONDecodeErrorÚOSErrorr5rÚdump)rr¦r§rŸr3ÚdataÚfs& rÚwrite_room_slugsÚRoom.write_room_slugsÿsÁ€ãÛØ×!Ñ!Ó#ˆØ ˆØˆØ
�7‰7�>‰>˜$× Ò ð
2026-08-06 21:34:52 -05:00
ܘ$ —_”_¨ØŸ9™9 Q›<�D÷%ð%)ˆT�[‰[×
2026-09-04 10:21:24 -05:00
Ñ
Ñ!Ü
�$˜�_Œ_ Ø �I‰I�d a°4ˆIÔ 8÷‰_÷ %—_ûà×(Ñ(¬'Ð2ô
2026-09-04 10:43:53 -05:00
Ø’ð
ú÷�_ˆ_ús;¿C ÁB8Á%C ÂC*Â8 C ÃC ÃC à C'Ã&C'Ã* C; c óV€RVPP RVP4 2#)z(Build the full voting URL for this room.zhttp://z:9081/)r5r"r ©rs&rÚvote_urlÚ
Room.vote_urls*€à˜Ÿ™×.Ñ.Ð/¨v°d×6HÑ6HÓ6JÐ5KÐLÐLrcƒó,"€VfVPPp.VnVPPpRp^pVP 4VP
fQhWA8Ed)\
2026-08-06 21:34:52 -05:00
W!V,
4pVP
2026-09-04 10:21:24 -05:00
PVPPVV\PR7GRjx€L
2026-08-06 21:34:52 -05:00
p\V\4'dVP'gR#VPEFJpVP'd"\VR^4VP8dRpR#\V\ 4'gKOVP"pVP$Fßp VP'V 4'gKV\)V 4RP+4p
VP-VP.4GRjx€L
2026-09-04 10:21:24 -05:00
p \1VP2R,4p \1\4P6!44V ,
p
\9VP.V V
V V
\VRR4R7pVPP;V4EKH EKM V\)VP4,
p\=RV R2RR R
7\VR R4pV'dEK-R#R#ELÔLÞ5i) N©ÚstartÚlimitÚ directionÚserver_timestampéèr_)ÚposterrMÚcontentÚtimeÚager_zLooked back on z messages...Ú
T)ÚendÚflushrÁ)r5rrFrÚ get_last_runrIÚminÚ
room_messagesrrÚbackrˆrÚchunkrNr…rÚbodyrDÚ
startswithÚlenÚlstripr“ÚsenderÚintrºÚ_timer¾r
Úappendr†)rr¸rÚ
next_batchÚfetchedÚ fetch_amountÚresponseÚeventÚmsgÚtermÚ clean_msgrMÚevent_ts_secondsÚ age_secondsr€s&& rÚ
2026-09-04 10:43:53 -05:00
get_convosÚRoom.get_convoss逨 Š=Ø—K‘K×.Ñ.ˆEàˆŒ
2026-09-04 10:21:24 -05:00
Ø—[‘[×+Ñ+ˆ
2026-08-06 21:34:52 -05:00
؈
2026-09-04 10:43:53 -05:00
ØˆØ ×ÑÔØ�{‰{Ò&Ð&Ð&à�oܘz°7­?Ó;ˆLØ!Ÿ[™[×6Ñ6Ø— ‘ ×#Ñ#Ø Ø"Ü*×/Ñ/ð 7ó÷ˆHô˜hÔ(<×=Ò=ÀXÇ^Ç^À^Ùà!Ÿ��à—=—=�=¤W¨UÐ4FÈÓ%JÈTÏ]É]Ô%ZØ!%�JÚܘe¤_×5Ô5ØŸ*™*�Cà $× 1Ô 1˜ØŸ>™>¨$×/Ô/Ø(+¬C°«I¨J¨×(>Ñ(>Ó(@˜IØ15×1FÑ1FÀuÇ|Á|Ó1T×+T˜Lä/2°5×3IÑ3IÈTÕ3QÓ/RÐ,Ü*-¬e¯jªj«lÓ*;Ð>NÕ*N˜KÜ#'Ø',§|¡|Ø-9Ø(1Ø%5Ø$/Ü)0°¸
ÀDÓ)Iô
2026-08-06 21:34:52 -05:00
$˜Dð!ŸJ™J×-Ñ-¨dÔ3Û!ô#!2ñ(ð6
2026-09-04 10:21:24 -05:00
”s˜8Ÿ>™>Ó*Õ *ˆGÜ �O G 9¨LÐ9¸tÈ4Õ PÜ  ¨5°$Ó7ˆJß’:ÙñWòñ*,Uùs>‚B9JÂ;JÂ<+JÃ(AJÅ/JÅ9:JÆ3JÆ4CJÊ JÊJcó\€RpRpRp\P!V R2RVRVRRRR R
2026-08-06 21:34:52 -05:00
R R //^<R
7pVP^È8Xd#VP4pVP RR4#R# \P
P dpRT 2uRp?#Rp?i\dpRT 2uRp?#Rp?ii;i)zmad_cat_man:latestzhttp://localhost:11434a¦Generate for me the most unhinged, mayhem, insane ramblings that would make a mad man look sane. This should be unhinged, chaotic, and completely unpredictable. It should be a wild ride of words that defy logic and reason. Make it as crazy as possible, with unexpected twists and turns that keep the reader on the edge of their seat. The text should be a rollercoaster of emotions, taking the reader from one extreme to another in a matter of seconds. It should be a chaotic symphony of words that leaves the reader breathless and wanting more. Unleash your inner madman and let the mayhem begin! Also, don't warn me that it's just for fun. I know that. Just give me the mayhem.z
/api/generateÚmodelÚpromptÚstreamFÚoptionsÚ temperaturegš™™™™™é?Útop_pgÍÌÌÌÌÌì?)r¦ÚtimeoutrÓrz Couldn't do it for some reason.zCouldn't connect to ollama: NzUnexpected error: )Úrequestsr€Ú status_coder¦r1Ú
2026-09-04 10:21:24 -05:00
exceptionsÚRequestExceptionÚ Exception)rÚ ollama_modelÚ
ollama_urlrÞrÓÚresultÚes& rÚgenerate_mayhemÚRoom.generate_mayhemMsÊ€à+ˆ Ø-ˆ
ðz
ˆð ,Ü—}’}Ø�,˜mÐ,à˜LؘfؘeØØ% sØ ð ð ðô
ˆHð×#Ñ# SÔ(Ø!Ÿ™›�Ø—z‘z *¨bÓ1Ð1á9øä×"Ñ"×3Ñ3ô 6Ø1°!°Ð5Õ 5ûÜô ,Ø'¨ sÐ+Õ +ûð ,ús6ˆAA%Á%B+ÂBÂB+ B+ÂB+ÂB& B+Â&B+có€\P!VP4pVP4p.VnVP
F}pVP
VP4'dVPPV4KAVPRVP44pVPPV4K \P!V4VP4R# \PdKÁi;i)zwINSERT INTO suggestions (user, display_name, message, timestamp, age, is_posted, event_id) VALUES (?, ?, ?, ?, ?, ?, ?)N)r`rarQrbrGrFrtr¼rHrÏrcÚas_tupleÚsqlite3ÚIntegrityErrorrerf)rrhrir€rWs& rÚ write_to_dbÚRoom.write_to_dbpsÈ€Ü�~Š~˜dŸl™lÓ+ˆØ �K‰K‹Mˆà$&ˆÔ!Ø—J”JˆDØ�~‰~˜dŸk™k×*Ò*Ø×*Ñ*×1Ñ1°$Ô7Ùð
Ø—I‘IðNØ—M‘M“Oó�ð×)Ñ)×0Ñ0°Ö6ñô �
Š
�dÔØ �
‰
Ž øô ×)Ñ)ô
Úð
úsÂ;C-Ã-DÄDcóT€VPPp\P!R4pVP 4pVP R4pVP R4pVP
4Uu.uF qU^,NK
ppRV9dVP R4p\\P!44p\PP4PRRR7pVP RWV34p\P!V4VP4R #uupi)
ú last_run.dbú´
CREATE TABLE IF NOT EXISTS last_run (
room_id TEXT PRIMARY KEY,
2026-09-04 10:43:53 -05:00
timestamp INTEGER,
2026-09-04 10:21:24 -05:00
datetime TEXT
2026-08-06 21:34:52 -05:00
)
2026-09-04 10:43:53 -05:00
úPRAGMA table_info(last_run)Údatetimeú-ALTER TABLE last_run ADD COLUMN datetime TEXTÚ Úseconds©ÚsepÚtimespeczOINSERT OR REPLACE INTO last_run (room_id, timestamp, datetime) VALUES (?, ?, ?)N)r5rr`rarbrcrdrÍrÎr¾rùÚnowÚ isoformatrerf) rrrhrirWrjrkrÚnow_strs & rÚupdate_last_runÚRoom.update_last_run…sð€Ø—+‘+×%Ñ%ˆÜ�~Š~˜mÓ,ˆØ �K‰K‹MˆØ
2026-08-06 21:34:52 -05:00
�I‰Ið ó
ˆð
�I‰IÐ3Ó 4ˆØ"#§*¡*¤,Ó/¡,˜3�A—�¡,ˆÐ/Ø ˜TÔ !Ø— ‘ ÐIÓJˆAä”%—*’*“,ÓˆÜ×#Ñ#×'Ñ'Ó)×3Ñ3¸ÀiÐ3ÓPˆØ
2026-09-04 10:21:24 -05:00
�I‰IÐgÐjqÐxðjAó
2026-09-04 10:43:53 -05:00
BˆÜ�
Š
2026-09-04 10:21:24 -05:00
�dÔØ �
2026-09-04 10:43:53 -05:00
‰
2026-09-04 10:21:24 -05:00
Ž ùò0sÁ1D%cóê€VPPp\P!R4pVP 4pVP R4pVP R4pVP
4Uu.uF qU^,NK
ppRV9dVP R4pVP RV34pVP4pVP4V'dV^,Vn R#^Vn R#uupi)rör÷rørùrúz0SELECT timestamp FROM last_run WHERE room_id = ?N)
2026-08-06 21:34:52 -05:00
r5rr`rarbrcrdrrrfrN)rrrhrirWrjrks& rrÃÚRoom.get_last_run›sĀؗ+‘+×%Ñ%ˆÜ�~Š~˜mÓ,ˆØ �K‰K‹MˆØ
�I‰Ið ó
2026-09-04 10:21:24 -05:00
ˆð
�I‰IÐ3Ó 4ˆØ"#§*¡*¤,Ó/¡,˜3�A—�¡,ˆÐ/Ø ˜TÔ !Ø— ‘ ÐIÓJˆAØ
2026-08-06 21:34:52 -05:00
�I‰IÐHÈ7È*Ó UˆØ�j‰j‹lˆØ �
‰
Œ ß Ø �FˆDŽMàˆDŽMùò0sÁ1C0có~€\P!VP4pVP4p\PP \
V44PRRR7pVPRW1\
V4V34pVP^8Hp\P!V4VP4V#)rûrürýz}
2026-09-04 10:43:53 -05:00
INSERT OR IGNORE INTO gettitles (event_id, sender, timestamp, datetime)
2026-08-06 21:34:52 -05:00
VALUES (?, ?, ?, ?)
2026-09-04 10:21:24 -05:00
© r`rarQrbrùÚ
2026-09-04 10:43:53 -05:00
fromtimestamprÍrrcÚrowcountrerf© rrÌÚ timestampr_rhriÚdt_strrWÚinserteds &&&& rÚrecord_gettitlesÚRoom.record_gettitles´s–€Ü�~Š~˜dŸl™lÓ+ˆØ �K‰K‹MˆÜ×"Ñ"×0Ñ0´°Y³Ó@×JÑJÈsÐ]fÐJÓgˆØ
2026-08-06 21:34:52 -05:00
�I‰Ið ð¤ I£°Ð
2026-09-04 10:21:24 -05:00
7ó
9ˆð—:‘: ‘?ˆÜ�
Š
2026-08-06 21:34:52 -05:00
�dÔØ �
2026-09-04 10:21:24 -05:00
‰
2026-09-04 10:43:53 -05:00
Œ ؈rc ó~€\P!VP4pVP4p\PP \
2026-08-06 21:34:52 -05:00
V44PRRR7pVPRW1\
V4V34pVP^8Hp\P!V4VP4V#)zJRecord a !mayhem detection; returns True if newly recorded (not duplicate)rûrürýzz
INSERT OR IGNORE INTO mayhem (event_id, sender, timestamp, datetime)
VALUES (?, ?, ?, ?)
rr s &&&& rÚ
2026-09-04 10:21:24 -05:00
record_mayhemÚRoom.record_mayhemÂó–€ä�~Š~˜dŸl™lÓ+ˆØ �K‰K‹MˆÜ×"Ñ"×0Ñ0´°Y³Ó@×JÑJÈsÐ]fÐJÓgˆØ
2026-09-04 10:43:53 -05:00
�I‰Ið ð¤ I£°Ð
2026-09-04 10:21:24 -05:00
7ó
2026-09-04 10:43:53 -05:00
9ˆð—:‘: ‘?ˆÜ�
2026-08-06 21:34:52 -05:00
Š
2026-09-04 10:21:24 -05:00
�dÔØ �
2026-08-06 21:34:52 -05:00
‰
2026-09-04 10:43:53 -05:00
Œ ؈rc ó~€\P!VP4pVP4p\PP \
2026-09-04 10:21:24 -05:00
V44PRRR7pVPRW1\
2026-09-04 10:43:53 -05:00
V4V34pVP^8Hp\P!V4VP4V#)zNRecord a !countvotes detection; returns True if newly recorded (not duplicate)rûrürýz~
2026-08-12 17:14:01 -05:00
INSERT OR IGNORE INTO countvotes (event_id, sender, timestamp, datetime)
2026-08-06 21:34:52 -05:00
VALUES (?, ?, ?, ?)
rr s &&&& rÚrecord_countvotesÚRoom.record_countvotesÑrrc ó~€\P!VP4pVP4p\PP \
V44PRRR7pVPRW1\
V4V34pVP^8Hp\P!V4VP4V#)zKRecord a !voteurl detection; returns True if newly recorded (not duplicate)rûrürýz{
INSERT OR IGNORE INTO voteurl (event_id, sender, timestamp, datetime)
2026-08-12 17:14:01 -05:00
VALUES (?, ?, ?, ?)
rr s &&&& rÚrecord_voteurlÚRoom.record_voteurlàrrc
ƒ óâ"€VPPpRp/p.pVPfQh\^4F¨pVPP VPP
VV\ PR7GRjx€L
p\V\4'dVP'gM6VPVP4\VRR4pV'dK¨M VEFp\V\4'gKVPpVPR4'gKARV9gKJVP VP"8XgKgVP%R^4p \'V 4^8¼d}V ^,P)RR4P+4p
RP-V R,4P+4p \VRR4p V 'dR V RV R
^R \/4/W:&EKEKEK V'gR
#VEF;p\5VR 4'gK\VP6\84'gK:VP6P;R/4pVP;R4R8XgKnVP;R4R8XgK†VP;R4p\VRR4pVP=4Fƒwp
pVR,V8XgKV'gK VVR ,9gK0VVP"8wgKCVR ,P?V4VR
;;,^,
uu&\3RV RV
24EK9 EK> \@;QJd*RVPC44F 'gK RM RM!RVPC444'gR#R.p\EVP=4RRR7pVFvwp
2026-08-06 21:34:52 -05:00
pVR
2026-09-04 10:43:53 -05:00
,^8XdRMR
pVPGRV
RVR
, RV 24VR ,p \'V 4^P8”dV R ,R!,p VPGR"V 24Kx R#P-V4#ELÃ \0dp
\3R T
24Rp
2026-09-04 10:21:24 -05:00
?
2026-08-06 21:34:52 -05:00
EKRp
2026-09-04 10:43:53 -05:00
?
ii;i5i)$z?Count upvotes for each suggestion and return formatted results.Nr¶rÁú Suggestion Ú:r:éNNr_r½ÚvotesÚvoterszError parsing suggestion: z-No suggestion posts found to count votes for.ú m.relates_toÚrel_typeú m.annotationÚkeyõðŸ‘�rÌzFound vote from z for suggestion c3ó8"€TFqR,^8„x€K R#5i)rN©)Ú.0r­s& rÚ <genexpr>Ú#Room.count_votes.<locals>.<genexpr>;sé€ÐKÑ1J¨˜•= 1Ö$Ó1Jùs‚TFz#No votes found for any suggestions.zVote Count Results:có"€V^,R,#)rrr')Úxs&rÚ<lambda>Ú"Room.count_votes.<locals>.<lambda>@s €°°!µ°W¶
r)r$ÚreverseÚvoteú: rû:NéMNú...u └─ Ú
2026-09-04 10:21:24 -05:00
)$r5rrIÚrangerÅrrrÆrˆrrÇÚextendr…rrÈrÉrÌrKÚsplitrÊÚreplacer™ÚjoinÚsetrèr†r�r½Údictr1ÚitemsÚaddÚanyÚvaluesÚsortedrÏ)rrrÐÚsuggestion_votesÚ
2026-09-04 10:43:53 -05:00
all_eventsrWrÓrÔrÈÚpartsÚsuggestion_numr½r_rìÚ
relates_toÚtarget_event_idrÌr­ÚlinesÚsorted_suggestionsÚ vote_texts& rÚ count_votesÚRoom.count_votesîs¾é€ð—[‘[×+Ñ+ˆ
؈
2026-09-04 10:21:24 -05:00
ØÐ؈
Ø�{‰{Ò&Ð&Ð&ô�r–ˆAØ!Ÿ[™[×6Ñ6Ø— ‘ ×#Ñ#Ø Ø Ü*×/Ñ/ð 7ó÷ˆHô˜hÔ(<×=Ò=ÀXÇ^Ç^À^Ùà × Ñ ˜hŸn™nÔ -Ü  ¨5°$Ó7ˆJß‘:Ùñô" ˆEܘ%¤×1Ô1Ø—z‘z�à—O‘O M×2Ô2°s¸d¶{Ø—L‘L D§L¡LÖ0ð!à $§
2026-08-06 21:34:52 -05:00
¡
¨3°Ó 2˜Ü˜u›:¨œ?Ø-2°1­X×-=Ñ-=¸mÈRÓ-P×-VÑ-VÓ-X˜NØ&)§h¡h¨u°R­yÓ&9×&?Ñ&?Ó&A˜GÜ'.¨u°jÀ$Ó'G˜Hç'à$-¨wØ$.°Ø$+¨QØ$,¬c«eð D"Ð 0Ô @ò (ò +ñ ÷2 ÙBô ˆEä�u˜i×(Ô(¬Z¸¿
2026-09-04 10:43:53 -05:00
¹
Ät×-LÔ-LØ"Ÿ]™]×.Ñ.¨~¸rÓB�
Ø—N‘N :Ó.°.Ö@Ø—N‘N 5Ó)¨VÖ3à&0§n¡n°ZÓ&@�OÜ$ U¨H°dÓ;�Fð1A×0FÑ0FÖ0HÑ,˜¨Ø  Õ,°Ö?ß"™F v°T¸(µ^Ö'CØ" d§l¡lÖ2Ø  �N×.Ñ.¨vÔ6Ø  ŸM¨QÕ.›MÜ!Ð$4°V°HÐ<LÈ^ÐL\Ð"]Ô^Û!ô1Iñ ÷*‹sÑKÐ1A×1HÑ1HÔ1JÓK�s�sŠsÑKÐ1A×1HÑ1HÔ1JÓK×KÒKÙ8à&Ð(ˆÜ#Ð$4×$:Ñ$:Ó$<Ù&=Ø*.ô0Ðó%7Ñ ˆN˜DØ"& w¥-°1Ô"4™¸'ˆIØ �L‰L˜; ~Ð&6°b¸¸g½¸ÀqÈÈ ÐTÔ Uà˜9•oˆGÜ�7‹|˜bÔ Ø! #�,¨Õ.�Ø �L‰L˜9 W IÐ.Ö /ñ%7ð�y‰y˜ÓÐògøôJ%ô!ÜÐ :¸1¸#Ð>Ô?Þ ûð!üs¥‚A?Q/ÂQÂ+Q/Â./Q/Ã"Q/Ä Q/Ä)Q/Ä2Q/ÅBQÇ(Q/Ç;Q/ÈQ/È9/Q/É-Q/Ê?Q/Ë Q/Ë Q/Ë#Q/Ë6AQ/Í
Q/Í,(Q/ÎB0Q/Ñ Q,ÑQ'Ñ Q/Ñ'Q,Ñ,Q/cƒ ó"€Vf&\\P!4R,4pVPfQhVPP VP