Questo è il mio primo script Ruby personalizzato in assoluto.
In quasi 50 anni di programmazione con oltre 20 linguaggi e dialetti, non ho mai avuto bisogno (o voluto
) scrivere in Ruby, ma OK, mi hai convinto… per favore, sii gentile. ![]()
Il mio obiettivo è identificare gli account utente che non sono stati autenticati tramite link via email e sospendere gli account in modo da poterli controllare prima dell’eliminazione. Durante la configurazione iniziale, ho avuto impostazioni in varie fasi di sviluppo. Le email 2FA non sono state inviate per alcune registrazioni, e ci sono state molte registrazioni fasulle che ora vorrei filtrare.
Versione 0.0.1
rails c
# Prima assicurati che i TL utente siano conformi alle ultime definizioni
User.all.find_each do |user|
Promotion.recalculate(user)
end
Group.ensure_consistency!
# Preparazione per il ciclo
logger = StaffActionLogger.new(User.where("id = 'admin'"))
# data temporanea, gli utenti verranno rimossi prima di questa data
suspend_till = DateTime.new(2028, 12, 31)
suspend_at = DateTime.now
reason = 'Inactive'
# Identifica account potenzialmente inattivi
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])
# salva l'utente, registra l'azione e... fai quello che si fa per questo trigger
user.save!
logger.log_user_suspend(user, reason)
DiscourseEvent.trigger(:user_suspended, user: user)
# evita di abusare del server di posta
sleep(10)
end
Innescando l’evento, vorrei che venissero inviate email agli utenti - ci saranno molti rimbalzi, e potrebbero esserci alcune persone che torneranno per autenticarsi. Dopo una settimana selezionerò tutti gli account ancora sospesi e li eliminerò.
Domande:
- In generale, questo farà ciò che è previsto?
- Esiste un approccio migliore?
- La registrazione è ridondante con l’innesco dell’evento?
- Possiamo farlo con JavaScript?
- Dovrei pubblicare questo in un’altra categoria?
- Qualche altro consiglio?
Grazie!!