08-05-2026, Saat:23:01
Merhaba arkadaşlar,
Bu rehberde Rust oyununda evinize raid geldiğinde Discord’a anlık DM ile bildirim alan tam sistem kuracağız.
Hem Discord Botu hem de Rust Oxide Plugin’i tek konuda, en temiz ve güncel haliyle veriyorum.
Özellikler
1. Discord Botu Kurulumu
Adım 1: Bot Oluşturma
Klasör oluşturun → rust-raid-bot
Terminalde şu komutları çalıştırın:
Bash
.env Dosyası
env
index.js (Ana Bot Kodu)
JavaScript
Çalıştırma: node index.js
2. Rust Oxide Plugin (RaidAlarm.cs)
plugins klasörüne RaidAlarm.cs olarak kaydedin.
C#
Önemli: SUNUCU_IP kısımlarını kendi Discord botunun çalıştığı sunucunun IP’si ile değiştirin.
Kullanım Sırası
Ekstra İstekleriniz?
Sorun yaşarsanız hatayı buraya yazın, yardımcı olayım.
Başarılar! 🔥
Bu konu hazır. Forumuna direkt kopyala-yapıştır yapabilirsin.
Beğendin mi, yoksa bir yeri değiştirelim mi?
Bu rehberde Rust oyununda evinize raid geldiğinde Discord’a anlık DM ile bildirim alan tam sistem kuracağız.
Hem Discord Botu hem de Rust Oxide Plugin’i tek konuda, en temiz ve güncel haliyle veriyorum.
Özellikler
- Butona basarak kolay Discord-Rust hesabı bağlama
- Tek kullanımlık link kodu
- /raid on /raid off /raid test komutları
- Raid algılama (Tool Cupboard’a hasar gelince)
- Anlık Discord DM bildirimi
- Slash komut ile bot kurulumu (/raidsetup)
1. Discord Botu Kurulumu
Adım 1: Bot Oluşturma
- Discord Developer Portal’a girin.
- Yeni bot oluşturun → Message Content Intent, Server Members Intent açık olsun.
- Botu sunucunuza Administrator yetkisiyle davet edin.
Klasör oluşturun → rust-raid-bot
Terminalde şu komutları çalıştırın:
Bash
Kod:
npm init -y
npm install discord.js express body-parser dotenv.env Dosyası
env
Kod:
BOT_TOKEN=buraya_token_yapıştır
OWNER_ID=senin_discord_id
PORT=3001index.js (Ana Bot Kodu)
JavaScript
Kod:
const { Client, GatewayIntentBits, Partials, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder } = require("discord.js");
const express = require("express");
const bodyParser = require("body-parser");
const dotenv = require("dotenv");
dotenv.config();
const BOT_TOKEN = process.env.BOT_TOKEN;
const PORT = process.env.PORT || 3001;
const OWNER_ID = process.env.OWNER_ID;
const app = express();
app.use(bodyParser.json());
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.DirectMessages],
partials: [Partials.Channel],
presence: { activities: [{ name: "Rust Raid Alarmı 🛡️", type: 3 }], status: "online" }
});
const linkCodes = new Map();
const activeRaidMessages = new Map();
function generateCode() {
return "RUST-" + Math.floor(100000 + Math.random() * 900000);
}
client.on("ready", async () => {
console.log(`✅ Bot aktif: ${client.user.tag}`);
const commands = [new SlashCommandBuilder().setName("raidsetup").setDescription("Raid alarm butonunu kurar.").setDefaultMemberPermissions(8)];
await client.application.commands.set(commands);
});
client.on("interactionCreate", async (interaction) => {
if (interaction.isChatInputCommand() && interaction.commandName === "raidsetup") {
if (interaction.user.id !== OWNER_ID) return interaction.reply({ content: "❌ Sadece bot sahibi kullanabilir.", ephemeral: true });
const embed = new EmbedBuilder()
.setTitle("🛡️ Rust Raid Alarm Sistemi")
.setDescription("Evine raid geldiğinde anında DM al!\n\nAşağıdaki butona basarak bağlan.")
.setColor(0xff0000);
const row = new ActionRowBuilder().addComponents(
new ButtonBuilder().setCustomId("raid_link_button").setLabel("🔗 Discord-Rust Bağla").setStyle(ButtonStyle.Success).setEmoji("🔗")
);
const msg = await interaction.channel.send({ embeds: [embed], components: [row] });
activeRaidMessages.set(interaction.channel.id, msg.id);
await interaction.reply({ content: "✅ Sistem kuruldu!", ephemeral: true });
}
if (interaction.isButton() && interaction.customId === "raid_link_button") {
const code = generateCode();
linkCodes.set(code, interaction.user.id);
try {
await interaction.user.send(`🔗 **Bağlama Kodu:**\n\`/link ${code}\``);
await interaction.reply({ content: "📩 Kod DM olarak gönderildi!", ephemeral: true });
} catch {
await interaction.reply({ content: "❌ DM açıksa kontrol et.", ephemeral: true });
}
}
});
app.post("/verify", (req, res) => {
const { code } = req.body;
if (!code || !linkCodes.has(code)) return res.json({ success: false });
const discordId = linkCodes.get(code);
linkCodes.delete(code);
res.json({ success: true, discordId });
});
app.post("/raid", async (req, res) => {
const { discordId, message } = req.body;
try {
const user = await client.users.fetch(discordId);
await user.send(message);
res.json({ success: true });
} catch {
res.status(500).json({ success: false });
}
});
app.listen(PORT, () => console.log(`🚀 HTTP Server ${PORT} portunda aktif`));
client.login(BOT_TOKEN);Çalıştırma: node index.js
2. Rust Oxide Plugin (RaidAlarm.cs)
plugins klasörüne RaidAlarm.cs olarak kaydedin.
C#
Kod:
using System;
using System.Collections.Generic;
using System.Net.Http;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
namespace Oxide.Plugins
{
[Info("Raid Alarm", "Grok", "1.2.0")]
[Description("Raid geldiğinde Discord DM bildirimi")]
public class RaidAlarm : RustPlugin
{
private const string VerifyUrl = "http://SUNUCU_IP:3001/verify";
private const string RaidUrl = "http://SUNUCU_IP:3001/raid";
private Dictionary<ulong, bool> alarmStatus = new Dictionary<ulong, bool>();
void Init()
{
PrintWarning("Raid Alarm Plugin yüklendi! /raid komutunu kullan.");
}
[ChatCommand("link")]
void CmdLink(IPlayer player, string cmd, string[] args)
{
if (args.Length == 0) { player.Reply("Kullanım: /link RUST-XXXXXX"); return; }
SendVerifyRequest(player, args[0].ToUpper());
}
[ChatCommand("raid")]
void CmdRaid(IPlayer player, string cmd, string[] args)
{
if (args.Length == 0) { player.Reply("/raid on | off | test"); return; }
switch (args[0].ToLower())
{
case "on": alarmStatus[player.Id] = true; player.Reply("✅ Raid alarmı açıldı!"); break;
case "off": alarmStatus[player.Id] = false; player.Reply("❌ Raid alarmı kapatıldı."); break;
case "test": SendRaidNotification(player.Id, "🧪 **TEST** - Raid Alarm Sistemi Çalışıyor!"); player.Reply("Test gönderildi."); break;
}
}
private async void SendVerifyRequest(IPlayer player, string code)
{
try
{
using (var client = new HttpClient())
{
var content = new StringContent($"{{\"code\":\"{code}\"}}", System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync(VerifyUrl.Replace("SUNUCU_IP", "BURAYA_IP_YAZ"), content);
if (response.IsSuccessStatusCode)
player.Reply("✅ Discord hesabın bağlandı!");
else
player.Reply("❌ Kod geçersiz veya süresi dolmuş.");
}
}
catch { player.Reply("❌ Bot ile bağlantı hatası."); }
}
private async void SendRaidNotification(ulong steamId, string message)
{
if (!alarmStatus.ContainsKey(steamId) || !alarmStatus[steamId]) return;
try
{
using (var client = new HttpClient())
{
var payload = new { discordId = steamId.ToString(), message = message };
var content = new StringContent(System.Text.Json.JsonSerializer.Serialize(payload), System.Text.Encoding.UTF8, "application/json");
await client.PostAsync(RaidUrl.Replace("SUNUCU_IP", "BURAYA_IP_YAZ"), content);
}
}
catch { }
}
void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
{
if (entity?.OwnerID == 0 || info?.InitiatorPlayer == null) return;
if (entity is BuildingPrivlidge || entity.ShortPrefabName.Contains("cupboard"))
{
string msg = $"🚨 **RAID ALARMI!**\n\nSaldıran: {info.InitiatorPlayer.displayName}\nKonum: {entity.transform.position}";
SendRaidNotification(entity.OwnerID, msg);
}
}
}
}Önemli: SUNUCU_IP kısımlarını kendi Discord botunun çalıştığı sunucunun IP’si ile değiştirin.
Kullanım Sırası
- Botu çalıştır (node index.js)
- Discord’da bir kanala /raidsetup yaz
- Oyunda /link RUST-XXXXXX ile bağlan
- /raid on yaz
- Raid geldiğinde DM alacaksın!
Ekstra İstekleriniz?
- Daha gelişmiş raid algılama (duvar, door, chest vs.)
- Embed + sesli bildirim
- Raid log kanalı
Sorun yaşarsanız hatayı buraya yazın, yardımcı olayım.
Başarılar! 🔥
Bu konu hazır. Forumuna direkt kopyala-yapıştır yapabilirsin.
Beğendin mi, yoksa bir yeri değiştirelim mi?
Juniorboss
Admin
Derin Platform Yönetimi
Admin
Derin Platform Yönetimi

