'Given a list of event ids, check if we have already processed them.
Returns:
dict: Has an entry for each event id we already have seen. Maps to
the rejected reason string if we rejected the event, else maps to
None.'

def have_events(self, event_ids):

    if (not event_ids):
        return defer.succeed({})
    def f(txn):
        sql = 'SELECT    e.event_id,    reason    FROM    events    as    e    LEFT    JOIN    rejections    as    r    ON    e.event_id    =    r.event_id    WHERE    e.event_id    =    ?'
        res = {}
        for event_id in event_ids:
            txn.execute(sql, (event_id,))
            row = txn.fetchone()
            if row:
                (_, rejected) = row
                res[event_id] = rejected
        return res
    return self.runInteraction('have_events', f)
