25

Alertes de nouveaux messages avec bla

Je parlais il y a quelques temps du moteur de commentaires que j'utilise pour ce blog : bla. Il est écrit en C et ma foi, semble bien fonctionner.

Il ne permettait pas aux commentateurs de recevoir une alerte lorsqu'un nouveau commentaire est publié après le leur. C'est désormais possible pour ceux qui le souhaitent.

Pour cela, j'ai ajouté un nouveau champ "email" dans le formulaire. De son côté, bla enregistre cette adresse email à côté du pseudo dans le fichier de commentaire. Toutefois, cela suppose que l'adresse email est disponible pour tous. À vrai dire, je pense que c'est une bonne chose : si on commente, ce n'est pas pour se cacher et chaque propos doit être assumé.

Par conséquent, j'ai choisi de proposer un lien "mailto" pour "afficher" l'adresse mail :

efprintf(fp, "<a href=\"mailto:%s\" title=\"%s\">%s</a> (%s)\n%s\n", \
	email, email, name, date, comm);

Le plus dur restait à faire : notifier les autres commentateurs. Pour ça, j'ai modifié le script validate_comments pour qu'il envoie un message à chacune des adresses mails trouvées dans les articles précédents :

artid=$(echo "$dn" | grep -Eo [0-9]+)
find "$dn" -type f ! -name "$pattern" -a -name "$validpattern" | while read -r f
do
	email="$(sed -n 1p "$f" | \
		grep -Eo "[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+" |\
		head -n1)"
	if [ -n "$email" ]; then
		echo "${msg}/${artid}.html" | mail -s "${subject}" -r "${fromaddr}" "${email}"
	fi
done

Il a fallu ajouter quelques options à celles déjà existantes :

validpattern="*.txt"
url="https://prx.ybad.name"
subject="Nouveau commentaire sur $url"
fromaddr="noreply@ybad.name"
msg="Un nouveau commentaire a été publié sur $url"

La ligne suivante permet de retrouver le numéro de la page où le commentaire a été posté. C'est très spécifique au fonctionnement de prose qui utilise des nombres pour ça.

artid=$(echo "$dn" | grep -Eo [0-9]+)

Ensuite, on récupère une éventuelle adresse mail dans le commentaire précédent :

Enfin, on envoie le message avec la commande mail en précisant une adresse mail pour le champ "from" de type "noreply@".

Je vais lasser ça tourner quelques temps, on verra bien si ça fonctionne comme prévu.

01/10/2020 10:15


Commentaires