Cog-Creators / Red-DiscordBot

A multi-function Discord bot
https://docs.discord.red
GNU General Public License v3.0
4.72k stars 2.3k forks source link

Fix TypeError from parse_timedelta and parse_relativedelta when months or years is allowed. #6302

Closed NoobInDaHause closed 6 months ago

NoobInDaHause commented 6 months ago

Description of the changes

This PR fixes the TypeError from timedelta when you allow months or years. When a user tries to input months and/or years the timedelta throws a TypeError saying that months or years is an invalid keyword argument. I have made it so the months or years is converted to days.

Have the changes in this PR been tested?

Yes

Flame442 commented 6 months ago

parse_timedelta is already documented as only supporting weeks, days, hours, minutes, seconds due to the fact that it returns a timedelta which only accepts those units. parse_relativedelta is documented as accepting months and years as the relativedelta object it returns is able to parse those natively, so there is no need for preprocessing of the data.

I'm not quite sure what this PR looks to address, besides possibly adding support for months and years in parse_timedelta. I don't think that is a good idea however, since the length of a month or year depends on the starting point from the delta (some months are 31 days, others are 30 days, leap years are 366 days, etc). relativedelta is designed to handle these edge cases, and this PR prevents it from knowing when specifically months or years are requested, instead forcing a hardcoded number of days. timedelta is not designed to handle months or years, and currently is documented as such.

NoobInDaHause commented 6 months ago

I see, I am not a professional programmer but I just thought of doing this since you can allow "years" and "months" from allowed_units and I forgot about the part where months and years have different days. Anyway guess we'll be sticking to it for now thank you for your time flame.