func DeleteUserReaction(client httd.Deleter, channelID, messageID, userID Snowflake, emoji interface{}) (err error) {
	if channelID.Empty() {
		return errors.New("channelID must be set to target the correct channel")
	}
	if messageID.Empty() {
		return errors.New("messageID must be set to target the specific channel message")
	}
	if emoji == nil {
		return errors.New("emoji must be set in order to create a message reaction")
	}
	if userID.Empty() {
		return errors.New("userID must be set to target the specific user reaction")
	}

	emojiCode := ""
	if _, ok := emoji.(*Emoji); ok {
		emojiCode = emoji.(*Emoji).ID.String()
	} else if _, ok := emoji.(string); ok {
		emojiCode = emoji.(string) // unicode
	} else {
		return errors.New("emoji type can only be a unicode string or a *Emoji struct")
	}

	resp, _, err := client.Delete(&httd.Request{
		Ratelimiter: ratelimitChannelMessagesDelete(channelID),
		Endpoint:    endpoint.ChannelMessageReactionUser(channelID, messageID, emojiCode, userID),
	})
	if err != nil {
		return
	}

	if resp.StatusCode != http.StatusNoContent {
		msg := "unexpected http response code. Got " + resp.Status + ", wants " + http.StatusText(http.StatusNoContent)
		err = errors.New(msg)
	}
	return
}
// DeleteUserReaction [DELETE]	Deletes another user's reaction. This endpoint requires the 'MANAGE_MESSAGES'
//                          		permission to be present on the current user. Returns a 204 empty response on success.
// Endpoint                 		/channels/{channel.id}/messages/{message.id}/reactions/{emoji}/@me
// Rate limiter [MAJOR]     		/channels/{channel.id}/messages [DELETE] TODO: I have no idea if this is the correct key
// Discord documentation    		https://discordapp.com/developers/docs/resources/channel#delete-user-reaction
// Reviewed                 		2018-06-07
// Comment                  		emoji either unicode (string) or *Emoji with an snowflake Snowflake if it's custom
DeleteUserReaction [DELETE]	Deletes another user's reaction. This endpoint requires the 'MANAGE_MESSAGES'
permission to be present on the current user. Returns a 204 empty response on success.
// DeleteUserReaction [ DELETE ] Deletes another user ' s reaction . This endpoint requires the ' MANAGE_MESSAGES ' // permission to be present on the current user . Returns a 204 empty response on success . // Endpoint / channels / { channel . id } / messages / { message . id } / reactions / { emoji } / @me // Rate limiter [ MAJOR ] / channels / { channel . id } / messages [ DELETE ] TODO : I have no idea if this is the correct key // Discord documentation https : // discordapp . com / developers / docs / resources / channel#delete - user - reaction // Reviewed 2018 - 06 - 07 // Comment emoji either unicode ( string ) or * Emoji with an snowflake Snowflake if it ' s custom
func DeleteUserReaction(client httd.Deleter, channelID, messageID, userID Snowflake, emoji interface{}) (err error) {
	if channelID.Empty() {
		return errors.New("channelID must be set to target the correct channel")
	}
	if messageID.Empty() {
		return errors.New("messageID must be set to target the specific channel message")
	}
	if emoji == nil {
		return errors.New("emoji must be set in order to create a message reaction")
	}
	if userID.Empty() {
		return errors.New("userID must be set to target the specific user reaction")
	}
	emojiCode := ""
	if _, ok := emoji.(*Emoji); ok {
		emojiCode = emoji.(*Emoji).ID.String()
	} else if _, ok := emoji.(string); ok {
		emojiCode = emoji.(string) 
	} else {
		return errors.New("emoji type can only be a unicode string or a *Emoji struct")
	}
	resp, _, err := client.Delete(&httd.Request{
		Ratelimiter: ratelimitChannelMessagesDelete(channelID),
		Endpoint:    endpoint.ChannelMessageReactionUser(channelID, messageID, emojiCode, userID),
	})
	if err != nil {
		return
	}
	if resp.StatusCode != http.StatusNoContent {
		msg := "unexpected http response code. Got " + resp.Status + ", wants " + http.StatusText(http.StatusNoContent)
		err = errors.New(msg)
	}
	return
}
func DeleteUserReaction ( client httd . Deleter , channelID , messageID , userID Snowflake , emoji interface { } ) ( err error ) { if channelID . Empty ( ) { return errors . New ( " " ) } if messageID . Empty ( ) { return errors . New ( " " ) } if emoji == nil { return errors . New ( " " ) } if userID . Empty ( ) { return errors . New ( " " ) } emojiCode := " " if _ , ok := emoji . ( * Emoji ) ; ok { emojiCode = emoji . ( * Emoji ) . ID . String ( ) } else if _ , ok := emoji . ( string ) ; ok { emojiCode = emoji . ( string ) } else { return errors . New ( " " ) } resp , _ , err := client . Delete ( & httd . Request { Ratelimiter : ratelimitChannelMessagesDelete ( channelID ) , Endpoint : endpoint . ChannelMessageReactionUser ( channelID , messageID , emojiCode , userID ) , } ) if err != nil { return } if resp . StatusCode != http . StatusNoContent { msg := " " + resp . Status + " " + http . StatusText ( http . StatusNoContent ) err = errors . New ( msg ) } return }
DeleteUserReaction [DELETE]	Deletes another user's reaction.
DeleteUserReaction [ DELETE ] Deletes another user ' s reaction .
// unicode