diff --git a/lib/nostrum/api.ex b/lib/nostrum/api.ex index ccac0f386..dd562c2f3 100644 --- a/lib/nostrum/api.ex +++ b/lib/nostrum/api.ex @@ -649,6 +649,24 @@ defmodule Nostrum.Api do |> bangify end + @doc ~S""" + Expire (close voting on) a poll before the scheduled end time. Returns a message object. + """ + @spec expire_poll(Channel.id(), Message.id()) :: error | {:ok, Message.t()} + def expire_poll(channel_id, message_id) do + request(:post, Constants.poll_expire(channel_id, message_id)) + |> handle_request_with_decode({:struct, Message}) + end + + @doc ~S""" + Same as `expire_poll/2`, but raises `Nostrum.Error.ApiError` in case of failure. + """ + @spec expire_poll!(Channel.id(), Message.id()) :: Message.t() + def expire_poll!(channel_id, message_id) do + expire_poll(channel_id, message_id) + |> bangify + end + @doc ~S""" Gets a channel. diff --git a/lib/nostrum/constants.ex b/lib/nostrum/constants.ex index a5b68b453..851ddcba6 100644 --- a/lib/nostrum/constants.ex +++ b/lib/nostrum/constants.ex @@ -177,6 +177,9 @@ defmodule Nostrum.Constants do def poll_answer_voters(channel_id, message_id, answer_id), do: "/channels/#{channel_id}/polls/#{message_id}/answers/#{answer_id}" + def poll_expire(channel_id, message_id), + do: "/channels/#{channel_id}/polls/#{message_id}/expire" + def discord_epoch, do: 1_420_070_400_000 def opcodes do