--[[ 🎤 ChatSinger: Your Friendly Neighborhood Singing Buddy! 🎶 Transform boring chat into a musical adventure! This module brings personality, fun, and spontaneity to your Roblox singing experience. ]] local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer or Players:GetPlayerFromCharacter(script.Parent) -- 🌈 Mood and Personality System local MoodTypes = { EXCITED = { emotes = {"😄", "🎉", "🤩"}, energyLevel = 1.2 }, CHILL = { emotes = {"😎", "🕶️", "✌️"}, energyLevel = 0.8 }, DRAMATIC = { emotes = {"🎭", "💖", "✨"}, energyLevel = 1.0 } } -- 🎵 The Singing Personality local ChatSinger = { _version = "1.2.0", _mood = "EXCITED", _personalityTraits = { randomness = 0.7, chattiness = 0.6, musicality = 0.8 } } -- 🧠 Personal Touch: Dynamic Mood Management function ChatSinger:SetMood(newMood) if MoodTypes[newMood] then self._mood = newMood print("🌈 Mood changed to: " .. newMood) else warn("⚠️ Mood not recognized. Staying " .. self._mood) end end -- 🎤 Enhanced Singing Mechanism function ChatSinger:Sing(songLyrics, options) -- Default configuration with personality local config = { useEmotes = true, randomDelay = true, personalitySpice = true } -- Merge user options if options then for k, v in pairs(options) do config[k] = v end end -- Get current mood details local currentMoodData = MoodTypes[self._mood] -- Sing with personality! coroutine.wrap(function() for i, line in ipairs(songLyrics) do -- Add some personality spice local emote = config.useEmotes and (currentMoodData.emotes[math.random(#currentMoodData.emotes)] or "") or "" -- Dynamic delay with personality randomness local baseDelay = config.randomDelay and math.random(2, 5) * currentMoodData.energyLevel or 2 -- Optional personality commentary if config.personalitySpice and math.random() < self._personalityTraits.chattiness then local personalComments = { "Ooh, feeling this line! 🎶", "Check out these lyrics! 🌟", "Who's jamming? I AM! 💃" } local comment = personalComments[math.random(#personalComments)] game.ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer(comment, "All") end -- Sing the line with flair game.ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer( line .. " " .. emote, "All" ) -- Wait with some personality randomness wait(baseDelay) end end)() end -- 🎼 Preset Song Collection local SongPresets = { { name = "Friendship Anthem", lyrics = { "We're friends forever, can't you see?", "This Roblox world is our melody!", "Singing together, wild and free!" } }, { name = "Gamer's Ballad", lyrics = { "From noob to pro, we'll rise today!", "Our skills are sharp, we're here to play!", "In this game, we'll find our way!" } } } -- 🎲 Random Song Generator function ChatSinger:GenerateRandomSong(length) length = length or math.random(3, 6) local randomLyrics = {} local lyricTemplates = { "In a world of {thing}, we {action}!", "Dreaming of {thing}, feeling so {emotion}!", "{Place} is calling, can you hear me now?" } local things = {"Roblox", "adventure", "coding", "gaming", "friendship"} local actions = {"shine bright", "break free", "explore", "conquer"} local emotions = {"alive", "excited", "powerful", "unstoppable"} local places = {"This server", "Our world", "The game"} for i = 1, length do local template = lyricTemplates[math.random(#lyricTemplates)] local line = template:gsub("{thing}", things[math.random(#things)]) :gsub("{action}", actions[math.random(#actions)]) :gsub("{emotion}", emotions[math.random(#emotions)]) :gsub("{Place}", places[math.random(#places)]) table.insert(randomLyrics, line) end return randomLyrics end -- 🔍 Song Discovery function ChatSinger:FindSong(name) for _, song in ipairs(SongPresets) do if song.name:lower() == name:lower() then return song.lyrics end end return nil end -- 🎉 Public Interface return { Sing = function(lyrics, options) if type(lyrics) == "string" then -- If a preset song name is given lyrics = ChatSinger:FindSong(lyrics) end if not lyrics then -- Generate random lyrics if no lyrics provided lyrics = ChatSinger:GenerateRandomSong() end ChatSinger:Sing(lyrics, options) end, SetMood = function(mood) ChatSinger:SetMood(mood) end, GenerateRandomSong = function(length) return ChatSinger:GenerateRandomSong(length) end, Presets = SongPresets }