Skip to content

Instantly share code, notes, and snippets.

@believer-ufa
Last active July 4, 2024 00:32
Show Gist options
  • Save believer-ufa/23e65ce014061eec7ec9126eb6ed66b4 to your computer and use it in GitHub Desktop.
Save believer-ufa/23e65ce014061eec7ec9126eb6ed66b4 to your computer and use it in GitHub Desktop.
Быстрое удаление сообщений в чатах Discord

Данная инструкция научит вас удалять сразу большое количество сообщений в программе Discord.

Вы выполняете эти действия только на свой страх и риск. Я не несу ответственности за то, что вы таким образом удалите важные данные или передадите таким образом доступ к своему аккаунту другому лицу.

НЕ ЗАПУСКАЙТЕ ТАКИЕ СКРИПТЫ, пока вы не будете достаточно уверены в том, что скрипт был написан честным человеком и не содержит ничего такого, что поможет ему получить доступ к вашим данным. Сделать это очень просто, уверяю вас, поэтому несколько раз подумайте перед тем как выполнить какой-то код в браузере от какого-то человека.

Исходный код скрипта ```js var authToken = '_____________________________________'

if (typeof(blockedAuthors) === 'undefined') { var blockedAuthors = [] }

clearMessages = function() { const channel = window.location.href.split('/').pop() const baseURL = https://discordapp.com/api/channels/${channel}/messages const headers = { Authorization: authToken }

let clock = 0
let interval = 500
let beforeId = null
let messagesStore = []

function delay(duration) {
    return new Promise((resolve, reject) => {
        setTimeout(resolve, duration)
    })
}

function loadMessages() {

    let url = `${baseURL}?limit=100`

    if (beforeId) {
        url += `&before=${beforeId}`
    }

    return fetch(url, { headers })
}

function tryDeleteMessage(message) {
    if (blockedAuthors.indexOf(message.author.id) === -1) {

        console.log(`Deleting message from ${message.author.username} (${message.content.substring(0, 30)}...)`)

        return fetch(`${baseURL}/${message.id}`, { headers, method: 'DELETE' })
    }
}

function filterMessages(message) {
    return blockedAuthors.indexOf(message.author.id) === -1
}

function onlyNotDeleted(message) {
    return message.deleted === false
}

loadMessages()
    .then(resp => resp.json())
    .then(messages => {
        if (messages === null || messages.length === 0) {
            console.log(`We loaded all messages in this chat`)

            return
        }

        beforeId = messages[messages.length-1].id

        messages.forEach(message => { message.deleted = false })

        messagesStore = messagesStore.concat(messages.filter(filterMessages))

        return Promise.all(messagesStore.filter(onlyNotDeleted).map(message => {
            return delay(clock += interval)
                .then(() => tryDeleteMessage(message))
                .then(resp => {
                    if (resp && resp.status === 204) {
                        message.deleted = true
                    } else if (resp && resp.status === 403) {
                        console.log(`Cannot delete messages from user ${message.author.username}, skiping it`)

                        blockedAuthors.push(message.author.id)

                        messagesStore = messagesStore.filter(filterMessages)
                    }
                })
        }))
    })
    .then(function() {
        if (messagesStore.length !== 0 && messagesStore.length < 100) {
            clearMessages()
        } else {
            console.log(`Finished clearing cycle. You can run again this script if you want delete next 100 messages`)
        }
    })

}

clearMessages()

</details>

Данный скрипт делает следующие вещи:

1. Пытается загрузить последние 100 сообщений в текущем чате, которые он может удалить
2. Пытается удалить каждое сообщение. Если он не может удалить сообщение одного из
   пользователей в истории, далее он не будет пытаться удалять его сообщения
   
Чтобы работал данный скрипт, вам придётся скопировать токен безопасности из консоли разработчика браузера. **Никому не передавайте данный токен из посторонних лиц**, так как они смогут использовать его для доступа
к вашему аккаунту.

## Короткая инструкция

Для тех кто знаком с веб-разработкой:

1. Откройте Discord в браузере
2. Скопируйте токен авторизации в консоли разработчика из localStorage
3. Вставьте его в начало скрипта, в переменную `authToken`
4. Откройте приватную беседу или чат на каком-либо сервере, где вам надо удалить сообщения
5. Запустите скрипт из консоли разработчика
6. Скрипт начнёт удалять сообщения и будет оповещать вас о своей работе

## Подробная инструкция

### Вставьте код скрипта в "блокнот"

1. Откройте самый обычный блокнот, который есть на любой Windows машине, тот самый, который notepad.exe
1. Вернитесь в начало данной инструкции, кликните по строке "исходный код скрипта"
1. Вы увидите длинный код. Он нужен нам весь, от начала и до конца. Выделите и скопируйте его
1. Вставьте этот код в блокнот

### Подключите свой токен авторизации

1. Откройте Discord в браузере Google Chrome
1. Авторизуйтесь в Discord под своим логином и паролем
1. Откройте консоль разработчика в браузере (горячие клавиши: F12, Ctrl+Shift+J)
1. Откройте вкладку `Application`
1. В левой панели найдите надпись "Local Storage", нажмите на треугольник слева от неё
1. Панель развернёт список из нескольких элементов, выберите `https://discordapp.com`
1. Вам отобразят таблицу с различными данными, найдите среди них строку `token` (на момент написания этой инструкции, эта строка была последней в таблице)
1. Скопируйте код во второй колонке таблицы, это токен безопасности, который нужен для выполнения действий от вашего лица.
1. Откройте блокнот с кодом скрипта
1. Замените в коде первую строку `var authToken = '_____________________________________'` на `var authToken = '{токен-безопасности-который-вы-скопировали-из-localStorage}'`.

  То есть, мы изменяем одну строку скрипта, самую первую. Это установка переменной `authToken`,
  она должна иметь значение вашего токена авторизации, который вы скопировали, чтобы скрипт смог работать.
  
  В итоге, у вас должно получиться что-то вроде этого:
  
  ```js
var authToken = "MJEUWEJJNJWEYDE.CJASYE.JJNWNJWDYSJAKKJWNSY"

if (typeof(blockedAuthors) === 'undefined') {
    var blockedAuthors = []
}

// и далее продолжение кода скрипта...

Выберите чат и запустите скрипт удаления сообщений

  1. Откройте в Discord приватную беседу или чат на каком-либо сервере, где вам надо удалить сообщения
  2. Скопируйте скрипт из своего блокнота со своим токеном авторизации
  3. Снова откройте консоль разработчика в браузере на вкладке с Discord
  4. Откройте вкладку Console
  5. Там будут отображаться различные предупреждения, всё так и должно быть
  6. Прокрутите в самый низ, там будет строка ввода команд
  7. Вставьте туда весь код своего скрипта и нажмите Enter
  8. Скрипт начнёт удалять сообщения и будет оповещать вас о своей работе
@LaconicCode
Copy link

Great script, but this will only delete 100 messages. If I run the script a second time it will not delete more than 100 messages.

@Reebay
Copy link

Reebay commented Mar 16, 2017

Не работает, не могли бы вы пересмотреть const baseURL ? там вроде ошибка, не могу исправить

@fcuk1337
Copy link

Не работает. ://
image

@assassovich
Copy link

ошибка
Uncaught SyntaxError: Unexpected identifier VM146:19

в строке:
let url = ${baseURL}?limit=100

@VladozPlay
Copy link

может кто код без ошибок скинуть?

@Mudak1337
Copy link

В самом начале из-за кавычек половина кода становиться комментарием, уберите их и все будет намана, но тогда уже другая проблема, теперь в local storage нет токена

@ForseNight
Copy link

Я могу попробовать написать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment