[Mailman-Developers] Approach for Auto moderation system

Stephen J. Turnbull stephen at xemacs.org
Sun Mar 8 21:56:26 CET 2015


Aanand Shekhar Roy writes:

 > Hi, Does the following approach for auto moderation sound fine or
 > am I on the wrong path ?

I wouldn't call it "automoderation", I would prefer "post throttling".

This is more suggestive of what is actually happening (moderation
usually involves filtering on content).

 > 
 > I think we neet to make changes in handler to_outgoing.py in method process.
 > 1) We need to make two databases :
 > Table1 Schema->  [ user_id | Thread name | list_id | count |
 > last_msg_posted_at ]
 > user_id, list_id, Thread name together act as primary key.
 > It stores the count of number of posts of a user on a particular thread
 > and the time corresponding to the last post.

I think you should provide an option to just throttle the user on a
given list, too.  Possibly with different default throttling
parameters.

 > Table2 Schema->

I don't see why you would have a separate table for messages.  Just
add the post_after_time attribute to the message's metadata.

 > [message_id | user_id |Thread name| list_id |don't_post_before_time] here,
 > don't_post_before_time=(last_msg_posted_at)+(count/10)*d

I think you probably want count//10 here IIUC.  I'm guessing you want
the delay to be zero until the poster hits 10, right?  In Python 2,
5/10 == 0, but in Python 3 it's 0.5.  5//10 == 0.

 > where, "d" will be delay set by list-admin, eg 3 hrs.
 > 
 > 2) The count variable is accessed from Table1.
 > 
 > 3) When process is called and a new message entry comes:
 >    a) case 1: It is the first post by user on that thread then we create a
 > new entry in Table1 with count 1 and last_msg_posted_at_time = posting
 > time of that message. Then the corresponding entry is made in Table2
 > with new count and calculated don't_post_before _time.
 >       case 2: It is not the first post implies there is already an entry
 > in Table1 then we increase its count by 1 and we calculate
 > don't_post_before_time using count and last_msg_posted_at_time.
 > After making the corresponding entry in Table2 using values just
 > calculated we update last_msg_posted_at_time in Table1 with the value of
 > don't_post_before_time of this entry

 > b)Now we iterate over all entries in Table2 and whoever has
 > don't_post_before_time < current_time we remove the corresponding entry
 > form Table2 and enqueue it in outgoing queue else it stays in the
 > database.

In my proposal to put it in metadata, you would just enqueue the
message in outgoing and have OutgoingRunner check for post_after_time.
If not present or present and expired, post the message, otherwise
leave it in queue.  If you do it your way, you need to have a separate
queue (storage) for messages waiting for their post_after_times.




More information about the Mailman-Developers mailing list