Скрипт для личных сообщений DTF

1. Скачиваете расширение для браузера TamperMonkey

2. Создаете новый скрипт, вставляете это:

// ==UserScript== // @name DTF Plus Chat Replacement // @namespace http://tampermonkey.net/ // @version 1.7 // @description Replace Plus prompt with custom input and send real POST request to DTF API with image support // @author ME + chatGPT // @match https://dtf.ru/m/* // @grant none // @run-at document-end // ==/UserScript== (function () { 'use strict'; // 🔒 Вставьте свой Token ниже const DEVICE_TOKEN = 'СЮДА_ТОКЕН'; function waitForElement(selector, callback, interval = 300, timeout = 10000) { const start = Date.now(); const timer = setInterval(() => { const element = document.querySelector(selector); if (element) { clearInterval(timer); callback(element); } else if (Date.now() - start > timeout) { clearInterval(timer); } }, interval); } waitForElement('div.VGcZ2-ry', (targetDiv) => { const userIdMatch = window.location.pathname.match(/\/m\/(\d+)/); const userId = userIdMatch ? userIdMatch[1] : null; if (!userId) return; const replacementHTML = ` <div class="ZQKrj9Xg"> <div class="field field--default textarea"> <label class="field__wrapper"> <div class="field__wrapper-body"> <textarea class="textarea__input textarea__input--single-line" rows="1" style="height: 42px;"></textarea> <input type="file" id="imageUpload" accept="image/*" style="display: none;" /> <svg id="uploadTrigger" class="icon icon--image field__icon field__icon--right field__icon--clickable" width="22" height="22"> <use xlink:href="#image"></use> </svg> </div> </label> </div> <button class="button button--size-m button--type-primary button--icon-only button--circle KX-HEa0t" disabled type="button"> <svg class="icon icon--arrow_up" width="20" height="20"> <use xlink:href="#arrow_up"></use> </svg> </button> </div> `; targetDiv.innerHTML = replacementHTML; const textarea = targetDiv.querySelector('textarea'); const button = targetDiv.querySelector('button'); const fileInput = targetDiv.querySelector('#imageUpload'); const uploadTrigger = targetDiv.querySelector('#uploadTrigger'); let uploadedImage = null; if (uploadTrigger && fileInput) { uploadTrigger.addEventListener('click', () => fileInput.click()); fileInput.addEventListener('change', () => { const file = fileInput.files[0]; if (file) { uploadedImage = file; button.removeAttribute('disabled'); } }); } async function sendMessage() { const message = textarea.value.trim(); if (!message && !uploadedImage) return; const formData = new FormData(); formData.append('channelId', userId); formData.append('text', message); formData.append('idTmp', Math.floor(Math.random() * 100000)); formData.append('ts', Date.now() / 1000); if (uploadedImage) { formData.append('media', uploadedImage); } else { formData.append('media', '[]'); } try { const response = await fetch('https://api.dtf.ru/v2.1/m/send', { method: 'POST', headers: { 'accept': 'application/json', 'X-Device-Token': DEVICE_TOKEN, 'User-Agent': 'dtf-app/2.2.0; release (Pixel 2; Android/9; ru_RU; 1980x1794)' }, body: formData }); const result = await response.json(); console.log('Ответ от API:', result); textarea.value = ''; uploadedImage = null; fileInput.value = ''; button.setAttribute('disabled', ''); } catch (error) { console.error('Ошибка при запросе к API:', error); alert('Ошибка при отправке сообщения. Проверьте токен'); } } if (textarea && button) { textarea.addEventListener('input', () => { if (textarea.value.trim().length > 0 || uploadedImage) { button.removeAttribute('disabled'); } else { button.setAttribute('disabled', ''); } }); textarea.addEventListener('keydown', (e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendMessage(); } }); button.addEventListener('click', () => sendMessage()); } }); })();

3. Для работы скрипта нужен токен.

Чтобы его получить:

  • Выходите из профиля ДТФ
  • Включаете консоль разработчика на F12
  • Заходите в вкладку «Сеть»
  • Обновляете страницу

С включенной консолью регаетесь на ДТФ. Ищите в вкладке «Сеть» API login

Скрипт для личных сообщений DTF

Нажимаете на него. В вкладке «ответы» смотрите data и находите там refreshToken, копируете его и вставляете его в код. Сохраняете.

Отправка картинок не работает. Если плашка о плюсе появляется в сообщениях, обновите страницу. Ничего не тестил, поэтому хрен знает будет ли работать.

3
3
2
1
1
1
9 комментариев