Recherche avancée

Médias (0)

Mot : - Tags -/organisation

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (27)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Emballe Médias : Mettre en ligne simplement des documents

    29 octobre 2010, par

    Le plugin emballe médias a été développé principalement pour la distribution mediaSPIP mais est également utilisé dans d’autres projets proches comme géodiversité par exemple. Plugins nécessaires et compatibles
    Pour fonctionner ce plugin nécessite que d’autres plugins soient installés : CFG Saisies SPIP Bonux Diogène swfupload jqueryui
    D’autres plugins peuvent être utilisés en complément afin d’améliorer ses capacités : Ancres douces Légendes photo_infos spipmotion (...)

  • Encoding and processing into web-friendly formats

    13 avril 2011, par

    MediaSPIP automatically converts uploaded files to internet-compatible formats.
    Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
    Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
    Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
    All uploaded files are stored online in their original format, so you can (...)

Sur d’autres sites (4826)

  • Exceeded GA’s 10M hits data limit, now what ?

    1er décembre 2021, par Joselyn Khor

    Exceeded Google Analytics’ 10M hits data limit, now what ?

    “Your data volume (1XXM hits) exceeds the limit of 10M hits per month as outlined in our Terms of Service. If you continue to exceed the limit, we will stop processing new data on XXX 21, 2019. Learn more about possible solutions.”

    Yikes. Alarm bells were ringing when a Google Analytics free user came to us faced with this notice. Let’s call him ‘Mark’. Mark had reached the limits on the data he could collect through Google Analytics and was shocked by the limited options available to fix the problem, without blowing the budget. The thoughts racing through his head were :

    • “What happens to all my data ?”
    • “What if Google starts charging USD150K now ?”

    Then he came across Matomo and decided to get in touch with our support team …

    “Can you fix this issue ?” he asked us.

    “Absolutely !” we said.

    We’ll get back to helping Mark in a minute. For now let’s go over why this was such a dilemma for him.

    In order to resolve this data limits issue, one of the solutions was for him to upgrade to Google Analytics 360, which meant shelling out USD150,000 per year for their 1 billion hits per month option. Going from free to USD150,000 was too much of a stretch for a growing company.

    “Your data volume (1XXM hits) exceeds the limit of 10M hits per month …”, what did this message mean ?

    With the free version, Mark could collect up to 10 million “hits” per month, per account. Going over meant Google Analytics could stop collecting any more data for free as outlined in their Terms.

    Google Analytics’ Terms of Service (2018, sec. 2) states, “Subject to Section 15, the Service is provided without charge to You for up to 10 million Hits per month per account.”[1]

    What is a "hit" in Google Analytics ?

    Data being sent to Google Analytics. It can be a transaction, event, social interaction or pageview - these all produce what Google calls a “hit”.

    Google Analytics data limits
    Google Analytics Terms of Service

    And their Analytics Help Data Limits (n.d.) support page makes clear that : “If a property sends more hits per month to Analytics than allowed by the Analytics Terms of Service, there is no assurance that the excess hits will be processed. If the property’s hit volume exceeds this limit, a warning may be displayed in the user interface and you may be prevented from accessing reports.”[2]

    Google Analytics data collection limit
    Google Analytics’ data limits support page

    Possible solutions

    So the possible solutions given by Google Analytics’ Data Limits support page were (also shown in image below) :

    • To pay USD150K to upgrade to Google Analytics 360
    • To send fewer hits by setting up sampling
    • Or choose the slightly less relevant option to upgrade mobile app tracking to Google Analytics for Firebase.

    Without the means to pay, the free version was fast becoming inaccessible for Mark as he was facing a future where he risked no longer having access to up-to-date data used in his business’ reporting.

    Mark was facing a problem that potentially didn’t have a cost-effective solution.

    Google Analytics data limits
    Google Analytics’ data limits support page

    So what can you really do about it ?

    This is where we can help provide some assistance. If you’re reading this article, we’ll assume you can relate to Mark and share with you the advice on options we gave him.

    Options :

    One option posed by Google is for you to send fewer hits by auditing your data collection processes

    If you really don’t have the budget, you’ll need to reassess your data collection priorities and go over your strategies to see what is necessary to track, and what isn’t.

    • Make sure you know what you’re tracking and why. Look at what websites are being tracked by Google and into what properties.
    • Go through what data you’re tracking and decide what is or isn’t of value.
    • Set up data sampling, this however, will lead to inaccurate data.

    From here you can start to course correct. If you’ve found data you’re not using for analysis, get rid of these events/pageviews in your Google Analytics.

    But the limitations here are that eventually, you’re going to run out of irrelevant metrics and everything you’re tracking will be essential. So you’ll hit another brick wall and return to the same situation.

    Option 2 Ignore and continue using the free version of Google Analytics

    With this option, you’ll have to bear the business risks involved by basing decisions off of analytics reports that may or may not be updated. In this case, you may still get contacted about exceeding the limits. As the free service is provided for only up to 10 million hits, once you’ve gone over them, you’re violating what’s stipulated in the Terms of Service. 

    There’s also the warning that “… you may be prevented from accessing reports” (Data limits, n.d.). So while we may not know for certain what Google Analytics will do, in this case it may be better to be safe rather than sorry by acting quickly to resolve it. 

    Option 3 -The Matomo solution – a privacy-friendly Google Analytics alternative

    Upgrade to a web analytics platform that can handle your demanding data requirements. Save money while continuing to gain valuable insights by moving over to Matomo Analytics (recommended)

    This is where you can save up to USD130,000 a year. As well as that, the transition from Google Analytics to the Matomo Cloud is a seamless experience as setup and maintenance is taken care of by our experts.

    For example, you can get up to 25M hits for USD3,241/month (or USD38,900/year) on the Essentials plan.

    Or even 25M hits for USD4,991/month (or USD59,900/year) on the Business plan – which offers additional web analytics and conversion optimization resources.

    Matomo Cloud is a great option if you’re looking for a secure, cost-effective and powerful analytics solution. You also get what Google Analytics could never offer you : full control and ownership of your own data and privacy. 

    Try Matomo free for 21 days – no credit card required.

    No need to worry about losing your Google Analytics data because …

    Now you can import your historic Google Analytics data directly into your Matomo with the Google Analytics Importer tool. Simply follow the step-by-step guide to get started for free.

    Along with savings you can get :

    • A solution for the data limits issue forever. You choose the right plan to suit your data needs and adapt as you continue growing
    • 100% accurate data (no data sampling)
    • 100% data ownership of all your information without signing away your data to a third party
    • Powerful web analytics and conversion optimization features
    • Matomo Tag Manager
    • Easy setup
    • Support from Matomo’s specialists

    Learn more about Matomo Cloud pricing.

    Or go for Matomo On-Premise

    If you have the in-house infrastructure to support self-hosting Matomo on your own servers then there’s also the option of Matomo On-Premise. Here you’ll get full security knowing the data is on your own servers. 

    Setup will also require technical knowledge. There will also be costs associated with acquiring your own servers, and keeping up with regular maintenance and updates. With On-Premise you get maximum flexibility, with no data limits whatsoever. But if you’re coming over from Google Analytics and don’t have the infrastructure and team to host On-Premise, the Matomo Cloud could be right for you.

    Learn more about Matomo On-Premise.

    Where do you go from here ?

    Getting 10 millions hits per month is no small feat, it’s actually pretty fantastic. But if it means having to shell out USD150,000 just to be able to continue with Google Analytics, we feel your problem could be fixed with Matomo Cloud. You could then put the rest of the money you save to better use.

    If you choose Matomo, you now have the option to : 

    • Raise your data limits for a fraction of Google Analytics 360’s price
    • Get a comprehensive range of analytics features for the most impactful insights to ensure your website continues excelling
    • Get data that’s not sampled – meaning 100% accuracy in your reports
    • Migrate your data easily with the help of Matomo’s support team

    We’ll have you covered. 

    By sharing with you the options and advice we gave to Mark, we hope you’ll be able to find a solution that makes your life easier and solves the issue of data restrictions forever.

    The team at Matomo is here to help you every step of the way to ensure a stress-free transition from Google Analytics if that is what works best for you.

    For next steps, check out our live online Matomo demo and start your free 21-day trial.

    References :

    [1] Terms of Service. (2018, July 24). In Google Analytics Terms of Service. Retrieved June 12, 2019, from https://www.google.com/analytics/terms/us.html

    [2] Data limits. (n.d.). In Analytics Help Data limits. Retrieved June 12, 2019, from https://support.google.com/analytics/answer/1070983?hl=en

  • Google Analytics 4 (GA4) vs Universal Analytics (UA)

    24 janvier 2022, par Erin — Analytics Tips

    March 2022 Update : It’s official ! Google announced that Universal Analytics will no longer process any new data as of 1 July 2023. Google is now pushing Universal Analytics users to switch to the latest version of GA – Google Analytics 4. 

    Currently, Google Analytics 4 is unable to accept historical data from Universal Analytics. Users need to take action before July 2022, to ensure they have 12 months of data built up before the sunset of Universal Analytics

    So how do Universal Analytics and Google Analytics 4 compare ? And what alternative options do you have ? Let’s dive in. 

    In this blog, we’ll cover :

    What is Google Analytics 4 ? 

    In October 2020, Google launched Google Analytics 4, a completely redesigned analytics platform. This follows on from the previous version known as Universal Analytics (or UA).

    Amongst its touted benefits, GA4 promises a completely new way to model data and even the ability to predict future revenue. 

    However, the reception of GA4 has been largely negative. In fact, some users from the digital marketing community have said that GA4 is awful, unusable and so bad it can bring you to tears.

    Gill Andrews via Twitter

    Google Analytics 4 vs Universal Analytics

    There are some pretty big differences between Google Analytics 4 and Universal Analytics but for this blog, we’ll cover the top three.

    1. Redesigned user interface (UI)

    GA4 features a completely redesigned UI to Universal Analytics’ popular interface. This dramatic change has left many users in confusion and fuelled some users to declare that “most of the time you are going round in circles to find what you’re looking for.”

    Google Analytics 4 missing features
    Mike Huggard via Twitter

    2. Event-based tracking

    Google Analytics 4 also brings with it a new data model which is purely event-based. This event-based model moves away from the typical “pageview” metric that underpins Universal Analytics.

    3. Machine learning insights

    Google Analytics 4 promises to “predict the future behavior of your users” with their machine-learning-powered predictive metrics. This feature can “use shared aggregated and anonymous data to improve model quality”. Sounds powerful, right ?

    Unfortunately, it only works if at least 1,000 returning users triggered the relevant predictive condition over a seven-day period. Also, if the model isn’t sustained over a “period of time” then it won’t work. And according to Google, if “the model quality for your property falls below the minimum threshold, then Analytics will stop updating the corresponding predictions”.

    This means GA4’s machine learning insights probably won’t work for the majority of analytics users.

    Ultimately, GA4 is just not ready to replace Google’s Universal Analytics for most users. There are too many missing features.

    What’s missing in Google Analytics 4 ?

    Quite a lot. Even though it offers a completely new approach to analytics, there are a lot of key features and functions missing in GA4.

    Behavior Flow

    The Behavior Flow report in Universal Analytics helps to visualise the path users take from one page or Event to the next. It’s extremely useful when you’re looking for quick and clear insight. But it no longer exists in Google Analytics 4, and instead, two new overcomplicated reports have been introduced to replace it – funnel exploration report and path exploration report.

    The decision to remove this critical report will leave many users feeling disappointed and frustrated. 

    Limitations on custom dimensions

    You can create custom dimensions in Google Analytics 4 to capture advanced information. For example, if a user reads a blog post you can supplement that data with custom dimensions like author name or blog post length. But, you can only use up to 50, and for some that will make functionality like this almost pointless.

    Machine learning (ML) limitations

    Google Analytics 4 promises powerful ML insights to predict the likelihood of users converting based on their behaviors. The problem ? You need 1,000 returning users in one week. For most small-medium businesses this just isn’t possible.

    And if you do get this level of traffic in a week, there’s another hurdle. According to Google, if “the model quality for your property falls below the minimum threshold, then GA will stop updating the corresponding predictions.” To add insult to injury Google suggests that this might make all ML insights unavailable. But they can’t say for certain… 

    Views

    One cornerstone of Universal Analytics is the ability to configure views. Views allow you to set certain analytics environments for testing or cleaning up data by filtering out internal traffic, for example. 

    Views are great for quickly and easily filtering data. Preset views that contain just the information you want to see are the ideal analytics setup for smaller businesses, casual users, and do-it-yourself marketing departments.

    Via Reddit

    There are a few workarounds but they’re “messy [,] annoying and clunky,” says a disenfranchised Redditor.

    Another helpful Reddit user stumbled upon an unhelpful statement from Google. Google says that they “do not offer [the views] feature in Google Analytics 4 but are planning similar functionality in the future.” There’s no specific date yet though.

    Bounce rate

    Those that rely on bounce rate to understand their site’s performance will be disappointed to find out that bounce rate is also not available in GA4. Instead, Google is pushing a new metric known as “Engagement Rate”. With this metric, Google now uses their own formula to establish if a visitor is engaged with a site.

    Lack of integration

    Currently, GA4 isn’t ready to integrate with many core digital marketing tools and doesn’t accept non-Google data imports. This makes it difficult for users to analyse ROI and ROAS for campaigns measured in other tools. 

    Content Grouping

    Yet another key feature that Google has done away with is Content Grouping. However, as with some of the other missing features in GA4, there is a workaround, but it’s not simple for casual users to implement. In order to keep using Content Grouping, you’ll need to create event-scoped custom dimensions.

    Annotations 

    A key feature of Universal Analytics is the ability to add custom Annotations in views. Annotations are useful for marking dates that site changes were made for analysis in the future. However, Google has removed the Annotations feature and offered no alternative or workaround.

    Historical data imports are not available

    The new approach to data modelling in GA4 adds new functionality that UA can’t match. However, it also means that you can’t import historical UA data into GA4. 

    Google’s suggestion for this one ? Keep running UA with GA4 and duplicate events for your GA4 property. Now you will have two different implementations running alongside each other and doing slightly different things. Which doesn’t sound like a particularly streamlined solution, and adds another level of complexity.

    Should you switch to Google Analytics 4 ?

    So the burning question is, should you switch from Universal Analytics to Google Analytics 4 ? It really depends on whether you have the available resources and if you believe this tool is still right for your organisation. At the time of writing, GA4 is not ready for day-to-day use in most organisations.

    If you’re a casual user or someone looking for quick, clear insights then you will likely struggle with the switch to GA4. It appears that the new Google Analytics 4 has been designed for enterprise-scale businesses with large internal teams of analysts.

    Google Analytics 4 UX changes
    Micah Fisher-Kirshner via Twitter

    Unfortunately, for most casual users, business owners and do-it-yourself marketers there are complex workarounds and time-consuming implementations to handle. Ultimately, it’s up to you to decide if the effort to migrate and relearn GA is worth it.

    Right now is the best time to draw the line and make a decision to either switch to GA4 or look for a better alternative to Google Analytics.

    Google Analytics alternative

    Matomo is one of the best Google Analytics alternatives offering an easy to use design with enhanced insights on our Cloud, On-Premise and on Matomo for WordPress solutions. 

    Google Analytics 4 Switch to Matomo
    Mark Samber via Twitter

    Matomo is an open-source analytics solution that provides a comprehensive, user-friendly and compliance-focused alternative to both Google Analytics 4 and Universal Analytics.

    The key benefits of using Matomo include :

    Plus, unlike GA4, Matomo will accept your historical data from UA so you don’t have to start all over again. Check out our 7 step guide to migrating from Google Analytics to find out how.

    Getting started with Matomo is easy. Check out our live demo and start your free 21-day trial. No credit card required.

    In addition to the limitations and complexities of GA4, there are many other significant drawbacks to using Google Analytics.

    Google’s data ethics are a growing concern of many and it is often discussed in the mainstream media. In addition, GA is not GDPR compliant by default and has resulted in 200k+ data protection cases against websites using GA.

    What’s more, the data that Google Analytics actually provides its end-users is extrapolated from samples. GA’s data sampling model means that once you’ve collected a certain amount of data Google Analytics will make educated guesses rather than use up its server space collecting your actual data. 

    The reasons to switch from Google Analytics are rising each day. 

    Wrap up

    The now required update to GA4 will add new layers of complexity, which will leave many casual web analytics users and marketers wondering if there’s a better way. Luckily there is. Get clear insights quickly and easily with Matomo – start your 21-day free trial now.

  • Why does My Discord bot stop playing music

    27 septembre 2021, par Konglnwza

    So My Discord bot will be able to play music for a while then it will stop and i have to restart the bot to fix it.
And if it stopped then i use command skip it will crash the bot with the errors below

    


    C:\Users\User\Desktop\Discord bot\Song\play.js:96&#xA;    server_queue.connection.dispatcher.end();&#xA;                                       ^&#xA;&#xA;TypeError: Cannot read property &#x27;end&#x27; of null&#xA;    at skip_song (C:\Users\User\Desktop\Discord bot\Song\play.js:96:40)&#xA;    at Object.execute (C:\Users\User\Desktop\Discord bot\Song\play.js:65:47)&#xA;    at Client.<anonymous> (C:\Users\User\Desktop\Discord bot\bot.js:78:74)&#xA;    at Client.emit (node:events:394:28)&#xA;    at MessageCreateAction.handle (C:\Users\User\Desktop\Discord bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)&#xA;    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\User\Desktop\Discord bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)&#xA;    at WebSocketManager.handlePacket (C:\Users\User\Desktop\Discord bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)&#xA;    at WebSocketShard.onPacket (C:\Users\User\Desktop\Discord bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)&#xA;    at WebSocketShard.onMessage (C:\Users\User\Desktop\Discord bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)&#xA;    at WebSocket.onMessage (C:\Users\User\Desktop\Discord bot\node_modules\ws\lib\event-target.js:132:16)&#xA;</anonymous>

    &#xA;

    I guess the problem is something with ffmpeg or i must have some npms more.

    &#xA;

    npm i already installed

    &#xA;

      &#xA;
    • discord.js
    • &#xA;

    • ytdl-core
    • &#xA;

    • ytdl-search&#xA;and also i already installed ffmpeg in my computer and set the path
    • &#xA;

    &#xA;

    i want to ask that do i have to install any npms more ? or anyone know how to fixed this problem ?

    &#xA;

    const ytdl = require(&#x27;ytdl-core&#x27;);&#xA;const ytSearch = require(&#x27;yt-search&#x27;);&#xA;&#xA;const queue = new Map();&#xA;&#xA;module.exports = {&#xA;    name: &#x27;play&#x27;,&#xA;    aliases: [&#x27;skip&#x27;, &#x27;stop&#x27;, &#x27;queue&#x27;, &#x27;leave&#x27;, &#x27;join&#x27;],&#xA;    description: &#x27;Joins and play&#x27;,&#xA;    async execute(message, args , cmd, client, Discord){&#xA;        const voice_channel = message.member.voice.channel;&#xA;        if(!voice_channel) return message.channel.send(&#x27;เข้าไปอยู่ในดิสก่อนดิวะ :angry: &#x27;);//you must in voice channel&#xA;        &#xA;        &#xA;        const server_queue = queue.get(message.guild.id);&#xA;        if(cmd===&#x27;play&#x27; || cmd===&#x27;p&#x27;){&#xA;            if(!args.length) return message.channel.send(&#x27;จะเปิดอะไรล่ะพี่ :triumph:&#x27;);//you must have argument&#xA;            let song = {};&#xA;&#xA;            if(ytdl.validateURL(args[0])){&#xA;                const song_info = await ytdl.getInfo(args[0]);&#xA;                song = {title: song_info.videoDetails.title, url: song_info.videoDetails.video_url}&#xA;            } else {&#xA;                const videoFinder = async (query) => {&#xA;                    const videoResult = await ytSearch(query);&#xA;                    return (videoResult.videos.length > 1) ? videoResult.videos[0] : null;&#xA;                }&#xA;&#xA;                const video = await videoFinder(args.join(&#x27; &#x27;));&#xA;                if(video){&#xA;                    song = {title: video.title, url: video.url}&#xA;                &#xA;                } else{&#xA;                    message.channel.send(&#x27;หาไม่เจอ :cry: &#x27;);//cant find song&#xA;                }&#xA;            }&#xA;            //const connection = await voiceChannel.join(); &#xA;            if(!server_queue){&#xA;                const queue_constructor = {&#xA;                    voice_channel: voice_channel,&#xA;                    text_channel: message.channel,&#xA;                    connection: null,&#xA;                    songs: []&#xA;                }&#xA;&#xA;                queue.set(message.guild.id, queue_constructor);&#xA;                queue_constructor.songs.push(song);&#xA;&#xA;                try{&#xA;                    const connection = await voice_channel.join();&#xA;                    queue_constructor.connection = connection;&#xA;                    video_player(message.guild, queue_constructor.songs[0]);&#xA;                } catch (err) {&#xA;                    queue.delete(message.guild.id);&#xA;                    message.channel.send(&#x27;error&#x27;);&#xA;                    throw err;&#xA;                }&#xA;            } else{&#xA;                server_queue.songs.push(song);&#xA;                return message.channel.send(`:regional_indicator_k: :regional_indicator_o: :regional_indicator_n: :regional_indicator_g: :star_struck: **${song.title}** ใส่เข้าคิวแล้ว`)//added to queue&#xA;            }&#xA;            &#xA;&#xA;        }&#xA;        else if(cmd === &#x27;skip&#x27; || cmd ===&#x27;s&#x27;) skip_song(message, server_queue);&#xA;        else if(cmd === &#x27;clear&#x27; || cmd===&#x27;c&#x27;) clear_song(message, server_queue);&#xA;        else if(cmd === &#x27;join&#x27;) join_song(message);&#xA;        else if(cmd === &#x27;leave&#x27;) leave_song(message);&#xA;        else if(cmd === &#x27;queue&#x27; || cmd ===&#x27;q&#x27;) queue_show(message,server_queue,Discord);&#xA;&#xA;&#xA;    }&#xA;}&#xA;&#xA;const video_player = async (guild, song) => {&#xA;    const song_queue = queue.get(guild.id);&#xA;&#xA;    if(!song){&#xA;        //song_queue.text_channel.send(&#x27;ไปละบาย :kissing_heart: &#x27;);&#xA;        song_queue.voice_channel.leave();&#xA;        queue.delete(guild.id);&#xA;        return;&#xA;    }&#xA;    const stream = ytdl(song.url,{filter: &#x27;audioonly&#x27;},{ highWaterMark: 1&lt;&lt;25 });&#xA;    song_queue.connection.play(stream, { seek: 0, volume: 0.5 })&#xA;    .on(&#x27;finish&#x27;, () => {&#xA;        song_queue.songs.shift();&#xA;        video_player(guild, song_queue.songs[0]);&#xA;    });&#xA;    await song_queue.text_channel.send(`:regional_indicator_k: :regional_indicator_o: :regional_indicator_n: :regional_indicator_g: :sunglasses: กำลังเล่นเด็ก ***${song.title}***`);//playing song&#xA;}&#xA;&#xA;const skip_song = (message, server_queue) => {&#xA;    if(!message.member.voice.channel) return message.channel.send(&#x27;เข้าดิสก่อนดิ :angry: &#x27;);//you must be in voice channel&#xA;    if(!server_queue) return message.channel.send(&#x27;ไม่มีเพลงในคิวแล้ว :relieved: &#x27;);//no song in queue&#xA;    server_queue.connection.dispatcher.end();&#xA;}&#xA;&#xA;const clear_song = (message, server_queue) => {&#xA;    if(!message.member.voice.channel) return message.channel.send(&#x27;เข้าดิสก่อนดิ :angry: &#x27;);//you must be in voice channel&#xA;    if(!server_queue) return message.channel.send(&#x27;ไม่มีเพลงในคิวแล้ว :relieved: &#x27;);//no song in queue&#xA;    server_queue.songs = [];&#xA;    server_queue.connection.dispatcher.end();&#xA;}&#xA;&#xA;const join_song = (message) => {&#xA;    if(!message.member.voice.channel) return message.channel.send(&#x27;เข้าดิสก่อนดิ :angry: &#x27;);//you must be in voice channel&#xA;    message.member.voice.channel.join();&#xA;}&#xA;&#xA;const leave_song = (message) => {&#xA;    if(!message.member.voice.channel) return message.channel.send(&#x27;เข้าดิสก่อนดิ :angry: &#x27;);//you must be in voice channel&#xA;    message.member.voice.channel.leave();&#xA;}&#xA;&#xA;const queue_show =  (message,server_queue,Discord) => {&#xA;    if(!server_queue) return message.channel.send(&#x27;ไม่มีเพลงในคิวแล้ว :relieved: &#x27;);//no song in queue&#xA;    const queueList = server_queue.songs.map((song, i) => `[${&#x2B;&#x2B;i}] - ${song.title}`);&#xA;    const queueEmbed = new Discord.MessageEmbed()&#xA;    .setDescription(queueList);&#xA;    message.channel.send(queueEmbed);&#xA;}```&#xA;

    &#xA;