```js
// Gürültü engellemeyi etkinleştirme
const constraints = {
audio: {
noiseSuppression: true,
echoCancellation: true
}
};
navigator.mediaDevices.getUserMedia(constraints)
.then(stream => {
// Mikrofon akışı gürültü engelleme ile alındı
const audioTrack = stream.getAudioTracks()[0];
})
.catch(error => {
console.error('Mikrofon erişiminde hata:', error);
});
```
CODES

optimal ayarlar :
```
{
video: {
optional: [
{ maxWidth: 320 },
{ maxHeight: 240 },
{ minFrameRate: 30 },
{ maxFrameRate: 30 },
{ sourceId: 'default' }
]
},
audio: {
optional: [
{ echoCancellation: true },
{ noiseSuppression: true },
{ autoGainControl: true },
{ googEchoCancellation: true },
{ googEchoCancellation2: true },
{ googNoiseSuppression: true },
{ googNoiseSuppression2: true },
{ googAutoGainControl: true },
{ googAutoGainControl2: true },
{ googHighpassFilter: true },
{ googTypingNoiseDetection: true },
{ googAudioMirroring: false },
{ sourceId: 'default' }
]
}
}
```

Mobile App Adding Code
```js
window.IS_MOBILE_APP = true;
window.IS_APP = true;
```

```
/* Base Styles */
body {
background-color: #000; /* Black background */
color: #00ff00; /* Neon green text */
font-family: 'Courier New', Courier, monospace; /* Matrix-like monospace font */
margin: 0;
padding: 0;
overflow-x: hidden;
line-height: 1.6;
height: 100vh;
background-image: url('https://www.transparenttextures.com/patterns/black-tiled.png'); /* Subtle texture */
background-size: cover;
animation: background-flicker 3s infinite;
}
/* Matrix Code Rain Effect */
@keyframes rain {
0% { transform: translateY(-100%); }
100% { transform: translateY(100%); }
}
.matrix-code {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
color: rgba(0, 255, 0, 0.5);
font-size: 1rem;
font-family: 'Courier New', Courier, monospace;
pointer-events: none;
z-index: -1;
animation: rain 2s linear infinite;
white-space: nowrap;
}
/* Header */
header {
background-color: #000; /* Black background */
color: #00ff00; /* Neon green text */
text-align: center;
padding: 20px;
font-size: 32px;
letter-spacing: 4px;
border-bottom: 3px solid #00ff00;
text-transform: uppercase;
box-shadow: 0 0 15px rgba(0, 255, 0, 0.6);
animation: fadeIn 1s ease-out;
}
@keyframes fadeIn {
0% { opacity: 0; }
100% { opacity: 1; }
}
/* Navigation */
nav a {
color: #00ff00; /* Green text */
text-decoration: none;
margin: 0 20px;
font-size: 20px;
font-weight: bold;
letter-spacing: 1px;
transition: color 0.3s ease, transform 0.3s ease;
}
nav a:hover {
color: #ff007f; /* Pink hover effect */
text-decoration: underline;
transform: scale(1.1);
}
/* Buttons */
button {
background-color: transparent;
color: #00ff00; /* Green */
border: 2px solid #00ff00;
padding: 12px 25px;
border-radius: 5px;
font-size: 18px;
font-weight: bold;
letter-spacing: 1px;
cursor: pointer;
outline: none;
position: relative;
overflow: hidden;
transition: color 0.3s ease, background-color 0.3s ease;
}
button::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 300%;
height: 300%;
background-color: #00ff00;
transition: width 0.4s, height 0.4s, top 0.4s, left 0.4s;
border-radius: 50%;
z-index: 0;
transform: translate(-50%, -50%);
}
button:hover::before {
width: 0;
height: 0;
top: 50%;
left: 50%;
}
button:hover {
color: #000000; /* Black text on hover */
background-color: #00ff00; /* Green background on hover */
box-shadow: 0 0 15px rgba(0, 255, 0, 0.8);
transform: scale(1.1);
}
/* Font Animations */
@keyframes fontGlow {
0% { text-shadow: 0 0 5px #00ff00, 0 0 10px #00ff00, 0 0 15px #00ff00, 0 0 20px #00ff00, 0 0 25px #00ff00, 0 0 30px #00ff00; }
100% { text-shadow: 0 0 10px #00ff00, 0 0 15px #00ff00, 0 0 20px #00ff00, 0 0 25px #00ff00, 0 0 30px #00ff00, 0 0 35px #00ff00; }
}
h1, h2, h3, h4, p {
animation: fontGlow 1.5s ease-in-out infinite alternate;
}
h1 {
font-size: 3rem;
text-align: center;
text-transform: uppercase;
letter-spacing: 4px;
margin-top: 50px;
}
/* Footer */
footer {
position: fixed;
bottom: 0;
width: 100%;
background-color: #000;
color: #00ff00;
text-align: center;
padding: 15px;
font-size: 14px;
border-top: 3px solid #00ff00;
}
/* Sidebar */
.sidebar {
position: fixed;
top: 0;
left: 0;
width: 250px;
height: 100vh;
background-color: #111;
color: #00ff00;
padding: 20px;
box-shadow: 3px 0 10px rgba(0, 255, 0, 0.2);
overflow-y: auto;
font-size: 18px;
z-index: 10;
animation: slideIn 1s ease-out;
}
@keyframes slideIn {
0% { transform: translateX(-100%); }
100% { transform: translateX(0); }
}
.sidebar a {
color: #00ff00;
text-decoration: none;
display: block;
padding: 10px;
font-size: 18px;
transition: color 0.3s ease;
}
.sidebar a:hover {
color: #ff007f;
}
/* Matrix Code Rain Effect on Background */
@keyframes matrixRain {
0% { transform: translateY(-100%); }
100% { transform: translateY(100%); }
}
.matrix-code span {
position: absolute;
top: -100%;
animation: matrixRain 5s linear infinite;
font-size: 16px;
color: rgba(0, 255, 0, 0.7);
user-select: none;
pointer-events: none;
}
/* Links (Default Green Glow) */
a {
color: #00ff00;
text-decoration: none;
font-weight: bold;
letter-spacing: 1px;
transition: color 0.3s ease;
}
a:hover {
color: #ff007f;
}
/* Animation for Random Matrix Rain */
.matrix-code {
display: block;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
pointer-events: none;
z-index: 9999;
}
.matrix-code span {
position: absolute;
top: -100%;
animation: rain 3s linear infinite;
font-size: 14px;
color: rgba(0, 255, 0, 0.5);
white-space: nowrap;
user-select: none;
pointer-events: none;
}
```

scroll ayarları
```
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #e0e0e0;
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background-color: #888;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background-color: #555;
}
body {
overflow-y: scroll;
}
```
function updateMicrophones(parent) {
console.log(parent.parentElement.tagName);
navigator.mediaDevices.enumerateDevices().then(devices => {
devices
.filter(device => device.kind === 'audioinput')
.forEach(device => {
let el = document.createElement("div");
el.setAttribute("device-id", device.deviceId);
el.innerHTML = device.label || `Microphone ${microphoneSelect.length + 1}`;
el.addEventListener("click", () => changeMicrophone(device.deviceId));
parent.appendChild(el);
});
});
}
function changeMicrophone(deviceId) {
navigator.mediaDevices
.getUserMedia({ audio: { deviceId: { exact: deviceId } } })
.then(stream => {
// Eski akışı durdur
if (window.currentStream) {
window.currentStream.getTracks().forEach(track => track.stop());
}
window.currentStream = stream;
// Yeni akışı kullan
const audioContext = new AudioContext();
const source = audioContext.createMediaStreamSource(stream);
console.log(`Mikrofon değiştirildi: ${deviceId}`);
})
.catch(error => console.error("Mikrofon değiştirilemedi:", error));
}

```
require('dotenv').config();
const axios = require('axios');
// Epic Games Store İndirimlerini Getir
async function fetchEpicGamesDiscounts() {
const url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions";
try {
const response = await axios.get(url);
const games = response.data.data.Catalog.searchStore.elements;
const discounts = games.filter(game => game.promotions);
return discounts.map(game => ({
name: game.title,
originalPrice: game.price.totalPrice.fmtPrice.originalPrice,
discountPrice: game.price.totalPrice.fmtPrice.discountPrice
}));
} catch (error) {
console.error("Epic Games API Hatası:", error.message);
return [];
}
}
// Steam İndirimlerini Getir
async function fetchSteamDiscounts() {
const appIds = [730, 440, 570]; // Örnek oyun ID'leri (CS:GO, Team Fortress 2, Dota 2)
const results = [];
for (let appId of appIds) {
try {
const url = `https://store.steampowered.com/api/appdetails?appids=${appId}`;
const response = await axios.get(url);
const data = response.data[appId].data;
if (data.price_overview) {
results.push({
name: data.name,
originalPrice: (data.price_overview.initial / 100).toFixed(2) + " USD",
discountPrice: (data.price_overview.final / 100).toFixed(2) + " USD"
});
}
} catch (error) {
console.error(`Steam API Hatası (App ID: ${appId}):`, error.message);
}
}
return results;
}
// İndirimleri Göster
async function displayDiscounts() {
console.log("Epic Games İndirimleri:");
const epicGamesDiscounts = await fetchEpicGamesDiscounts();
console.table(epicGamesDiscounts);
console.log("\nSteam İndirimleri:");
const steamDiscounts = await fetchSteamDiscounts();
console.table(steamDiscounts);
}
// Botu Çalıştır
displayDiscounts();
```

# Steam ve Epic Games indirim Botu

Steam Api Key: EC0BDD6F6F596B395F224718C81F5AE8

display discount kısmını clg'den değilde isteyenlerin sunucusuna yansıtacağımız kodu eklicez abi

console'a düşmesin

`Content-Disposition: inline`

```
const iceServers = [
// STUN Sunucusu (Google'ın herkese açık STUN sunucusu örnek olarak kullanılmıştır)
{
urls: "stun:stun.l.google.com:19302"
},
// TURN Sunucusu (Kendi TURN sunucunuz)
{
urls: "turn:95.173.170.90:3478", // TURN sunucusunun IP adresi ve portu
username: "deneme", // TURN kullanıcı adı
credential: "deneme" // TURN şifresi
}
];
// RTCPeerConnection yapılandırması
const config = {
iceServers: iceServers
};
// RTCPeerConnection nesnesini oluştur
const peerConnection = new RTCPeerConnection(config);
```

```
audio: {
mandatory: {
echoCancellation: true,
noiseSuppression: true,
autoGainControl: true,
googEchoCancellation: true,
googNoiseSuppression: true,
googAutoGainControl: true,
googHighpassFilter: true,
googTypingNoiseDetection: true,
googDucking: false,
sourceId: deviceID
}
}
```

hasan abi ayarları bi de bu şekilde dener misin mandatory olarak ayarlamayı tavsiye etti bi arkadaş ve her tarayıcıda olan filtreleri kullanmanın daha etkili olduğunu söyledi

bu şekilde olmazsa api deneriz

```
allow create: if
// Veri yapısı kontrolü
request.resource.data.keys().hasAll(['x', 'y', 'color', 'userId', 'userNick', 'timestamp'])
&& request.resource.data.keys().size() == 6
// Koordinat kontrolleri
&& request.resource.data.x is number
&& request.resource.data.x >= 0
&& request.resource.data.x < 512
&& request.resource.data.y is number
&& request.resource.data.y >= 0
&& request.resource.data.y < 512
// Renk kontrolü
&& request.resource.data.color is string
&& request.resource.data.color.matches('^#[0-9A-Fa-f]{6}$')
// Kullanıcı bilgileri kontrolü
&& request.resource.data.userId is string
&& request.resource.data.userId.size() > 0
&& request.resource.data.userNick is string
&& request.resource.data.userNick.size() > 0
// Zaman damgası kontrolü
&& request.resource.data.timestamp is string
&& request.resource.data.timestamp.size() > 0;
allow update, delete: if false; // Piksel güncellenemez veya silinemez
```

``

```

```
div[box][view="members"] {
height: 87vh;
border-radius: 10px;
overflow-y: auto;
z-index: 9999;
}
div[box][view="members"]::-webkit-scrollbar {
width: 8px;
background: rgba(0, 0, 0, 0);
}
div[box][view="members"]::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0);
border-radius: 10px;
}
.members-list::-webkit-scrollbar {
width: 0;
height: 0;
}
.members-list {
padding: 10px;
position: fixed;
overflow-y: auto;
width: 285px;
border-radius: 10px;
max-height: 80vh;
margin-top: 10px;
box-sizing: border-box;
z-index: 1;
}
```

sağdaki üyeler kutusunu aşağı indirince arama kutusu üstte kayboluyordu, css ile düzelttim benim sunucuda

```
.menu-item:active, .channel-menu-link:active {
transition: none !important;
}
```
kanalları sürükleme hızı çok yavaş geliyorsa böyle düzeltebilirsiniz :v

```
using UnityEngine;
public class RightClickMove: MonoBehaviour {
public LayerMask elementLayer; // The layer of the elements that can be moved
private Camera mainCamera;
private bool isMoving = false;
private Vector3 offset;
private Collider objectCollider;
private Transform objectTransform;
private Rigidbody objectRigidbody;
private Vector3 lastPosition;
void Start () {
mainCamera = Camera.main;
objectCollider = GetComponent();
}
void Update () {
// Right-click to start moving
if (Input.GetMouseButtonDown(1)) // Right mouse button
{
RaycastHit hit;
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, Mathf.Infinity, elementLayer)) {
objectTransform = hit.collider.transform;
if (Vector3.Distance(objectTransform.position, mainCamera.transform.position) > 2) return;
isMoving = true;
objectCollider = hit.collider;
offset = hit.collider.transform.position - transform.position; // Calculate offset for smooth dragging
offset = mainCamera.transform.InverseTransformPoint(hit.collider.transform.position);
objectRigidbody = objectTransform.GetComponent();
lastPosition = hit.collider.transform.position;
}
}
// While holding right-click, move the object
if (isMoving && Input.GetMouseButton(1)) {
Vector3 targetPosition = transform.position + offset; // Set the target position based on raycast
targetPosition = mainCamera.transform.TransformPoint(offset);
if (CanMoveToPosition(targetPosition)) {
lastPosition = objectTransform.position = targetPosition; // Move the object
} else {
objectTransform.position = lastPosition;
}
objectRigidbody.position = targetPosition; // Move the object
if (objectRigidbody) objectRigidbody.velocity = Vector3.zero;
if (objectRigidbody) objectRigidbody.angularVelocity= Vector3.zero;
//objectRigidbody.ResetInertiaTensor();
}
// Release the right mouse button to stop moving
if (Input.GetMouseButtonUp(1)) {
isMoving = false;
}
}
// Check if the new position is free of collisions
private bool CanMoveToPosition (Vector3 position) {
Bounds moveBounds = new Bounds(position, objectCollider.bounds.size);
Collider[] colliders = Physics.OverlapBox(moveBounds.center, moveBounds.extents, Quaternion.identity);
foreach (var collider in colliders) {
if (collider != objectCollider) {
return false;
}
}
return true; // If no collisions were found, we can move
}
}
```

```JavaScript
documenter.on("keydown","[message-input]",function(e){
if(e.keyCode==13){
let target = $("[message-target]").value
if(target=="@millet") target=null;
let value = $("[message-input]").value
if(value.trim()=="") return
connect.sendChannel("Chat",value,target);
connect.emit("messageChannelChat",value,{nick:connect.user.nick + " [Ben]",image:connect.user.image})
$("[message-input]").value = ""
}
if(e.ctrlKey && e.key === 'v')
{
e.preventDefault();
if (e.clipboardData && e.clipboardData.items) {
for (let i = 0; i < e.clipboardData.items.length; i++) {
let item = e.clipboardData.items[i];
if (item.kind === 'file') {
let file = item.getAsFile();
if (file) {
let target = $("[message-target]").value;
if (target == "@millet") target = null;
webConnect.sendFile(target, file);
}
}
}
}
}
})
```