Questa è una domanda su quanto sia possibile personalizzare le funzionalità di Discourse e su quanto possa essere impegnativo il lavoro.
Faccio parte del team tecnico di un’organizzazione di scrittori professionisti di fantascienza, basata principalmente su un software per forum sviluppato da un fondatore che ora non fa più parte dell’organizzazione. Il sistema attuale gira su una vecchia infrastruttura ASP.NET Core, an open-source web development framework | .NET Server e siamo molto interessati a migrare verso una piattaforma diversa.
Una delle funzionalità più apprezzate del software è quella dedicata alla critica delle storie. Gli utenti possono caricare un documento, con titolo e conteggio delle parole. Esiste una pagina specifica che mostra tutte le storie attualmente in cerca di feedback. Il software include alcune piccole funzionalità di gamification: caricare una storia avvia automaticamente un thread di discussione, e chiunque pubblichi una risposta superiore a 750 caratteri riceve punti. Quando un utente ha ricevuto un numero sufficiente di risposte, può impedire ad altri di scaricare il file.
Nella pagina di download delle storie, accanto al nome di ogni utente, è visibile il numero di punti per le critiche che ha guadagnato e il numero di punti ricevuti dalle sue storie. Dovrebbero essere mantenuti approssimativamente in equilibrio, ma tutto si basa sull’onore; per quanto ne so, nessuno è mai stato avvisato per aver ricevuto critiche senza averne date. Il sistema funziona molto bene (tranne per l’infrastruttura tecnologica obsoleta e instabile, come accennato sopra).
Gli utenti di lunga data hanno talvolta accumulato un impressionante numero di crediti, e siamo molto interessati a migrare questi dati sulla nuova piattaforma piuttosto che cancellare i punteggi di tutti.
La mia domanda è: quanto sarà semplice integrare funzionalità di questo tipo in un forum Discourse? È probabile che rientri nell’ambito di un plugin personalizzato, o avremmo bisogno di un’app separata che interagisca con Discourse tramite API? Apprezzerei qualsiasi consiglio possiate fornire.
Questo dovrebbe essere fattibile con un plugin. I punti potrebbero essere conservati come campo personalizzato associato ai topic, ai post e/o agli utenti.
Alcune domande per chiarire la funzionalità:
Questi punti sono basati esclusivamente sulla lunghezza della risposta?
Come viene determinato il numero “abbastanza”?
Presumo che “il file” sia la storia? Devono compiere un’azione esplicita? Cioè, esiste un pulsante “impedisci ad altri di scaricare il file” che viene sbloccato dal raggiungimento di “abbastanza risposte”?
Come viene determinato il numero (di punti?) che una storia riceve?
Qualsiasi risposta superiore a 750 caratteri riceve punti (è possibile pubblicare un post non di critica in un thread di critica includendo le parole “Questo non è un post di critica”, ma non credo di aver mai visto questa opzione utilizzata). Se un autore pubblica un post di oltre 750 caratteri nel proprio thread di critica, questo non dovrebbe generare punti.
Dall’autore della storia. Può decidere quando ha ricevuto abbastanza feedback sulla propria storia.
Sì, il file è la storia (un documento Word, un file RTF o un altro formato). C’è un pulsante che l’autore può premere in qualsiasi momento per disabilitare ulteriori download. Può premere anche prima che qualcuno abbia scaricato il file, se cambia idea sulla condivisione.
Invece di cercare di riassumerlo, ecco l’istruzione SQL:
CASE WHEN WordCount < 1001 THEN 0.5
WHEN WordCount BETWEEN 5000 AND 9999 THEN 1.5
ELSE Round([WordCount] / 10000, 0) + 1 END
In pratica, le persone raramente caricano una storia superiore a 10.000 parole.
Come ha detto Richard, con un plugin è possibile tutto. Quello che proponi richiederà probabilmente poche ore di lavoro. Potrebbero esserci delle scorciatoie per adattarsi al tuo budget. Anche i badge personalizzati potrebbero aiutare. Potresti sicuramente far sviluppare il nuovo plugin e poi importare i dati durante la migrazione.
Non confondere la duplicazione del vecchio sistema con la creazione del migliore.
Potresti utilizzare il plugin risolto o i tag per disattivare il tempo di revisione.
Se l’intero sistema è su misura, un importatore personalizzato costa tipicamente intorno ai 1500 dollari, e probabilmente ti servirà quasi la stessa cifra in più per il plugin necessario.
Potresti anche smettere di distinguere tra i crediti per la storia e quelli per la critica, e semplicemente riutilizzare la funzione ‘Mi piace’ di Discourse (condivisione dei cuori) come condivisione dei crediti. Renderebbe la migrazione e l’implementazione piuttosto semplici. Ma potrei perdere il vantaggio di separare i crediti?
L’idea è che tu stia restituendo qualcosa alla comunità. Se altri leggono il tuo lavoro e ti forniscono feedback su come migliorarlo, dovresti anche leggere il lavoro degli altri e dare loro feedback. Sarebbe fantastico se questo potesse essere monitorato tramite una funzione integrata di Discourse, ma non vedo come sia possibile.
Puoi eseguire query più dettagliate sui like che gli utenti ricevono. Ad esempio, puoi distinguere tra i like ricevuti per aver pubblicato storie e quelli ricevuti per aver condiviso feedback, interrogando i like sui post iniziali e sui post successivi in una categoria di storie.
Potresti quindi progettare badge (insieme a titoli utente e flari) da assegnare al raggiungimento di determinati numeri.
Il problema è, per quanto ne capisco, che i like sono un modo per dimostrare la popolarità di un post, ma il sistema che sto cercando di migrare serve a monitorare se gli utenti hanno raggiunto un livello minimo di impegno. Quindi, se fosse possibile che ogni post in un thread di una storia, contenente più di un certo numero di caratteri e non scritto dall’autore della storia, venisse automaticamente messo in like una sola volta, questo funzionerebbe per il nostro sistema. Ma non sembra essere una soluzione adatta al modo in cui funzionano i like.