Giter Site home page Giter Site logo

melt's Introduction

What is melt?

melt is a command-line utility for working with snowflake identifiers, as used by Twitter and Discord.

What are snowflakes?

A snowflake is a number used to uniquely identify a piece of data. Twitter uses it for tweets, e.g. the 1212702693736767490 in https://twitter.com/qntm/status/1212702693736767490 is a snowflake. Discord uses it for pretty much everything: users, servers, channels, messages, roles… You can access these snowflakes by going into your Advanced settings, enabling Developer Mode, then right-clicking on something to select Copy ID. Originally specified in this document, they have been used by Twitter since 2010 and by Discord since the beginning. Instagram uses a format that's based on snowflakes but slightly different, and is not supported by melt.

A snowflake consists of 4 pieces of information: Timestamp, data center ID, worker ID, and sequence number. The interesting one is the timestamp: a representation of the date and time when the snowflake was generated, exact to the millisecond. This means that the time it was created (and thus the approximate time the tweet was sent, the Discord server was created, etc.) can be calculated from the snowflake itself. This is called melting the snowflake.

Installation

Please see the install instructions for your operating system:

If your operating system is not listed here, or if you would like to manage updates of melt using cargo-update, follow the instructions for building from source.

Usage

By default, melt takes Twitter snowflakes from stdin, one per line, and converts them into UNIX timestamps with milliseconds:

$ echo 1212702693736767490 | melt
1577965827.770

Snowflakes can also be passed as command-line arguments:

$ melt 1212702693736767490
1577965827.770

The --format (or -f) flag can be used to modify the output format, as defined by chrono. Additionally, the formatting directives %^d, %^w, and %^s may be used to include the data center ID, worker ID, or sequence number, respectively.

$ echo 1212702693736767490 | melt -f '%d.%m.%Y %H:%M:%S'
02.01.2020 11:50:27

The flag -H is a shorthand and specifies a format of %Y-%m-%d %H:%M:%S:

$ echo 1212702693736767490 | melt -H
2020-01-02 11:50:27

The --timezone (or -z) flag can be used to change the timezone in which formatted times are displayed. The timezone must be given as a name from the Olson timezone database. By default, UTC is used. This flag has no effect on UNIX timestamps (i.e. when none of -f, --format, -H are specified), which are always in UTC.

$ echo 1212702693736767490 | melt -f '%d.%m.%Y %H:%M:%S' -z Europe/Berlin
02.01.2020 12:50:27

The --epoch (or -e) flag can be used to change the epoch from Twitter's default to Discord's:

$ echo 86841168427495424 | melt -e discord
1309539522.641

A different epoch, given as a UNIX timestamp, may also be specified:

$ echo 0 | melt -e 0
0

The --discord-format (or -d) flag can be used to format the times using Discord's timestamp syntax, which can be pasted into a Discord message to get human-readable timestamps. Possible values are d (or short-date), D (or long-date), t (or short-time), T (or long-time), f (or short-date-time), F (or long-date-time), and R (or relative). Using this flag implies --epoch=discord and disables the --timezone parameter, since Discord will display the times in the system timezone of the viewer.

$ echo 86841168427495424 | melt -dF
<t:1440774947:F>

(When sent as a message, my Discord app displays the above as Friday, 28 August 2015 15:15. The exact format may vary depending on your locale.)

melt's People

Contributors

fenhl avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.