
Bot discord Python pour le serveur officiel d'e-penser
=
Ce bot est un supplément au [Bot JS](https://github.com/epenserdiscord/epenser-bot)


Installer le bot
-
```BASH
user : git clone https://github.com/epenserdiscord/epenser-bot-py.git
```
Les dépendances seront installées au moment du lancement du bot.
excepté python (faut pas abuser non plus),
puisqu'on utilise la version rewrite de discord.py,
il faut python >= 3.5.3

Lancer le bot
-
```BASH
user : export DISCORD_TOKEN=token Remplacez par le token de votre bot.
user : cd path/to/epenser-bot-py/
user : while true ; do git fetch --all; git reset --hard origin/master; make; done
```
On peut aussi lancer le bot sans la boucle :
```BASH
user : export DISCORD_TOKEN=token Remplacez par le token de votre bot.
user : cd path/to/epenser-bot-py/
user : make
```
Daemoniser le bot
-
Le bot est actuellement organisé de manière à ce que la commande `/restart` quitte le programme et ce qu'un script à part vienne le relancer après avoir, par exemple, mis à jour les sources. Par conséquent, nous avons besoin d'un tel script. Celui qui est utilisé actuellement est séparé en plusieurs parties pour gérer les deux sections (JS et Python) avec :

`/home/epenser/run` (marqué en executable) 
```BASH
#!/bin/bash
export DISCORD_TOKEN=token
export GITHUB_TOKEN=token
sleep 20  #C'est pour le réseau :3
bash /home/epenser/pybot.sh &
bash /home/epenser/jsbot.sh
```
On ne s'intéresse ici pas au `jsbot.sh` mais uniquement `pybot.sh` :

`/home/epenser/pybot.sh`
```BASH
#!/bin/bash
set -o pipefail
cd /home/epenser/epenser-bot/epenser-bot-py/
while [ true ] ;do
date >> log
echo "---- git pull ----" >> log
echo >> log
git fetch --all 2>&1 | tee -a log
git reset --hard origin/master 2>&1 | tee -a log
echo >> log
./main.py 2>&1 | tee -a log
done
```
Le serveur utilisé pour hoster le bot est un raspberry sous raspbian. Il est donc sous systemd. Je ne me suis pas intéressé à Open-RC même si j'aurais pu.

`/etc/init.d/epenser`
```BASH
#!/bin/sh -e
### BEGIN INIT INFO
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
DAEMON="/home/epenser/run"
daemon_OPT=""
DAEMONUSER="epenser"
daemon_NAME="run"

PATH="/sbin:/bin:/usr/sbin:/usr/bin"

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

d_start () {
log_daemon_msg "Starting system $daemon_NAME Daemon"
start-stop-daemon --background --name $daemon_NAME --start --quiet --chuid $DAEMONUSER --exec $DAEMON -- $daemon_OPT
log_end_msg $?
}

d_stop () {
log_daemon_msg "Stopping system $daemon_NAME Daemon"
start-stop-daemon --name $daemon_NAME --stop --retry 5 --quiet --name $daemon_NAME
log_end_msg $?
}

case "$1" in

start|stop)
d_${1}
;;

restart|reload|force-reload)
d_stop
d_start
;;

force-stop)
d_stop
killall -q $daemon_NAME || true
sleep 2
killall -q -9 $daemon_NAME || true
;;

status)
status_of_proc "$daemon_NAME" "$DAEMON" "system-wide $daemon_NAME" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$daemon_NAME {start|stop|force-stop|restart|reload|force-reload|status}"
exit 1
;;
esac
exit 0
```
Pensez à remplacer les parties spécifiques.

(Il y a probablement des erreurs dans cette partie, j'ai jamais rien compris à systemD :( )

```BASH
root : systemctl daemon-reload
root : systemctl enable epenser.service
root : systemctl add-wants $(systemctl get-default) epenser.service
```
En théorie, à partir de là, le service est installé. Si on redémarre le système, le service se lancera au démarrage.
Seul problème : Impossible de l'arrêter.
TODO : Modifier le script pour qu'on puisse l'arrêter.
