To solve this problem, we can iterate over the timeSeries and calculate the difference between the current and previous attack times. If the difference is less than the duration, the poison effect will last for the difference time. If the difference is greater than or equal to the duration, the poison effect will last for the duration time. We can then add up all the poison effect durations to get the total number of seconds Ashe is poisoned. Here's the code:

```
def findPoisonedDuration(timeSeries, duration):
    total_duration = 0
    for i in range(len(timeSeries)):
        if i == 0:
            total_duration += duration
        else:
            diff = timeSeries[i] - timeSeries[i-1]
            total_duration += min(diff, duration)
    return total_duration
```

Example usage:

```
timeSeries = [1,4,7,10]
duration = 3
print(findPoisonedDuration(timeSeries, duration))  # Output: 9
```

In this example, Teemo attacks Ashe at seconds 1, 4, 7, and 10. The poison effect lasts for 3 seconds each time. At second 1, the poison effect lasts for the full duration of 3 seconds. At second 4, the poison effect lasts for 3 seconds (until second 6). At second 7, the poison effect lasts for 3 seconds (until second 9). At second 10, the poison effect lasts for the full duration of 3 seconds. So the total duration of the poison effect is 9 seconds.
Our hero Teemo is attacking an enemy Ashe with poison attacks! When Teemo attacks Ashe, Ashe gets poisoned for a exactly duration seconds. More formally, an attack at second t will mean Ashe is poisoned during the inclusive time interval [t, t + duration - 1]. If Teemo attacks again before the poison effect ends, the timer for it is reset, and the poison effect will end duration seconds after the new attack.

You are given a non-decreasing integer array timeSeries, where timeSeries[i] denotes that Teemo attacks Ashe at second timeSeries[i], and an integer duration.

Return the total number of seconds that Ashe is poisoned.

