Este é o meu primeiro script Ruby personalizado.
Em quase 50 anos de codificação com mais de 20 linguagens e dialetos, nunca precisei (ou quis
) escrever em Ruby, mas tudo bem, você me pegou… por favor, seja gentil. ![]()
Meu objetivo é identificar contas de usuários que não foram autenticadas por links de e-mail e suspender as contas para que eu possa verificá-las antes de excluí-las. Durante a configuração inicial, tive configurações em vários estágios de desenvolvimento. Os e-mails de 2FA não foram enviados para alguns registros, e houve muitos registros falsos que agora gostaria de filtrar.
Versão 0.0.1
rails c
# Primeiro, garanta que os TLs de usuário estejam em conformidade com as definições mais recentes
User.all.find_each do |user|
Promotion.recalculate(user)
end
Group.ensure_consistency!
# Preparar para o loop
logger = StaffActionLogger.new(User.where("id = 'admin'"))
# data temporária, os usuários serão removidos antes desta data
suspend_till = DateTime.new(2028, 12, 31)
suspend_at = DateTime.now
reason = 'Inativo'
# Identificar contas potencialmente mortas
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])
# salvar o usuário, registrar a ação e... fazer o que for feito para este gatilho
user.save!
logger.log_user_suspend(user, reason)
DiscourseEvent.trigger(:user_suspended, user: user)
# evitar abusar do servidor de e-mail
sleep(10)
end
Ao acionar o evento, gostaria que e-mails fossem enviados aos usuários - haverá muitos bounces e talvez algumas pessoas voltem para autenticar. Após uma semana, selecionarei todas as contas que ainda estão suspensas e as excluirei.
Perguntas:
- Em geral, isso fará o que se destina?
- Existe uma abordagem melhor?
- O registro é redundante com o gatilho do evento?
- Podemos fazer isso com JavaScript?
- Devo postar isso em outra categoria?
- Alguma outra palavra de conselho?
Obrigado!!