Skip to content
This repository has been archived by the owner on Dec 24, 2021. It is now read-only.

Argument type: duration #182

Open
JohnScience opened this issue Aug 10, 2018 · 11 comments
Open

Argument type: duration #182

JohnScience opened this issue Aug 10, 2018 · 11 comments

Comments

@JohnScience
Copy link

JohnScience commented Aug 10, 2018

The most of Discord bots are expected to provide "mute" and "ban" commands. Their implementation involves juggling with parsing strings just to get so-much-desired duration.

Formats:

"3w 1d 11 [many spaces]h \t30m 20s 5ms"

Methods:

  • duration.toWeeks() -> float
  • duration.toDays() -> float
  • duration.toMinutes() -> float
  • duration.toSeconds() -> float
  • duration.toMilliseconds() -> float

And perhaps a few aliases:

  • duration.toW()
  • duration.toD()
  • duration.toM()
  • duration.toMs()

etc

@greavettey
Copy link

This would make my bot so much cleaner haha!

@Gawdl3y Gawdl3y added this to To do in Important stuff Sep 26, 2018
@Gawdl3y Gawdl3y changed the title Add new argument type: duration Argument type: duration Sep 26, 2018
@Gawdl3y Gawdl3y removed this from To do in Important stuff Sep 26, 2018
@Gawdl3y Gawdl3y added this to To do in Polish Sep 26, 2018
@jonahsnider
Copy link
Contributor

Would Commando handle parsing a duration itself or use an external package like moment.js or date-fns to handle it?

@brandonbothell
Copy link
Contributor

brandonbothell commented Dec 11, 2018 via email

@Gawdl3y
Copy link
Member

Gawdl3y commented Dec 11, 2018

I'm not opposed to using moment, since it covers a lot of possible input formats, and handles localisation. The only problem is it doesn't take the "6mo3d4h50m30s" format... which is something that, ideally, would also accept locale-specific suffixes.

@MADLAB96
Copy link

MADLAB96 commented Mar 28, 2019

Hi, I am working on a solution to this but I am having difficulty testing it locally. I'm currently attempting to run the test bot included but receiving this error:

 $ node test/bot.js
/Users/madlab/repos/temp/Commando/src/extensions/message.js:7
module.exports = Structures.extend('Message', Message => {
                            ^

TypeError: Cannot read property 'extend' of undefined
    at Object.<anonymous> (/Users/madlab/repos/temp/Commando/src/extensions/message.js:7:29)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/madlab/repos/temp/Commando/src/registry.js:5:25)
    at Module._compile (module.js:652:30)

This is after a npm install and npm install discord.js. I ran into the same errors with npm link to my own bot locally.

NVM I found #215 and figured it out.

@MADLAB96
Copy link

MADLAB96 commented Mar 28, 2019

Okay I have this mostly done but I can't seem to get the methods working. Just adding them to my DurationArgumentType class doesn't do the trick. I also didn't find any examples of class methods with the rest of the types.

@Jazcash
Copy link

Jazcash commented Apr 3, 2019

This is the regex I'm using to parse duration in one of my bots, not sure if it's any help to anybody:

^(?:(?<weeks>\d+)w)?(?:((?<days>\d+)d)?(?:(?<hours>\d+)h)?(?:(?<minutes>\d+)m)?)$

E.g. 2w3d4h15m where any part is optional

@jonahsnider
Copy link
Contributor

I'm not opposed to using moment, since it covers a lot of possible input formats, and handles localisation. The only problem is it doesn't take the "6mo3d4h50m30s" format... which is something that, ideally, would also accept locale-specific suffixes.

Moment supports plugins which you can use to define new formats and date-fns lets you define a pattern for parsing dates.

@MagnusHJensen
Copy link
Contributor

MagnusHJensen commented Dec 23, 2020

I'm guessing this was dropped, by people who tried to make it work?
If so, I would like to give it a shot, and see what I can come up with.
#256 (Was this ever implemented?)

@sriRacha21
Copy link
Contributor

I've given this a shot using code from my own bot (#366). I think this would make a great addition to Commando and would love to see any of the suggested implementations merged!

@Nik0lovD
Copy link

I have the same errorhttps://prnt.sc/1tkskl4

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
Polish
  
To do
Development

No branches or pull requests