diff --git a/README.md b/README.md
index b640dc9..cfb3d94 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,7 @@ Command | Description | Arguments | Admin | Example
**numsongs** | Outputs the number of songs in the queue in chat. Individual songs and songs within playlists are both counted. | None | No | `!numsongs`
**nextsong** | Outputs the title and name of the submitter of the next song in the queue if it exists. | None | No | `!nextsong`
**currentsong** | Outputs the title and name of the submitter of the song currently playing. | None | No | `!currentsong`
-**listsongs** | Outputs a list of the songs currently in the queue. | None | No | `!listsongs`
+**listsongs** | Outputs a list of the songs currently in the queue. | None or desired number of songs to list | No | `!listsongs`
**setcomment** | Sets the comment for the bot. If no argument is given, the current comment will be removed. | None OR new_comment | Yes | `!setcomment Hello! I am a bot. Type !help for the available commands.`
**numcached** | Outputs the number of songs currently cached on disk. | None | Yes | `!numcached`
**cachesize** | Outputs the total file size of the cache in MB. | None | Yes | `!cachesize`
diff --git a/commands.go b/commands.go
index 8798657..2e81c29 100644
--- a/commands.go
+++ b/commands.go
@@ -188,7 +188,7 @@ func parseCommand(user *gumble.User, username, command string) {
// ListSongs command
case dj.conf.Aliases.ListSongsAlias:
if dj.HasPermission(username, dj.conf.Permissions.AdminListSongs) {
- listSongs(user)
+ listSongs(user, argument)
} else {
dj.SendPrivateMessage(user, NO_PERMISSION_MSG)
}
@@ -478,11 +478,23 @@ func toggleAutomaticShuffle(activate bool, user *gumble.User, username string) {
}
// listSongs handles !listSongs functionality. Sends a private message to the user a list of all songs in the queue
-func listSongs(user *gumble.User) {
+func listSongs(user *gumble.User, value string) {
if dj.audioStream.IsPlaying() {
+ num := 0
+ if value == "" {
+ num = dj.queue.Len()
+ } else {
+ if parsedNum, err := strconv.Atoi(value); err != nil {
+ num = dj.queue.Len()
+ } else {
+ num = parsedNum
+ }
+ }
var buffer bytes.Buffer
dj.queue.Traverse(func(i int, song Song) {
- buffer.WriteString(fmt.Sprintf(SONG_LIST_HTML, song.Title(), song.Submitter()))
+ if i < num {
+ buffer.WriteString(fmt.Sprintf(SONG_LIST_HTML, i+1, song.Title(), song.Submitter()))
+ }
})
dj.SendPrivateMessage(user, buffer.String())
} else {
diff --git a/strings.go b/strings.go
index de0aad7..772bbfb 100644
--- a/strings.go
+++ b/strings.go
@@ -203,6 +203,8 @@ const CURRENT_SONG_HTML = `
const CURRENT_SONG_PLAYLIST_HTML = `
The %s currently playing is "%s", added %s from the %s "%s".
`
+
+// Message shown to user when the listsongs command is issued
const SONG_LIST_HTML = `
-
"%s", added by %s
+
%d: "%s", added by %s
`