C’est mon premier script Ruby personnalisé.
En près de 50 ans de codage dans plus de 20 langages et dialectes, je n’ai jamais eu besoin (ou voulu
) écrire en Ruby, mais bon, vous m’avez eu… soyez gentil, s’il vous plaît. ![]()
Mon objectif est d’identifier les comptes utilisateurs qui n’ont pas été authentifiés par des liens par e-mail, et de suspendre les comptes afin que je puisse les vérifier avant de les supprimer. Lors de la configuration initiale, j’avais des paramètres à divers stades de développement. Les e-mails 2FA ne sont pas partis pour certains enregistrements, et il y a eu beaucoup d’enregistrements bidons que je voudrais maintenant filtrer.
Version 0.0.1
rails c
# Assurez-vous d'abord que les TL des utilisateurs sont conformes aux dernières définitions
User.all.find_each do |user|
Promotion.recalculate(user)
end
Group.ensure_consistency!
# Préparation pour la boucle
logger = StaffActionLogger.new(User.where("id = 'admin'"))
# date temporaire, les utilisateurs seront supprimés avant cette date
suspend_till = DateTime.new(2028, 12, 31)
suspend_at = DateTime.now
reason = 'Inactive'
# Identifier les comptes potentiellement morts
User.where("views = 0 OR approved = FALSE OR last_seen_at IS NULL")
.where("id > 0")
.find_each do |user|
user.suspended_till = suspend_till
user.suspended_at = suspend_at
user.change_trust_level!(TrustLevel[0])
# sauvegarder l'utilisateur, enregistrer l'action, et... faire ce qui est fait pour ce déclencheur
user.save!
logger.log_user_suspend(user, reason)
DiscourseEvent.trigger(:user_suspended, user: user)
# éviter d'abuser du serveur de messagerie
sleep(10)
end
En déclenchant l’événement, j’aimerais que des e-mails soient envoyés aux utilisateurs - il y aura un tas de rebonds, et peut-être quelques personnes qui reviendront pour s’authentifier. Après une semaine, je sélectionnerai tous les comptes qui sont toujours suspendus et je les supprimerai.
Questions :
- En général, cela fera-t-il ce qui est prévu ?
- Existe-t-il une meilleure approche ?
- L’enregistrement est-il redondant avec le déclenchement de l’événement ?
- Peut-on faire cela avec JavaScript ?
- Dois-je poster ceci dans une autre catégorie ?
- D’autres conseils ?
Merci !!