From ad4ec4d3a9066a76ecbb42ab4b41367c89aa7417 Mon Sep 17 00:00:00 2001 From: groug Date: Wed, 23 Apr 2025 08:10:40 +0000 Subject: [PATCH] update --- glados.py | 20 ++++++++---- plugins/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 142 bytes plugins/__pycache__/admin.cpython-310.pyc | Bin 0 -> 1092 bytes .../__pycache__/free_games.cpython-310.pyc | Bin 0 -> 1268 bytes plugins/__pycache__/help.cpython-310.pyc | Bin 0 -> 1275 bytes plugins/__pycache__/plugin.cpython-310.pyc | Bin 0 -> 1128 bytes .../plugin_manager.cpython-310.pyc | Bin 0 -> 3614 bytes plugins/__pycache__/say.cpython-310.pyc | Bin 0 -> 1205 bytes plugins/admin.py | 4 +-- plugins/free_games.py | 30 ++++++++++++++++++ plugins/help.py | 2 +- plugins/plugin_manager.py | 11 +------ requirements.txt | 9 ++++++ 13 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 plugins/__pycache__/__init__.cpython-310.pyc create mode 100644 plugins/__pycache__/admin.cpython-310.pyc create mode 100644 plugins/__pycache__/free_games.cpython-310.pyc create mode 100644 plugins/__pycache__/help.cpython-310.pyc create mode 100644 plugins/__pycache__/plugin.cpython-310.pyc create mode 100644 plugins/__pycache__/plugin_manager.cpython-310.pyc create mode 100644 plugins/__pycache__/say.cpython-310.pyc create mode 100644 plugins/free_games.py create mode 100644 requirements.txt diff --git a/glados.py b/glados.py index 7dd2e65..7e1dd56 100644 --- a/glados.py +++ b/glados.py @@ -7,6 +7,8 @@ from matrix_client.api import MatrixRequestError import os import sys +from plugins.plugin_manager import PluginManager + if len(sys.argv) > 1: config = __import__(sys.argv[1]) else: @@ -14,9 +16,11 @@ else: class Bot: def __init__(self): - self.client = MatrixClient(config.BOT_SERVER) + self.client = MatrixClient(config.BOT_SERVER, config.BOT_TOKEN) try: - self.client.login_with_password(config.BOT_USERNAME, config.BOT_PASSWORD) + if not config.BOT_TOKEN: + self.client.login(config.BOT_USERNAME, config.BOT_PASSWORD) + print(self.client.token) except MatrixRequestError as e: print(e) if e.code == 403: @@ -24,6 +28,9 @@ class Bot: sys.exit(1) self.plugin_manager = PluginManager(self, config) + for plugin in ['help', 'say', 'admin', 'free_games']: + self.plugin_manager.load_plugin(plugin) + self.rooms = {} for room_id, room_data in config.rooms.items(): self.rooms[room_id] = self.client.join_room(room_id) @@ -33,15 +40,16 @@ class Bot: self.client.start_listener_thread() #return client.sync_thread + print("Bot ready, listening...") while True: input() def callback(self, room, event): - if "@" + config.BOT_USERNAME in event['sender']: - return + if "@" + config.BOT_USERNAME in event['sender']: + return - if event['type'] == "m.room.message": - self.plugin_manager.notify_message(room, event) + if event['type'] == "m.room.message": + self.plugin_manager.notify_message(room, event) def main(): bot = Bot() diff --git a/plugins/__pycache__/__init__.cpython-310.pyc b/plugins/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..379fb8628429e8dcdd52af6910d9af3643871b07 GIT binary patch literal 142 zcmd1j<>g`kf^B@!=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vIKO;XkRX@Eb zzcgJxCACaHJtr|GzgRanv7{)oLcbuVG(9t~SU)~KGcU6wK3=b&@)n0pZhlH>PO2Tq LsA47{!NLFl+8rMl literal 0 HcmV?d00001 diff --git a/plugins/__pycache__/admin.cpython-310.pyc b/plugins/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef179756f42e3c726069506b328d921e6790aa09 GIT binary patch literal 1092 zcmZ`&&5qMB5VrHvrrEZvN+l2yQjbJ}<^@&=#DUvtMY#|TmKA$LS58yxq=IN~t+XfJ zVLA59+xW_fGdE6noRo$|Sn_1-@yvWP-=r9gLS)vr$M3VJ4np7I&|RK6yf9lmF@hn6 z1cS`-C77Ya zxj~nhVdm_D#I-s^4ib<1S3Tyl-WSaJEZCtfPWqj@0SoP2aDzOQ3{3tL?Z0ICa+Tsv zPS7DO?4J`ON>t)&v~_NsuLufSpglg1TRC=px%?EbZT%{y0B64bEc+&E00>OC(FE6H3v_-+ z^Iyagn2^2^kt=(kTYMqo2UiJUCD18{AVwhW8F2#2*ogYHNp|#kYdG>PwiMzY7U+QQ zmDvhBuhA8{#kNh@^w+7!Z@4HZo3-`Trw!3+Cha|Ek)y|rk>qqmGcNVGv60qi@5zA) ztvy*3x%T;nuS)GvnW+ZDTA6W>_8r;vJe+ou$=mdD`{szcZ^{D^= literal 0 HcmV?d00001 diff --git a/plugins/__pycache__/free_games.cpython-310.pyc b/plugins/__pycache__/free_games.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37b159d60642810a9dd41ba64465c6eb3f9351e8 GIT binary patch literal 1268 zcmZ`&&u`l{6edMVmK8ZGyl&lY-erIfwJ@|mi()N`u3K-xfZT))geKCCTFP=rDo9-U zlmP9YVIT7^@w(H_J*}s`rzA}-BfyUze>}eT_&zqHQ9_{2Uj4Bs86kh;a5T!1x72=Y7ev}mSdaU81Z*e=+o&799RN>c3_L~#`&PRh5 zXHsRlX`C%h0p%5VuCK`KwAP*>glg%`ndiD%zVrOZsJRba<+NI}_nTzR0TLhRY8^hD z06&-xeQeZmtE{u0EtE5;Ek7umrGu+{Jg=5g6k2eTt6Rj`Y6ni^Dt z=cZ|Dh~fl|d0`gTQv-aoiUAYNuCkuP1}@#dPbsSW5FF z&PLatqf}Z8aVM@`kG&L8W++jMNyj9mDT~;c_Bx(Me*gN<%&x{OC+si#xPM*q0F3&h ackaGTJpTDA=ok3gE&j7KNQ0Q(Xa4~JQ8YII literal 0 HcmV?d00001 diff --git a/plugins/__pycache__/help.cpython-310.pyc b/plugins/__pycache__/help.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e22b88115cb21e8d1ca439556790a3df9d3228c4 GIT binary patch literal 1275 zcmZ`&OK%%D5auko4=JnIFbbq8df52Vs6edtQWQZOq;P=tQlo|2i-Leyh}2s4J`{50 zM#>5(U<3IZ($W8*zlGPHa?UNM&aC8EmlELY$KgCa?#xuZUYFr|{>95|E*Sfl4!a9= z>^W|mpioRf&I%X;u%DUo6u)MQYq;V=Pl;33_ur!x>w^n^%V*i79MN%i@$JEWk3h2_ zC^q!ou`wu6-gPwOE#^uf7TRA0Yo>e^T(c_}hVPhQ!wA!aPW+brO0a8C@H*nJD&bPCvHiqn6l#c4jWm@YSaKh?*jNguwqdc`%${Y6a$>6Li z^dK|UEE_0&Imq%L8#H$GGi3C^EJbHEZ}4 z{`m{v94c=G4PV33Z+yicG9@m!d7wn&KVYP5*tvJkS7OaBnK^9y43?r1_Uk+SQYg{} zjd;Oc9WKMoO%pz3%ZTvGZ^AX0;}!>vhxqpL9OR4WvJ%X8AOE`|Z+2<5`IfQI!jRGWf|s_mBQP$8%je zab8VIcYjlFi3!ouxac;y6Bl}J-TuVNR27p_ZZF&(YOF4mHk%65M!F%S3w kv|~Xtye))1+7x7yft+@t-MuyXVMFm5Ro>EA#NKE8KZM&gEdT%j literal 0 HcmV?d00001 diff --git a/plugins/__pycache__/plugin.cpython-310.pyc b/plugins/__pycache__/plugin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f19e764f0fbd346a0cc07a701c05d2fb798702b GIT binary patch literal 1128 zcmZ`&v2NQi5G5tqmK8^C(6oC;4Yk(}K@gxrH={r{cOX=eR#Zr$OVUOYxKj+Yzv3V0 z*bm{_PsrA(ca#*{X-nabJRbSp>Fy{`Pa^{3NBklGNeTId#^DISxB}7VpxzNqINgE> za_`S6_pV9eXW%&+K3G>E`VA;S;2fEI98Pb^+~+UJF@-vj6&(d!EksUmk_G_8e-6 zCPsX~5OLAroS+BQ-C6r5dtZj>>ISa6e|f@@`0hV!prov9Ppn04o>IoOG{xeURYGeh zNepNW?TeQ7*q?Q@I3qR67(_n<^^Gj3Yo+k3w{h(^`zs%qx94~PsW|;k3fChWs6gV) z>_9F}A!`lIGG0kuJ}Z4^d4YcyAH&a*AvR*2R)R4bF;+>wDseqx z?DHxu8;=?wEIti2LWQZbBW+SsWR);ClB<`vzi$k;!Z;LG8R=c-LK4!@$ItU)>U=YJ aPJQ|DlgNy-{{>>hizcv3M01bj-2Veq72`Vq literal 0 HcmV?d00001 diff --git a/plugins/__pycache__/plugin_manager.cpython-310.pyc b/plugins/__pycache__/plugin_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f10978e29179f3cfe3d9adedd6b9aa6c5d09471 GIT binary patch literal 3614 zcmZ`+&2J+~6|d@Vx7$wQ34;Q=kXemZG+L4oVgaFH08Nwy!G@J)zm#QZbzB{%op!fV z-N|meZ3!vE5hU&$Y>CVKHylx2IdS2#;<5+e_p0qoY?ij_qpPdld-Xnk@44u7e1_*& zuYNT6>jq%E(dAer_XnvTgLBWHDSc;*brP8&)Kml zOkrUJ6X9UAg)2Oaj%W!Vqbt550?~QSk3G>98(3+HO|ga17d>$gV_R%PsQaqZaDO|_ z<3S?(#B}-4+(3JZR=$p|<~560ZJ_6sal==?^!CZUyMd^E=tu|%%VIVC1q$Tt4y*}>0rBb(Y;_Y!0^Qn_Roq@vOkc;Q?RA6^1ZxOc~eiFc8)bn|if3 z>%jO7Tw8TZuuCRC5YDWN9UHSv;cDqx;I&n^YWLJgS?&FW|B-Wc@g`P#jTGSByVxSD zh2GJmy-?)dXOE_8BWm8Fg^doCTa2r;$V=remK5JrJPPlrRyrCNvdYpE)oG^Ds1TP~ zqMXx0!b-|b^KzW@E9DQ8YLtvl5(zqK+0Wv#l;mm3Ps{T1q*?H2!CeyZ(sGnkXN6EM zPRCUxB_fq6b6kv-H7wGc3{5^1ManM6Sz4)fEW}cD?MtCA+jPjHeaeJ2pw6J{Bg_v_}}7>pZzGRZk>wze=y- zDp_2*l-t;)w$l76&Qd`i`f>jZdUddHNux~Ydh+Yor@=tBXhy*$zfEU1*GYy}W36D} zgc=}})4ZvLqiO@Ko1@$CTFUki!^(v&%ihBM>kG9vG8XR;{plc*PLpq}0d| zpYNhu8iLe~Pz4y&Mq`i*4TO#I%tm>3S|uZ3-}0g_%;tjpTz(g{)@~smVeR{9pA#1L z;6B!WCf`^UbxCP?)Bh{1e3KYxOE$ttqOAOvhLk^~9jksV-@qE>JW1VTca{0evrG1e zee%-fLyLPUS-za z4M*?Z@N-+9)}DaB)7$Sst9H)~tg)e0JD`p>qf}@$s3@Ppmk|SVUOpAx)X%@!q{rF< z1?L6{m1xY|IpT=;9sr%E?OSSX$QslEvYt`5Z_KGLf+=!)&M!7=yF3@2sbBl@v&yUe zss((X)_jH)iXw`gyDjV<5o+dDl2^()Da7>`{K28@K`|OwlpTu^U@Ukqk1v6AGMyx1 z#h{dw$orn5l@xCjz#lsR0WOh@{$yMj2-jN^hK4fs9w{EbT#_2C{Kr{ZRsitvlOrNU zbhp{$(W-g#qDoJ%BP8V#sdVpgR`lbne1ggHu<}kXbKpRczdPA@FF((VPx9SGUI^RD zFRNHqCs(9UcPup?$sZGw+oIyMxXguy?3Zi(vlwdj$pTR`4>ap2PZE&` zWy@roT`Mb=gHrL+b?tRm74w8NNO2O_h)_f+{T}lBfPIHQGzk1H`~dgpyZBlE^tRR^ zXO-ki^+Cp=rlW`wP>tFHUXKhghj#^2LVP`;_mWw99-YJQo|B_lDxm9^Y5TT?FK1ttAifF?1RuYZVgX226s5(whAEI<4OVgGK@Q8rFV`rb}Yq*hXa%pf*{r zN$%88_~UXI23jQLM~lh~;s#N4aT#Y#@g=*&i!!?W9(9z(bRLl((2V>}9#cpB@5rR3 zBY2WzE4s0UIFF%HcfEUF&$E2X`cijBb*lR{z bUg~pS#!`8Yn_Be=8Bi;P3Ir4fyl4IwK#Ox{ literal 0 HcmV?d00001 diff --git a/plugins/__pycache__/say.cpython-310.pyc b/plugins/__pycache__/say.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20873a448b4fbc8be0149b8dd6e0f0d89a49539c GIT binary patch literal 1205 zcmaJ=&2AGh5VqI*mnaEP3J8J3a$Ero4*(SsMQxFqBEl>kv4xCf%Q6Z>l!REk%6^ z4#_bO01vZQPCfU=iJ9HBiG+$Je;)tNeBX?-X0uM9{c3%Uej0@Q#>r|kVe$^T_5cJC zG$sk{QA)OnFa$d%f=N1IJwupX;#-$+iukm!KgGkSpN2SHZEP{oJ77rCqk{B|3vxgO z6~?*SW2Mc63AQP%sXZgY681Tn(4MoHJHjpJ?gcSPuLf>w1?vW9Azkr=Haf$8wFZ!r zoQ}!Fm>M%efk~IlX~$=UrH98-DLhxWL74YXf?UpNVQLv4z*yrvj03GXpOZf?+lN^q z+mXtKQCrB9b`%F9)31^sSN+rWaYkM;wt7%H4vHzcL2(z78s)zx?0`{@y+XoHiq>cx_%9ilQEk>29Ds- zoDPfu>yj~@n!=b`V`ANJG8d%Nj9$Cd8> z-iI$cyPfSz%tb*xg=5FJ3l__?BE{ff;czapkn^IZWh!_sPxHbYWc_q*sv2H3RhA`% zB~N4uJAsOH#d}HqJ{&_8u28QAbLmrKTJF0el6Un!w%^R>fY}KMbff zXS8)Y_bl}SFX}^}9>#p5#pnI~J^pcbYef{SiBb`D53RcZ9p5O7JS$kDBi~Y3wWUl7 z>8W*uhX{`lO7b@ffJQ*|0d7127`aFum;8F+a-If>1cB?ECz%+=Xg4_jHVoowr!3X7 zgcQbAIAN9~K`JWG&v2=^_y?hkW6oFHmqk~WAl500tFZ)K(x44yvpTh%HCpn(@77xU ck&S9B-Bl!)gqEz_H&wiwSUMUDw_&Wazx06u$^ZZW literal 0 HcmV?d00001 diff --git a/plugins/admin.py b/plugins/admin.py index 5438001..bdafd6a 100644 --- a/plugins/admin.py +++ b/plugins/admin.py @@ -12,12 +12,12 @@ class Admin(Plugin): super(Admin, self).deactivate() @Plugin.command(admin=True) - def admin_reload_plugins(self, msg, args): + def admin_reload_plugins(self, room, event, args): """Reload plugins""" self.plugin_manager.reload_plugins() return "Plugins reloaded" @Plugin.command(admin=True) - def admin_test(self, msg, args): + def admin_test(self, room, event, args): """Simple test""" return "You are admin" diff --git a/plugins/free_games.py b/plugins/free_games.py new file mode 100644 index 0000000..cdccc03 --- /dev/null +++ b/plugins/free_games.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +from plugins.plugin import Plugin + +from bs4 import BeautifulSoup +import requests + + +class FreeGames(Plugin): + def activate(self): + super(FreeGames, self).activate() + + def deactivate(self): + super(FreeGames, self).deactivate() + + @Plugin.command() + def epic(self, room, event, args): + """Display Epic free games => !epic""" + r=requests.get('https://feed.phenx.de/lootscraper_epic_game.xml') + soup = BeautifulSoup(r.content, 'xml') + c_list = soup.find_all('entry') + for c in c_list: + link = c.find('link').get('href') + title = c.find('title') + content = "{}\n".format(title.text) + content = "{}\n\n".format(link) + for li in c.find_all('li'): + content += "- {}\n".format(li.text) + room.send_text(content) + diff --git a/plugins/help.py b/plugins/help.py index a31f218..f98abe2 100644 --- a/plugins/help.py +++ b/plugins/help.py @@ -25,7 +25,7 @@ class Help(Plugin): reply = ['Usage:'] for command_name in command_names: command = self.plugin_manager.commands[command_name] - if not self.plugin_manager.is_admin_command(command_name) or self.plugin_manager.is_sender_admin(msg): + if not self.plugin_manager.is_admin_command(command_name) or self.plugin_manager.is_sender_admin(event): reply.append('{0}: {1}'.format(command_name, command['function'].__doc__ or 'N/A')) room.send_text("\n".join(reply)) return True diff --git a/plugins/plugin_manager.py b/plugins/plugin_manager.py index 7a8d6c9..0e9c7dd 100644 --- a/plugins/plugin_manager.py +++ b/plugins/plugin_manager.py @@ -86,16 +86,7 @@ class PluginManager: room.send_text(reply) def is_sender_admin(self, event): - return False - """Checks if author is admin""" - if message['type'] == 'groupchat': - # We don't know the jid. Either there's a problem or it's an anonymous room - if message['from'].full not in self.bot.presences: - return False - jid = self.bot.presences[message['from'].full] - else: - jid = message['from'].full.split('/')[0] - return jid in self.config.ADMINS + return event['sender'] in self.config.ADMINS def is_admin_command(self, command): return command in self.commands and self.commands[command]['options'].get('admin', False) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..74a30b0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +beautifulsoup4==4.12.3 +certifi==2024.8.30 +charset-normalizer==3.4.0 +idna==3.10 +lxml==5.3.0 +matrix-client==0.4.0 +requests==2.32.3 +soupsieve==2.6 +urllib3==1.26.20