{"id":2121,"date":"2020-10-18T13:35:26","date_gmt":"2020-10-18T13:35:26","guid":{"rendered":"https:\/\/oursoide.wordpress.com\/?p=2121"},"modified":"2020-10-18T13:35:26","modified_gmt":"2020-10-18T13:35:26","slug":"ca-va-etre-tout-noir","status":"publish","type":"post","link":"https:\/\/blog.nanuq.me\/?p=2121","title":{"rendered":"[ARCHIVE] \u00c7a va \u00eatre tout noir !"},"content":{"rendered":"<p><em>\ud83d\uddd3\ufe0f Note : Cet article est une archive import\u00e9e de mon ancien blog. Certaines informations peuvent ne plus \u00eatre \u00e0 jour.<\/em><\/p>\n<p><!-- wp:paragraph --><\/p>\n<blockquote><p>TA GUEULE !<\/p><\/blockquote>\n<p>Quand on r\u00e9cup\u00e8re une r\u00e9plique culte pour cr\u00e9er un bot rigolo sur Discord &#8230;<\/p>\n<p><!--more--><\/p>\n<h1>L&rsquo;id\u00e9e<\/h1>\n<p>Bon, vous n\u2019\u00eates pas sans savoir qu&rsquo;au vu de la situation sanitaire, le gouvernement a mis en place <a href=\"https:\/\/www.gouvernement.fr\/info-coronavirus\/couvre-feu\">un couvre feu dans certaines grandes agglom\u00e9rations.<\/a> Du coup, vu que je ne peux plus aider le petit commer\u00e7ant du coin en buvant des pintes jusqu&rsquo;\u00e0 tard dans la nuit, j&rsquo;ai utilis\u00e9 ce temps pour coder un petit bot rigolo ! Le principe est simple : Envoyer un message tous les jours \u00e0 21h00 \u00ab\u00a0Ca va \u00eatre tout noir !\u00a0\u00bb &#8230; (il s&rsquo;agit d&rsquo;<a href=\"https:\/\/fr.wikipedia.org\/wiki\/RRRrrrr!!!\">une r\u00e9f\u00e9rence \u00e0 ce flim<\/a>.)<\/p>\n<p>&nbsp;<\/p>\n<h1>Pr\u00e9ambule<\/h1>\n<p>On en avait d\u00e9j\u00e0 parl\u00e9 dans un pr\u00e9c\u00e9dent article \u00e0 propos de <a href=\"https:\/\/blog.nanuq.me\/2020\/06\/14\/cockatrice-en-francais\/\">Python<\/a> mais je vais quand m\u00eame le rappeler :<\/p>\n<ul>\n<li>Je ne suis pas d\u00e9veloppeur. Je fais un peu de code des fois pour rigoler sur mon temps libre ; mais disons que je code avec les pieds. J\u2019ai pas mal bidouill\u00e9 avec le langage VBA sur Excel. Autant dire : c\u2019est pas glorieux.<\/li>\n<li>Par la suite, vous verrez qu&rsquo;on va utiliser Node.js ; sachez qu&rsquo;il y a 24 heures, je ne savais m\u00eame pas que ce truc existait. Autant dire que je pars de loiiiiin.<\/li>\n<li>Je ne compte pas vous apprendre \u00e0 coder dans cet article, mais \u00e0 vous expliquer le cheminement et comment je m&rsquo;y suis pris.<\/li>\n<li>Pour information je suis sous Linux Mint 19.04 (mais ca doit pouvoir se faire avec d&rsquo;autres OS)<\/li>\n<li>J\u2019imagine qu\u2019il y a plein d\u2019autres moyens d\u2019arriver au r\u00e9sultat final. C\u2019est une fa\u00e7on de faire, c\u2019est certainement pas la meilleure.<\/li>\n<li>Je suis peut \u00eatre en train de r\u00e9inventer la roue. Il est fort\u00a0 probable qu\u2019il existe d\u00e9j\u00e0 une solution quelque part sur les internets&#8230;<\/li>\n<li>J\u2019esp\u00e8re que cet article vous apprendra des choses, et vous donnera des id\u00e9es pour d\u2019autres projets. N\u2019h\u00e9sitez pas \u00e0 d\u00e9tourner son utilit\u00e9 premi\u00e8re pour arriver \u00e0 d\u2019autres fins.<\/li>\n<li>Enfin, cet article n&rsquo;a pas pour but d&rsquo;approuver ou de critiquer les d\u00e9cisions gouvernementales, ce n&rsquo;est qu&rsquo;un pr\u00e9texte pour faire un robot rigolo.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1>Le projet<\/h1>\n<p>Alors, on va donc cr\u00e9er un bot qui , tous les jours \u00e0 21h00 , postera un message \u00ab\u00a0\u00c7a va \u00eatre tout noir !\u00a0\u00bb sur mon salon <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Discord_(logiciel)\">Discord<\/a>.<\/p>\n<h2>Discord ?<\/h2>\n<p>Oui alors <strong>JE SAIS : C&rsquo;est pas libre.\u00a0<\/strong>N\u00e9anmoins j&rsquo;ai quelques personnes dans mon entourage qui utilisent \u00e7a, et j&rsquo;ai install\u00e9 <a href=\"https:\/\/t2bot.io\/discord\/\">un bridge<\/a> entre <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Discord_(logiciel)\">Discord<\/a> et <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Element_(logiciel)\">Element<\/a> (histoire que ce soit \u00ab\u00a0un peu moins pire\u00a0\u00bb). Mais bref, c&rsquo;est pas le sujet, \u00e0 la rigueur je pourrais en faire un article un autre jour.<\/p>\n<p>&nbsp;<\/p>\n<h2>Faire un bot<\/h2>\n<p>Par chance, on trouve tout un tas de ressources en ligne pour apprendre \u00e0 cr\u00e9er un bot. Je me suis pas mal bas\u00e9 sur <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-build-a-discord-bot-with-node-js-fr\">cet article.<\/a><\/p>\n<h3>En r\u00e9sum\u00e9 il raconte quoi le d\u00e9but de cet article ?<\/h3>\n<ol>\n<li>Avoir l&rsquo;environnement Node.js sur sa machine (\u00e7a d\u00e9pendra de votre syst\u00e8me d&rsquo;exploitation et <a href=\"https:\/\/nodejs.org\/en\/download\/\">vous trouverez ce qu&rsquo;il faut ici<\/a>.)<\/li>\n<li>Avoir un compte Discord (pas besoin d&rsquo;un compte premium, le compte gratuit suffira)<\/li>\n<li>D&rsquo;un \u00e9diteur de texte<\/li>\n<li>Ensuite via l&rsquo;interface D\u00e9veloppeur de Discord on va cr\u00e9er le bot (<a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-build-a-discord-bot-with-node-js-fr\">r\u00e9f\u00e9rez vous \u00e0 l&rsquo;\u00e9tape 1 de l&rsquo;article<\/a>)<\/li>\n<li>On va faire tout ce qu&rsquo;il faut , et on ajoute le bot \u00e0 un salon \u00ab\u00a0test\u00a0\u00bb<\/li>\n<\/ol>\n<p>\u00c7a donne \u00e7a :<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db0-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2130 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db0-1.png\" alt=\"\" width=\"176\" height=\"64\"><\/a><\/p>\n<h3>\u00c9tape 2<\/h3>\n<p>Pour l&rsquo;\u00e9tape deux, j&rsquo;ai fait un peu diff\u00e9remment du tutoriel; j&rsquo;ai tout fait graphiquement dans mon environnement de bureau ; \u00e0 savoir :<\/p>\n<ul>\n<li>Cr\u00e9er le dossier<\/li>\n<li>Cr\u00e9er le fichier config.json (avec le token du bot)<\/li>\n<li>Lancer le terminal depuis le dossier en question et lancer la commande <code>npm init<\/code> et <code>npm install discord.js<\/code>.<\/li>\n<li>Cr\u00e9er le fichier index.js<\/li>\n<\/ul>\n<p>Le fichier index.js contenant :<\/p>\n<blockquote><p>const Discord = require(\u00ab\u00a0discord.js\u00a0\u00bb);<br>\nconst config = require(\u00ab\u00a0.\/config.json\u00a0\u00bb);<br>\nconst client = new Discord.Client();<\/p>\n<p>client.login(config.BOT_TOKEN);<\/p><\/blockquote>\n<p>\u00c7a donne \u00e7a :<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db1-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2128 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db1-1.png\" alt=\"\" width=\"729\" height=\"309\"><\/a><\/p>\n<h3>Il est vivant !<\/h3>\n<p>Bon maintenant, on va lancer le bot. J&rsquo;ouvre le terminal depuis ce dossier, je tape <code>node index.js<\/code> ; et je regarde sur mon serveur discord et&#8230; TADAAA ! Le bot est en ligne \ud83d\ude42<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db2-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2132 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db2-1.png\" alt=\"\" width=\"192\" height=\"76\"><\/a><\/p>\n<p>Ensuite, j&rsquo;ai arr\u00eat\u00e9 de suivre le <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-build-a-discord-bot-with-node-js-fr\">tuto<\/a>. Vous pouvez bien sur continuer de vous amuser ; mais le tuto en question fait r\u00e9pondre le bot \u00e0 des commandes utilisateurs. Or moi je veux faire quelque-chose de beaucoup plus simple : lui faire dire des trucs \u00e0 intervalles r\u00e9guliers.<\/p>\n<p>&nbsp;<\/p>\n<h2>Faire r\u00e9p\u00e9ter des trucs \u00e0 intervalle r\u00e9gulier<\/h2>\n<p>Bon, j&rsquo;ai fait mes petites recherches sur les internets pour voir comment on fait . Car je ne parle pas le <em><strong>js<\/strong> <\/em>donc je vais juste recopier des petits bouts de trucs et les assembler ensemble pour tenter d&rsquo;arriver \u00e0 mon r\u00e9sultat.<\/p>\n<p><a href=\"https:\/\/stackoverflow.com\/a\/49079053\">Je suis tomb\u00e9 l\u00e0 dessus.<\/a> &#8230; Bon&#8230; Qu&rsquo;est ce qu&rsquo;on y apprend ? Je laisse tomber le code (je n&rsquo;y comprends rien) mais je regarde les deux philosophies propos\u00e9es : <strong>Cron<\/strong> et <strong>setInterval<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<h3>setInterval<\/h3>\n<p>L&rsquo;id\u00e9e consiste \u00e0 mettre un minuteur sur le bot, qui se remet \u00e0 z\u00e9ro toutes les 24 heures ; et avec une petite bidouille, s&rsquo;arranger pour qu&rsquo;il poste le message pile \u00e0 l&rsquo;heure que l&rsquo;on souhaite. Et hop le minuteur refait un cycle de 24 heures.<\/p>\n<p>&nbsp;<\/p>\n<h3>Cron<\/h3>\n<p>Cron est un programme que l&rsquo;on retrouve sur Linux notamment qui permet de lancer des actions \u00e0 des heures, ou \u00e0 des intervalles pr\u00e9cis. Par exemple, on peut lancer une action une fois tous les deux mois (pour faire une sauvegarde par exemple).<\/p>\n<p>L&rsquo;id\u00e9e ici consiste \u00e0 faire un bot qui se r\u00e9veille, poste le message, et se rendort. En parall\u00e8le je demande \u00e0 Cron de \u00ab\u00a0r\u00e9veiller\u00a0\u00bb le bot tous les jours \u00e0 21h00.<\/p>\n<p>&nbsp;<\/p>\n<h3>Quel solution on prend ?<\/h3>\n<p>Par analogie, c&rsquo;est comme si on devait \u00e9clairer une all\u00e9e de garage :<\/p>\n<ul>\n<li>La methode SetInterval consiste \u00e0 mettre un minuteur de 20h00 a 7h00 du matin (grosso modo : quand il fait nuit) et la lampe va rester allum\u00e9 toute la nuit.<\/li>\n<li>La m\u00e9thode Cron consiste \u00e0 mettre un d\u00e9tecteur de mouvement qui allumera la lampe seulement quand c&rsquo;est n\u00e9cessaire.<\/li>\n<\/ul>\n<p>Je vais donc utiliser la m\u00e9thode Cron car j&rsquo;ai pas envie qu&rsquo;un processus tourne en t\u00e2che de fond pour juste \u00ab\u00a0attendre\u00a0\u00bb.<\/p>\n<p>&nbsp;<\/p>\n<h3>Le code<\/h3>\n<p>Je me suis inspir\u00e9 de ce qu&rsquo;on a <a href=\"https:\/\/stackoverflow.com\/questions\/47548081\/send-scheduled-message\/49079053#49079053\">trouv\u00e9 l\u00e0<\/a> pour la m\u00e9thode Cron. Et j&rsquo;ai voulu le simplifier encore plus. J&rsquo;ai fait quelques recherches (j&rsquo;ai cherch\u00e9 surtout des exemples) pour comprendre comment le <em><strong>js<\/strong><\/em> fonctionnait. L&rsquo;id\u00e9e \u00e9tait de se passer des v\u00e9rifications( bon channel, bon salon). Juste t&rsquo;envoie le message, et tu te d\u00e9co. Voil\u00e0 ce que \u00e7a donne :<\/p>\n<blockquote><p>\/*<br>\nCA VA ETRE TOUT NOIR<br>\n*\/<\/p>\n<p>\/\/ Import the discord.js module<br>\nconst Discord = require(\u00ab\u00a0discord.js\u00a0\u00bb);<\/p>\n<p>\/\/ Import the config (for bot token btw)<br>\nconst config = require(\u00ab\u00a0.\/config.json\u00a0\u00bb);<\/p>\n<p>\/\/ Create an instance of a Discord client<br>\nconst client = new Discord.Client();<\/p>\n<p>\/\/ Check if the bot is Ready and send the message in the log<br>\nclient.on(&lsquo;ready&rsquo;, () =&gt; {<br>\nconsole.log(&lsquo;I am ready!&rsquo;);<br>\nsendMessage();<br>\n});<\/p>\n<p>\/\/ Sending the message and destroy<br>\nfunction sendMessage(){<br>\nchannel = client.channels.cache.get(&lsquo;<span style=\"color: #ffcc00;\">CHANNELID<\/span>&lsquo;);<br>\nchannel.send(&lsquo;@everyone CA VA ETRE TOUT NOIR ! #couvrefeu&rsquo;).then(() =&gt; {<br>\nclient.destroy();<br>\n})<br>\n}<\/p>\n<p>\/\/ Log our bot in<br>\nclient.login(config.BOT_TOKEN);<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p><strong>Attention, il faut remplacer CHANNELID par l&rsquo;identifiant du channel dans lequel vous souhaitez que votre bot poste le message.<\/strong><\/p>\n<h3>L&rsquo;identifiant du channel<\/h3>\n<p>Comment fait on pour r\u00e9cup\u00e9rer cet identifiant ? Et bien il faut d&rsquo;abord activer les options d\u00e9veloppeur dans discord. Pour cela il faut se rendre dans les param\u00e9tres (icone <strong>Engrenage<\/strong>) ; puis dans <strong>Apparence ; <\/strong>et enfin activer le mode d\u00e9veloppeur.<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db3-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2143 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db3-1.png\" alt=\"\" width=\"622\" height=\"146\"><\/a><\/p>\n<p>Une fois que ce mode est activ\u00e9, vous pouvez faire un clic droit sur n&rsquo;importe quel channel et r\u00e9cup\u00e9rer l&rsquo;identifiant unique \u00e0 ce channel.<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db4-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2145 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db4-1.png\" alt=\"\" width=\"301\" height=\"447\"><\/a><\/p>\n<h3>On essaye ?<\/h3>\n<p>Il ne reste plus qu&rsquo;a lancer le terminal et une nouvelle fois taper <code>node index.js<\/code> si tout est bien param\u00e9tr\u00e9 correctement, vous verrez un message dans votre terminal \u00ab\u00a0I&rsquo;m ready\u00a0\u00bb , votre bot se connecter, envoyer le message, et de d\u00e9connecter aussit\u00f4t ! Si ca ne marche pas, vous devriez voir l&rsquo;erreur dans votre terminal. V\u00e9rifiez que vous avez bien mis le CHANNEL ID entre les apostrophe &lsquo; &lsquo; .<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db5-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2147 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db5-1.png\" alt=\"\" width=\"651\" height=\"349\"><\/a><\/p>\n<h3>Ca marche !<\/h3>\n<p>Bon maintenant, il faut trouver une solution pour que la commande <code>node index.js<\/code> s&rsquo;envoie toute seule tous les jours \u00e0 21h00&#8230; C&rsquo;est l\u00e0 qu&rsquo;intervient Cron !<\/p>\n<p>&nbsp;<\/p>\n<h2>Automatiser la chose : pr\u00e9parer le terrain<\/h2>\n<p>Je ne vais \u00e9videmment pas rester devant mon \u00e9cran et lancer le bot d\u00e9s que 21h00 sonne. Non. Je vais h\u00e9berger mon bot sur mon petit serveur \u00e0 la maison : un Olimex Lime2. <a href=\"https:\/\/blog.nanuq.me\/2020\/05\/09\/comme-sur-un-petit-nuage\/\">On en avait d\u00e9ja parl\u00e9 ici.<\/a> C&rsquo;est un tout petit ordinateur qui consomme 5 Watts environ (donc tr\u00e9s peu, ca doit repr\u00e9senter environ 5\u20ac \/ an d&rsquo;\u00e9lectricit\u00e9 (c&rsquo;est un calcul r\u00e9alis\u00e9 \u00e0 la louche mouill\u00e9e)) . Il reste allum\u00e9 en permanence et ca sera donc parfait pour envoyer le message \u00e0 intervalle r\u00e9gulier.<\/p>\n<p>On en avait d\u00e9ja parl\u00e9 tout \u00e0 l&rsquo;heure, vu que cette petite machine n&rsquo;a pas une puissance extraordinaire, c&rsquo;est int\u00e9ressant de ne pas utiliser une fonction comme SetInterval qui obligerait \u00e0 maintenir le bot allum\u00e9 tout le temps. (Si vous voulez faire \u00e7a, tournez vous vers <a href=\"https:\/\/en.wikipedia.org\/wiki\/PM2_(software)\">PM2<\/a> par exemple)<\/p>\n<p>Bon alors, je me connecte via SSH \u00e0 mon petit olimex lime2 et je vais devoir r\u00e9installer node.js et npm. Mais cette fois en ligne de commande.<\/p>\n<p>Je me suis inspir\u00e9 de <a href=\"https:\/\/tecadmin.net\/install-latest-nodejs-npm-on-linux-mint\/\">\u00e7a<\/a> pour taper :<br>\n<code> curl -sL https:\/\/deb.nodesource.com\/setup_12.x | sudo bash -<\/code><\/p>\n<p>Puis :<br>\n<code>sudo apt-get install nodejs<\/code><\/p>\n<p>Et enfin je me suis <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-build-a-discord-bot-with-node-js-fr#%C3%A9tape-2-%E2%80%94-cr%C3%A9ation-de-votre-projet\">inspir\u00e9 de \u00e7a<\/a> (le m\u00eame tuto qu&rsquo;au d\u00e9but de cet article) pour cr\u00e9er mon r\u00e9pertoire, et remettre en place les diff\u00e9rents fichiers n\u00e9cessaires.<\/p>\n<p>Enfin, j&rsquo;ai cr\u00e9er le fichier <strong>index.js<\/strong> ; mais cette fois ci j&rsquo;ai tout simplement copier\/coller ce qu&rsquo;on avait d\u00e9ja fait sur notre machine de d\u00e9veloppement. (On aurait pu aussi transf\u00e9rer les fichiers avec SCP par exemple.)<\/p>\n<p>Maintenant, si dans notre terminal connect\u00e9 via SSH \u00e0 notre serveur on tape <code>node index.js<\/code> ca devrait march\u00e9.<\/p>\n<p>N\u00e9anmoins, la commande ne se lancera pas toute seule tous les jours \u00e0 21h00<\/p>\n<p>&nbsp;<\/p>\n<h2>Automatiser la chose : Crontab<\/h2>\n<p>Bon alors, apr\u00e9s diverses recherche sur Crontab, j&rsquo;ai compris comment \u00e7a marche. C&rsquo;est pas tr\u00e9s difficile. Il faut bien comprendre la syntaxe suivante :<\/p>\n<p><code># Exemple :<br>\n# .---------------- minutes (0 - 59)<br>\n# |\u00a0\u00a0.------------- heures(0 - 23)<br>\n# |\u00a0\u00a0|\u00a0\u00a0.---------- jour du mois (1 - 31)<br>\n# |\u00a0\u00a0|\u00a0\u00a0|\u00a0\u00a0.------- mois (1 - 12) OR jan,feb,mar,apr ...<br>\n# |\u00a0\u00a0|\u00a0\u00a0|\u00a0\u00a0|\u00a0\u00a0.---- jour de la semaine (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat<br>\n#\u00a0|\u00a0\u00a0|\u00a0\u00a0|\u00a0\u00a0|\u00a0\u00a0|<br>\n# *\u00a0\u00a0*\u00a0\u00a0*\u00a0\u00a0*\u00a0\u00a0*\u00a0 commande \u00e0 ex\u00e9cuter<\/code><\/p>\n<p>Ou autrement :<\/p>\n<p><code> mm hh jj MMM JJJ [user] t\u00e2che &gt; log<br>\n<\/code><\/p>\n<p><a href=\"https:\/\/www.techno-science.net\/definition\/644.html\">Plus d&rsquo;information ici.<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Bon alors, nous on veut envoyer tous les jours \u00e0 21h00 :<\/p>\n<ul>\n<li>La premi\u00e9re \u00e9toile, celle des minutes, sera donc \u00e0 00<\/li>\n<li>La seconde \u00e9toile, celle des heures, sera \u00e0 21<\/li>\n<li>Le reste , on laisse les \u00e9toiles pour que cela s&rsquo;execute \u00e0 chaque jour de chaque mois, quelque soit le jour de la semaine (oui on peut faire des trucs tordu genre le premier mardi de chaque mois si on le souhaite)<\/li>\n<\/ul>\n<p>Si vous avez un peu de mal \u00e0 imaginer ce que \u00e7a donnerait, <a href=\"https:\/\/crontab.guru\">vous pouvez utiliser ce site.<\/a> Ici, on voit bien que si je met <code>00 21 * * *<\/code> , ca correspond bien \u00e0 ce que je veux faire.<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db6-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2157 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db6-1.png\" alt=\"\" width=\"943\" height=\"386\"><\/a><\/p>\n<h2>Editons le fichier Crontab<\/h2>\n<p>Il suffit de taper <code>crontab -e<\/code> et de rajouter tout \u00e0 la fin de ce fichier notre nouvelle ligne :<\/p>\n<p><code>00 21 * * * bash discordbot\/launchbot.sh &gt; discordbot\/botlog.log<\/code><\/p>\n<p>Au d\u00e9but, vous remarquez la r\u00e9gle c&rsquo;est \u00e0 dire \u00ab\u00a0tous les jours \u00e0 21h00\u00a0\u00bb . Ensuite le chemin vers le script qui lancera notre bot, puis le chemin vers les log. Bien sur, c&rsquo;est \u00e0 ajuster selon votre configuration !<\/p>\n<p>Avec \u00e7a, tous les jours \u00e0 21h00, crontab va lancer le script <em><strong>\u00ab\u00a0launchbot.sh\u00a0\u00bb<\/strong><\/em>. Il ne nous reste plus qu&rsquo;a \u00e9crire ce dernier !<\/p>\n<p>&nbsp;<\/p>\n<h2>Cr\u00e9ons le script !<\/h2>\n<p>Apr\u00e9s quelques recherches sur internet, j&rsquo;ai vu que c&rsquo;\u00e9tait enfantin. Pas grand chose \u00e0 dire, voil\u00e0 \u00e0 quoi il ressemble :<\/p>\n<blockquote><p>#!usr\/bin\/env sh<\/p>\n<p>node ~\/discordbot\/index.js<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<h2>CA VA ETRE TOUT NOIR !<\/h2>\n<p>Voil\u00e0, normalement tout est bon. Il ne reste plus qu&rsquo;a patienter tranquillement et&#8230;<\/p>\n<p><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db7-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2161 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2020\/10\/db7-1.png\" alt=\"\" width=\"532\" height=\"128\"><\/a><\/p>\n<p>Evidemment, faut penser \u00e0 un d\u00e9tail : v\u00e9rifier bien que votre serveur est sur le bon fuseau horaire (et donc \u00e0 la bonne heure). Pour v\u00e9rifier \u00e7a, vous pouvez taper <code>date<\/code>. (Voil\u00e0 pourquoi mon message a \u00e9t\u00e9 envoy\u00e9 \u00e0 23h00 et non \u00e0 21h00 &#8230; Ne faites pas la meme erreur que moi !)<\/p>\n<p>&nbsp;<\/p>\n<h1>Conclusion<\/h1>\n<p>Voil\u00e0, c&rsquo;est tout pour moi. J&rsquo;espere que cet article (bien que brouillon) vous a apport\u00e9 deux ou trois trucs. A bientot pour de nouvelles aventures !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\uddd3\ufe0f Note : Cet article est une archive import\u00e9e de mon ancien blog. Certaines informations peuvent ne plus \u00eatre \u00e0 jour. TA GUEULE ! Quand&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2163,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,4],"tags":[19,26,44,95],"_links":{"self":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/2121"}],"collection":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2121"}],"version-history":[{"count":0,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/2121\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}