From 6cc3993f3c37935be177ef5f39271375e29d337a Mon Sep 17 00:00:00 2001 From: Klafyvel Date: Sat, 4 Aug 2018 15:17:40 +0200 Subject: [PATCH] =?UTF-8?q?Parce=20que=20Python=20c'est=20bien,=20en=20fai?= =?UTF-8?q?re=20ex=C3=A9cuter=20par=20les=20bots=20c'est=20bon=20esprit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bots.yaml | 9 ++++- klafirc/__pycache__/__init__.cpython-36.pyc | Bin 280 -> 0 bytes klafirc/__pycache__/__main__.cpython-36.pyc | Bin 165 -> 0 bytes klafirc/__pycache__/bot.cpython-36.pyc | Bin 2017 -> 0 bytes klafirc/__pycache__/irc.cpython-36.pyc | Bin 2626 -> 0 bytes klafirc/__pycache__/loader.cpython-36.pyc | Bin 1363 -> 0 bytes klafirc/__pycache__/runner.cpython-36.pyc | Bin 1017 -> 0 bytes klafirc/__pycache__/settings.cpython-36.pyc | Bin 668 -> 0 bytes klafirc/bot.py | 37 ++++++++++++++++-- klafirc/bots/.__init__.py.swp | Bin 0 -> 12288 bytes klafirc/bots/.chuck_norris.py.swp | Bin 0 -> 12288 bytes klafirc/bots/__init__.py | 1 + .../bots/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 171 bytes .../__pycache__/chuck_norris.cpython-36.pyc | Bin 0 -> 571 bytes klafirc/bots/chuck_norris.py | 13 ++++++ klafirc/loader.py | 4 ++ klafirc/settings.py | 11 ++++-- requirements.txt | 5 +++ 18 files changed, 72 insertions(+), 8 deletions(-) delete mode 100644 klafirc/__pycache__/__init__.cpython-36.pyc delete mode 100644 klafirc/__pycache__/__main__.cpython-36.pyc delete mode 100644 klafirc/__pycache__/bot.cpython-36.pyc delete mode 100644 klafirc/__pycache__/irc.cpython-36.pyc delete mode 100644 klafirc/__pycache__/loader.cpython-36.pyc delete mode 100644 klafirc/__pycache__/runner.cpython-36.pyc delete mode 100644 klafirc/__pycache__/settings.cpython-36.pyc create mode 100644 klafirc/bots/.__init__.py.swp create mode 100644 klafirc/bots/.chuck_norris.py.swp create mode 100644 klafirc/bots/__init__.py create mode 100644 klafirc/bots/__pycache__/__init__.cpython-36.pyc create mode 100644 klafirc/bots/__pycache__/chuck_norris.cpython-36.pyc create mode 100644 klafirc/bots/chuck_norris.py diff --git a/bots.yaml b/bots.yaml index 9ff7ea3..c7fc988 100644 --- a/bots.yaml +++ b/bots.yaml @@ -45,8 +45,15 @@ bots: - "Tu sais {user}, si j'suis toujours si bien accompagné, c'est pour mon argent hein, c'est pas pour mon odeur... Et ça ça fait mal" - "Ou tu sors, ou j'te sors, hein, mais faudra prendre une décision." - "Et à propos de vieille truie toi comment ça va ?" + Chuck: + on_ping: + - "No, thanks." + on_ping_python: + - 'klafirc.bots.chuck_norris.on_ping' + channels: - server: irc.rezometz.org port: 6667 channel: "#campus" - bots: [sel, Macron, Patou, Claudy] + bots: [sel, Macron, Patou, Claudy, Chuck] + diff --git a/klafirc/__pycache__/__init__.cpython-36.pyc b/klafirc/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index c4c15dc393573b1050506a303e74799f15cfecb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmX|5yH3ME5WI&2ks&?hwQlY}vs23AqU&4Z>gH%ps*0%MzU$EH{F_r)!6!+= zL0;>d=OUZV0c@xN%Cp%PK> X1L)m2E$`Z3_a5&hy+|2RCN9MvaRg2n diff --git a/klafirc/__pycache__/__main__.cpython-36.pyc b/klafirc/__pycache__/__main__.cpython-36.pyc deleted file mode 100644 index 4ae9bb2fc4c1aead656145e2be0c5195d5f07c6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmXr!<>lJ;IVoC_fq~&M5W@izkmUfx#bQ7rg&~D8has0Sijk2am9d$Dks*aCm_d{I zB_mK$lkpaFQE8r^Cetm3B9OL~3`HzJ3QYXc)6dAyP1VoNNldFOOU=|ZFO~ZcU5&w)mP<@wzqqK{&V{6&mBVk zA{)a7{uriu4+tlmW@K2ebVwf&ZgKl5;r7ZJTAY4G0_Sg#BPTJ^W>~-+!&G;H2r{Ic zpftChlA+CQ?!fABmwT|fyu*E1J>CUtJ#Bwdlrb8>fvW@aQ<&-qNJT3Wf>S`Lp z@Gwu}vpkxL!*p+yajS5$xbedWM}rUVv*5vZ#}9r&#brRXgA9C~-&oU~ zcoOBg$h0#nWT`zRji3GIyvIgLu)!@Cf;coJCJ zQ6d{j4Ak#Lz6Q&S;9ycr#lcw?jV{kccEH8C*?_O@3ZFliU1~oJ6NpL}x)|ggAjI?N z)o;;BNQx7}okCKc+e^E$fVWF0bt{^BBU0JFLOPBBLy&2E z@yA2XAq&k1v$ANSI(St+%ts%xuOR`dln@4XF-hXdU6zcPxf7gSBw5Dbay%B&7>#mu zA>^RV6DGEK_+?wQ{wX{l^72Y4uq9Lrkr*h6aX1M&8z&eM=_BbO*+S9>5;zj0s$Juq z_M3Mxt9dD&lqO|0*+s#A#Ch0Ay#Xf*trFj%4((ZsUChU($bZTOOUC2`O<_(TBM@~8 zMFUZ{7H_{C^@t&wP6A7IK}UPhY$kFJTXb8Z1J^zD@p)9b4VTJPt6k%yxri|uIM8H^ zliy$iSO8yE&<*y<(lLlZoLH4pL2r2OF5NL%dQUz^?4-_$d`7;%v+PtIK#{$o@?Pbo z9^O@*eUf$nRW726lE?SHA(huB@)_LvYw2fYH|@cGYegH`rH>Z4llI|7e{8LccI82I z+~_7H_#Yv>_&;V(}@h?R=m-)3O_c`>Q%eH(P?5V3~U(nkUVgoVS zKs?rfcJOO;XYIzqW```;)~=dmNmql)+5E|wD)*_s13%ZCLc=kw|MazgR6B4V^P@1>V8r?t DNZjE3 diff --git a/klafirc/__pycache__/irc.cpython-36.pyc b/klafirc/__pycache__/irc.cpython-36.pyc deleted file mode 100644 index 12c69a07aa86c80ef75d9f26d6879a31d28c145f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2626 zcmaJ@OOx9~5T4Q7UVF17n=FqMB|>@_kFX_rDXKtMMdPcU_VGFsYr#-Lk`TFaYKI`|p)4z{?{l#PKFLvf}px;JQ zzd;Blc)=z-=A3k^uqJkFPn_7ne_J?(JMm&q>u%vsf;iypYbHG5KV`zt__(vM<1R)5 z(ZNV3bH-a3>51-7EZTYj3oPP|oy#<`8ee9Ew60_m9LuV%(yDmD+XY`$HP(4WH5z3y zrESZ{ZWVP0O2%R?SZoO%+t1jL3rpBfgV@o!BV6dNaW3|ZOR+DyV(Tf3gJ;ZPaR+Yo z8t~PY{t^^*Kb%YCdNRYiunrS=(br@Uc5*V^3Jm`2xT} z_t64?p<#p#`*3#YNjaEgr(v$bv?|Lituui;Iy4$}8&^$_GbsaDXtvu0c~yQl5SjF8 z(8bV%FD(dYA8<{KfO1==>;9FvSNt7lO$;|P%26OWdB4r z?p2fQ#{FV2Jb9QEH$?VO|3OGrJ@ozK6S)PmT{H#C0ElhA%V(DjRQsDArWUQhL%oZp z(fR<&8m+m;<}6-w#Ot|r7NfV;7>Qi1UT%jURZ~-ASAYAB8=QK@DMU*JZmu`FAX?r_dK)xHB2p?>$lFCnUr#c9^wq? z+Ot2BTW#^ zm)KT=6B8v*N2zh93du=`H1)B|$M{8Lj)T_av+WkG zb`cUkND|89Bx$-yGO5J0Aib9)52k~no$-@IRB4jvl+-kpui{`yagc98H2pTm)2t}4 zZpEr4$u+-;)>KQhTi~|Ub9;VZ2e!_i6f>)bn0FgZeFU*Cv%*5@wCPQN9tBo-=w0E9 z0KF%uoOYX*5qC{R+92y@qJXLin{%RUf;x`PNEA!H4wDA`mWg^`btRpv1Y2I_b&|YG zUTW5HkI$|cd|TW5%S9<=2|d)WoS+!d zqr{r}z0M$HHzjk^X=f^_E6h3!#^>EspLk%l<3uVXR3%&g13tU9>Hm2fHts_AIiM2= zBg%e(^fIYbTVtDUw!F{o+HN=;=%FCYJ)hF(g zD<&A*e0Kf+FJrc>_^}ZhbDae{wdQPYCAz4MZD?qQCypkqDO;K#y1uu8a0Wuih9AEi zf&S4nFT@Y+=f zOuU1pjRib#=%+^yqkgdl)MjTno0oMa%dFO6k_58J6soj% yZ)A0ia;J1S;|}g&=xbh$eeIh}zWFaiXEh!G diff --git a/klafirc/__pycache__/loader.cpython-36.pyc b/klafirc/__pycache__/loader.cpython-36.pyc deleted file mode 100644 index e361f08946793c69e0cda58730074d85c3b12451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1363 zcmZWo&u`>36t*45$;{5S-BR`kEUO;&z({B-!DT@RtpJG&8j0ml6hI-3GtGp)8F2{r$oO`|u6W3x9LcFJAwW!qy= zRl8UeCMVyn34j;q-BXx?C0w&aXs*R;mIOM`5~CdQBX@+{u~Xl+nMNLprADV6p?`(m zJ%{Ppl51}H1GeRy^}_Nk|NU?y`d}%o*mBF#@D%s@j=f|*um!`v(hRx9?B;z+UN(#4 zylv*?;?iV&**3>>)7Hn+$bc#4WZBGHC)-ugIC-7bm6H{soYZCBJ9*aj-868rE2_DR z=VetiSzS0j|AU!*#Q*)#$$48BC$Fk(etlI`C%U-uKc&h49Vua9o~^E3oTg<{_Guc^ z{m3xB$H)9Wzu6y{c(z-ShvY>YqZ9U&tN|=rLdHkTqHn?;e*jNAO_fPgtoy zX*e@?us`IFn=*ezOe9g;q$_Zo!~k{H=jYSd(2)&E=~P#ktHQV_KhK(`0K2Q!^e$Kw zeG+F{53v(MrpR*AXF4_$3YC=K9C=7t%)12RzNlAK){d>LpipDYETZkZ6#DGYRo&>+%r?&c@N0z6Al8<4b5XRH0xBhLXm68L-Y>O4+uRZL*ynSD)-d$en^wZ zIF$JhEBYR#+4-057u`zcbNd2` RKOau>1*tovMI}sve*la4G^79k diff --git a/klafirc/__pycache__/runner.cpython-36.pyc b/klafirc/__pycache__/runner.cpython-36.pyc deleted file mode 100644 index 5df96e3670787bf3298c145ed49a145972f97350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1017 zcmY*XOK%e~5cXqV**vIF#R;KuT!h*KSAQn1 z(q1|B&WRH<-ZlhF9*-Y0-#6d*MZcfUe;O zk_+zrpa{xPgx(K}sEkEiCL*Ea9Z`{rZ-|PQOmtMDIyXe5D*Z&V?k(gb8Es;t#}ikZ zTiWiUgLCOwVu#&VtOyj4pxtk7wRzZ^+jt*VOR^Fu!Iln1u^Ei(tkJwuDZdZ+<3l znqbU*RUOlTT%v;o$>Z8t5uh~)Wss9dCpAblaYwr!MP#+P&_)DjwQ&uHT0oW*UvY>M zT`+Rmw#zHhnjYptQBfp|&k0TGfF|@2y-M#2hFqg8L{X}7sikaEDa%^T3-o(Zp3lcc zdt>^Lz~@`Tz|_VAp_zK3=~ z2e)#&1thDyI@x-f1tx;nCdjL4?EyR?__Pte(PoX>s{Dr#VKEHLkEo9rWnHo1zUS6y zwVhW^n@T$`yl;&EbAkiB?}$jOb`BU=5AQ$YKlC-sl^jj-vQ_aF7VgFGu^#Qw4L0ch E1#|GzIRF3v diff --git a/klafirc/__pycache__/settings.cpython-36.pyc b/klafirc/__pycache__/settings.cpython-36.pyc deleted file mode 100644 index a534a13e0ab409fe53dcc314a0508e2f6045148b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmaJ;J#X7U481!`)<=$@sRr!T zzos4fgKq7Vy;Fvwl&Zw(QVAmYNIsHydfn@Vzkl6)`oReKNuE6}#wYlh?`R~ER1sc# zrf9)9qeOOiM>^b*E_Z>NJ=kfwy?Gy^mbZ)3V~C&i#sBohb)Te{WDwrtz2ss*?TZg(C8~UpjdKO>#X>63 zSL>JQU0Fc-S&7+d2`ZJaY(TDW)0?s~$x0Mzy`L_HPF0yb)oKFvB$!*jIyx5Sw#o|_ zn1kW);OJNZ&RU3Vq5xw=hILCtelpr6_Y}_>>{$;7WOx*h+aS67dz#Vs3y5{!osK@9 zS${OWx*nfTPPspso;8sTGN>lV25q}F8NF{XRqwXW`Neo@gK?<~QB_z9W{)9{W~jh* zyT?Yz*|vp3%2piPyR0;bqJ_L~8u&>3M)V$D*qDdpKQgvbrMRb--y~mF)_+r!@~eWk ewG8GEjZY)yP<)w>zRw~S(msu7NJEA-^nU>AvAq-k diff --git a/klafirc/bot.py b/klafirc/bot.py index 964cbd7..2802047 100644 --- a/klafirc/bot.py +++ b/klafirc/bot.py @@ -1,5 +1,6 @@ import re import random +import importlib class Bot: def __init__(self, nickname): @@ -31,11 +32,30 @@ class Bot: } self.reactions[re.compile(match.format(**context))] = reaction + def add_python_reaction(self, match, reaction): + """ Add a Python callback to the reactions. + + Args: + match: The string which, if matched will trigger the answer. + reaction: The path to the callback + """ + self.add_reaction(match, self.fetch_callback(reaction)) + def add_ping(self, reaction): """Add a reaction to a ping""" - self.pings.append(reaction) + def add_python_ping(self, reaction): + """Fetch a Python callable and add it to the pings""" + self.add_ping(self.fetch_callback(reaction)) + + def fetch_callback(self, path): + """Fetch a Python callable""" + s = path.split('.') + module, callback = '.'.join(s[:-1]), s[-1] + module = importlib.import_module(module) + return getattr(module, callback) + def get_reaction(self, user, channel, message): """Get a reaction to a message. @@ -62,11 +82,20 @@ class Bot: result = [] for m in self.reactions.keys(): if m.search(message): - result.append(self.reactions[m].format(**context)) + r = self.reactions[m] + if callable(r): + r = r(self, username, channel, message) + else: + r = r.format(**context) + result.append(r) if not result and self.ping_match.search(message): - sentence = random.choice(self.pings).format(**context) - result.append(' : '.join([username, sentence])) + r = random.choice(self.pings) + if callable(r): + r = r(self, username, channel, message) + else: + r = r.format(**context) + result.append(' : '.join([username, r])) return result diff --git a/klafirc/bots/.__init__.py.swp b/klafirc/bots/.__init__.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..ea1c7e55a1fef9edd7f44c6f696db64d27691bd8 GIT binary patch literal 12288 zcmeI%O-=$a7{>7z_eRA7P-N{4=!S$7xL~JlNNi??nb5#|q!bc1dKs_cP2e8Rps?d( z3;dfjP1Cnco?p^M)3E*i(pO!tEoHkES$@ZZ*T#q3^+d*#AX&`gNwu`Eg@H?hY+uFS z+UMp#e;CjGYGQ1(9mCvBeXUJqoYr2kID8%z2q18zz|19&-D`P%>a4GN>!GRc>u*PH zrVIfD5I_I{1Q0*~0R+xLz!f$5DuZ18hpFut&mk)r5I_I{1Q0*~0R#|0009ILxKx2) zDDrb7vMPJ^|G#JY~`%w@yW)Sv1yJ IZmpThFNnu4p#T5? literal 0 HcmV?d00001 diff --git a/klafirc/bots/.chuck_norris.py.swp b/klafirc/bots/.chuck_norris.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..d6363dcf96899adaae6c965078c5afb3edd5181e GIT binary patch literal 12288 zcmeI&L2eT<6b9gz?h7qk;E^tps9~nSrYhfHSHDJ z9)KgT;36D?1#dDFB#?*x#;IP!^+V>8U;WqyA1AXanU9QhF7r{j{C7=^fB*y@ zAW((L^TTa=_438)tG?HL#!sJ|K42n-KmY;|fB*y_009U<00RGuKqx!(Q4X`!9%#Gm zJAd@;BRU8`00Izz00bZa0SG_<0uX=z1U67Wr9{_{h`vke|Nqy&|9?Ct`X>1*`69WK z+)8dFpCxCKp=4juk*wx#;Q6s-2tWV=5P$##AOHafKmY;|*jxerOLIC@&hS)+QDRNd zCiDlC>IqvjDl;?f%N6t?S6;gzCo^S?&WBuR@6}Wfj)>~AZH-HBO_W=e`o4?WVuSPE zLgkh2T{I*4SVq6Ev=2U#HT%6;2&F%YV^wC+>Y{sl&pos8rJZXZJ7rQ^^qNimwoO@` xvZAyuaJ}^U^SVBDyIp#tLo#Eh*^BsE%^fq~&M5W@izkmUfx#R5Pgg&~D8has0Sijk2ag(;XplldhhP*{`k z7Ef|UX>xXaUVc$gX0e|p(=CP~kj|A1MJzxHO#Cv|&&bbB)z8jJOsgzQ&CyRuEdz5h oi<04VQhrIXetdjpUS>&ryk0@&Ee@O9{FKt1R6CGG#X!se02Ep(Z~y=R literal 0 HcmV?d00001 diff --git a/klafirc/bots/__pycache__/chuck_norris.cpython-36.pyc b/klafirc/bots/__pycache__/chuck_norris.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8da7df67fb04cd61f4256c107a07037104dd20cd GIT binary patch literal 571 zcmYjNv2NQi6eJ}oQk4eim~_(CYO#Q3C{PqZfdU=9WOE0BB^gVyL^^zw0SC$Cj{TAR z64y-mg-(5>gCYcY_Z}s_yW{2ASvmbtKhG&4Pvq4~u>OV{J|al6B9h8vq$?UZStT-+ z>^E7ZGLt9BOeWW)&hI{zKa>+)#VgCTG*czIS!^n8tnHz?;lfpTUdbLtzK5!Ji}D#2 z$WjCh3!RXl{v9{GM{s07)dPJXE*a8$GOz=Bxge;QF7G~c&TZjK)9`J-h+;>rMQ@tH zY!oy{BR<>laaMKa3#)Et1rB_=R?f2ljP}`RxCEaIqn*;Ork>hIV&9_4 zezV`Hv5{&Qo8F55{L46KqI~M-Cw! zUDn4xYvxlF@N5QU(PPK8R-?}+1;E!Tx;#ROw|#DOyY2P*EjAFIl2H2&5wquQD~)Jd kn__RX0KrQ9{Ax^yZR4!s>ty6Ss;h7TLI_3+TBHU02d4ju(*OVf literal 0 HcmV?d00001 diff --git a/klafirc/bots/chuck_norris.py b/klafirc/bots/chuck_norris.py new file mode 100644 index 0000000..458c6fd --- /dev/null +++ b/klafirc/bots/chuck_norris.py @@ -0,0 +1,13 @@ +""" +Fetch a random chuck norris fact and dislays it. +""" +import requests +import json + + +def get_content(): + r = requests.get('https://api.chucknorris.io/jokes/random') + return json.loads(r.content)['value'] + +def on_ping(bot, user, channel, message): + return get_content() diff --git a/klafirc/loader.py b/klafirc/loader.py index 9d8e355..81f9135 100644 --- a/klafirc/loader.py +++ b/klafirc/loader.py @@ -19,10 +19,14 @@ class Loader: b.port = port for ping in template.get('on_ping', []): b.add_ping(ping) + for ping in template.get('on_ping_python', []): + b.add_python_ping(ping) matches = template.get('on_match', []) for match in matches: b.add_reaction(match, matches[match]) + for match in template.get('on_match_python', []): + b.add_python_reaction(match, matches[match]) return b diff --git a/klafirc/settings.py b/klafirc/settings.py index 1d3ab7c..e5beb14 100644 --- a/klafirc/settings.py +++ b/klafirc/settings.py @@ -1,9 +1,14 @@ import logging from logging.handlers import RotatingFileHandler -DEBUG = True -BOT_FILE = '/etc/klafirc/bots.yaml' -LOG_FILE = '/var/log/klafirc/klafirc.log' +DEBUG = False + +if not DEBUG: + BOT_FILE = '/etc/klafirc/bots.yaml' + LOG_FILE = '/var/log/klafirc/klafirc.log' +else: + BOT_FILE = './bots.yaml' + LOG_FILE = './klafirc.log' logger = logging.getLogger() diff --git a/requirements.txt b/requirements.txt index ca9cb3b..3d0284a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,16 @@ attrs==18.1.0 Automat==0.7.0 +certifi==2018.4.16 +chardet==3.0.4 constantly==15.1.0 hyperlink==18.0.0 idna==2.7 incremental==17.5.0 +Klafirc==0.1 PyHamcrest==1.9.0 PyYAML==3.13 +requests==2.19.1 six==1.11.0 Twisted==18.7.0 +urllib3==1.23 zope.interface==4.5.0