async def _move_to_location(
        self,
        location: Location,
    ) -> None:
        """Move the agents, send event to Events table"""
        old_location = self.location

        self._log(
            "Moved Location",
            f"{self.location.name} -> {location.name} @ {datetime.now(pytz.utc).strftime('%H:%M:%S')}",
        )

        departure_event = Event(
            type=EventType.NON_MESSAGE,
            description=f"{self.full_name} left the {old_location.name}",
            location_id=old_location.id,
            agent_id=self.id,
            timestamp=datetime.now(pytz.utc),
        )

        arrival_event = Event(
            type=EventType.NON_MESSAGE,
            description=f"{self.full_name} arrived at the {location.name}",
            location_id=location.id,
            agent_id=self.id,
            timestamp=datetime.now(pytz.utc),
        )

        # Update the local agent, do we need both of these lines?
        self.location = location
        self.context.update_agent(self._db_dict())

        # update agent in db
        await self._update_agent_row(),

        if DISCORD_ENABLED:
            await announce_bot_move(
                self.full_name, old_location.channel_id, location.channel_id
            )

        # Add events to the events manager, which handles the DB updates
        await self.context.add_event(departure_event)
        await self.context.add_event(arrival_event)
Move the agents, send event to Events table
src/agent/base.py