77	"time" 
88
99	"github.com/rs/zerolog" 
10+ 	"go.mau.fi/util/exsync" 
1011	"maunium.net/go/mautrix/event" 
1112	"maunium.net/go/mautrix/federation" 
1213	"maunium.net/go/mautrix/id" 
@@ -22,10 +23,11 @@ type psCacheEntry struct {
2223}
2324
2425type  PolicyServer  struct  {
25- 	Federation  * federation.Client 
26- 	ServerAuth  * federation.ServerAuth 
27- 	eventCache  map [id.EventID ]* psCacheEntry 
28- 	cacheLock   sync.Mutex 
26+ 	Federation      * federation.Client 
27+ 	ServerAuth      * federation.ServerAuth 
28+ 	eventCache      map [id.EventID ]* psCacheEntry 
29+ 	redactionCache  * exsync.Set [id.EventID ]
30+ 	cacheLock       sync.Mutex 
2931
3032	CacheMaxSize    int 
3133	CacheMaxAge     time.Duration 
@@ -36,8 +38,9 @@ func NewPolicyServer(serverName string) *PolicyServer {
3638	inMemCache  :=  federation .NewInMemoryCache ()
3739	fed  :=  federation .NewClient (serverName , nil , inMemCache )
3840	return  & PolicyServer {
39- 		eventCache : make (map [id.EventID ]* psCacheEntry ),
40- 		Federation : fed ,
41+ 		eventCache :     make (map [id.EventID ]* psCacheEntry ),
42+ 		redactionCache : exsync .NewSet [id.EventID ](),
43+ 		Federation :     fed ,
4144		ServerAuth : federation .NewServerAuth (fed , inMemCache , func (auth  federation.XMatrixAuth ) string  {
4245			return  auth .Destination 
4346		}),
@@ -144,7 +147,8 @@ func (ps *PolicyServer) HandleCheck(
144147	r .Lock .Lock ()
145148	defer  func () {
146149		r .Lock .Unlock ()
147- 		if  caller  !=  pdu .Sender .Homeserver () &&  finalRec  ==  PSRecommendationSpam  &&  redact  {
150+ 		// TODO if event is older than when the process was started, check if it was already redacted on the server 
151+ 		if  caller  !=  pdu .Sender .Homeserver () &&  finalRec  ==  PSRecommendationSpam  &&  redact  &&  ps .redactionCache .Add (pdu .ID ) {
148152			go  func () {
149153				if  _ , err  =  evaluator .Bot .RedactEvent (context .WithoutCancel (ctx ), pdu .RoomID , evtID ); err  !=  nil  {
150154					log .Error ().Err (err ).Msg ("Failed to redact event" )
0 commit comments