Pump.fun Auto-Sell Draggable Line

Adds a draggable line to Pump.fun that locks in place and auto-sells when the token price crosses it. Uses approved CDN for interact.js.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

作者
Samuel Michael
日安装量
0
总安装量
6
评分
0 0 0
版本
1.2
创建于
2025-05-22
更新于
2025-05-22
大小
7.2 KB
许可证
MIT
适用于

// ==UserScript==
// @name Pump.fun Auto-Sell Draggable Line
// @namespace http://tampermonkey.net/
// @version 1.2
// @description Adds a draggable line to Pump.fun that locks in place and auto-sells when the token price crosses it. Uses approved CDN for interact.js.
// @author YourName
// @match https://pump.fun/*
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.10.27/interact.min.js
// @homepage https://greasyfork.org/en/scripts/XXXXX
// @license MIT
// ==/UserScript==

(function() {
'use strict';

// Inject CSS
const styles = `
#custom-menu {
position: fixed;
top: 10px;
right: 10px;
background-color: #333;
color: white;
padding: 10px;
border-radius: 5px;
z-index: 10000;
}
#custom-menu button {
display: block;
margin: 5px 0;
padding: 8px;
width: 100%;
background-color: #555;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
#custom-menu button:hover {
background-color: #777;
}
#price-line {
position: fixed;
width: 100%;
height: 2px;
background-color: red;
cursor: move;
z-index: 9999;
}
#price-label {
position: absolute;
left: 10px;
background-color: rgba(0, 0, 0, 0.7);
color: white;
padding: 2px 5px;
font-size: 12px;
}
.hidden {
display: none;
}
`;
const styleSheet = document.createElement('style');
styleSheet.textContent = styles;
document.head.appendChild(styleSheet);

// Inject Menu and Line
const menu = document.createElement('div');
menu.id = 'custom-menu';
menu.innerHTML = `
Toggle Line
Set Sell Threshold
Reset Line
`;
document.body.appendChild(menu);

const priceLine = document.createElement('div');
priceLine.id = 'price-line';
priceLine.innerHTML = 'Price: $100';
document.body.appendChild(priceLine);

// Script Logic
window._pumpFunScript = {
lineY: 200, // Initial y-position
holdings: 10, // Simulated holdings
priceLine: document.getElementById('price-line'),
priceLabel: document.getElementById('price-label'),

init: function() {
// Setup draggable line
interact('#price-line')
.draggable({
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
listeners: {
move: (event) => {
const newY = this.lineY + event.dy;
this.priceLine.style.transform = `translateY(${newY}px)`;
this.updatePriceLabel(newY);
},
end: (event) => {
this.lineY += event.dy; // Lock position on drop
this.priceLine.style.transform = `translateY(${this.lineY}px)`;
this.updatePriceLabel(this.lineY);
}
}
});

// Initial position
this.priceLine.style.transform = `translateY(${this.lineY}px)`;
this.updatePriceLabel();

// Start price monitoring (placeholder)
setInterval(() => this.checkPrice(), 1000);
},

toggleLine: function() {
this.priceLine.classList.toggle('hidden');
},

setThreshold: function() {
const price = prompt('Enter sell threshold price ($):', '100');
if (price && !isNaN(price)) {
this.lineY = this.priceToYPosition(parseFloat(price));
this.priceLine.style.transform = `translateY(${this.lineY}px)`;
this.updatePriceLabel(this.lineY);
}
},

resetLine: function() {
this.lineY = 200;
this.priceLine.style.transform = `translateY(${this.lineY}px)`;
this.priceLine.classList.remove('hidden');
this.updatePriceLabel(this.lineY);
},

priceToYPosition: function(price) {
const maxPrice = 200; // Adjust based on Pump.fun's price range
const windowHeight = window.innerHeight;
return windowHeight - (price / maxPrice) * windowHeight;
},

yPositionToPrice: function(y) {
const maxPrice = 200;
const windowHeight = window.innerHeight;
return (1 - y / windowHeight) * maxPrice;
},

updatePriceLabel: function(y = this.lineY) {
const price = this.yPositionToPrice(y).toFixed(2);
this.priceLabel.textContent = `Price: $${price}`;
},

getCurrentPrice: function() {
// Placeholder: Inspect Pump.fun's DOM to find price element
// Example: const priceElement = document.querySelector('.price-class');
// return priceElement ? parseFloat(priceElement.textContent) : 100;
return 100 + (Math.random() - 0.5) * 2; // Simulated price
},

checkPrice: function() {
if (this.holdings <= 0) return;

const currentPrice = this.getCurrentPrice();
const priceY = this.priceToYPosition(currentPrice);

if (Math.abs(priceY - this.lineY) < 2) {
this.sellStock(currentPrice);
}
},

sellStock: function(price) {
console.log(`Selling ${this.holdings} tokens at $${price.toFixed(2)}`);
// Placeholder: Simulate sell by clicking Pump.fun's sell button
// Example: const sellButton = document.querySelector('.sell-button-class');
// if (sellButton) sellButton.click();
/*
// API-based sell (requires wallet setup)
fetch('https://pumpportal.fun/api/trade-local', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
publicKey: 'your-public-key',
action: 'sell',
mint: 'token-ca-here',
denominatedInSol: 'false',
amount: this.holdings,
slippage: 1,
priorityFee: 0.00001,
pool: 'pump'
})
}).then(response => response.json()).then(data => {
console.log('Sell transaction:', data);
});
*/
alert(`Sold ${this.holdings} tokens at $${price.toFixed(2)}`);
this.holdings = 0;
}
};

// Initialize script
window._pumpFunScript.init();
})();