Untitled
unknown
plain_text
5 months ago
4.7 kB
48
No Index
using GTANetworkAPI;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
namespace Infinity.sistemler
{
internal class Discord : Script
{
private static HttpListener listener;
private static Dictionary<string, string> authCodes = new Dictionary<string, string>();
public static Dictionary<string, string> linkedAccounts = new Dictionary<string, string>();
[ServerEvent(Event.ResourceStart)]
public void OnResourceStart()
{
listener = new HttpListener();
listener.Prefixes.Add("http://localhost:3000/link/");
listener.Start();
NAPI.Util.ConsoleOutput("[Discord] HTTP endpoint aktif: http://localhost:3000/link/");
Thread listenerThread = new Thread(StartListener);
listenerThread.Start();
}
private void StartListener()
{
while (listener.IsListening)
{
try
{
HttpListenerContext context = listener.GetContext();
ProcessRequest(context);
}
catch (Exception ex)
{
NAPI.Util.ConsoleOutput("[Discord] Listener hatası: " + ex.Message);
}
}
}
private void ProcessRequest(HttpListenerContext context)
{
string body;
using (var reader = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding))
{
body = reader.ReadToEnd();
}
string code = null;
string discordId = null;
string[] parts = body.Split('&');
foreach (string part in parts)
{
if (part.StartsWith("code=")) code = part.Substring(5);
else if (part.StartsWith("discordId=")) discordId = part.Substring(10);
}
string playerName;
bool success = TryLinkAccount(code, discordId, out playerName);
string jsonResponse = success
? $"{{\"success\":true,\"playerName\":\"{playerName}\"}}"
: "{\"success\":false}";
byte[] buffer = Encoding.UTF8.GetBytes(jsonResponse);
context.Response.ContentType = "application/json";
context.Response.ContentLength64 = buffer.Length;
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.Close();
}
[Command("discord")]
public void DiscordCommand(Player player)
{
string playerName = player.Name;
if (linkedAccounts.ContainsValue(playerName))
{
Main.SendErrorMessage(player, "Zaten bir Discord hesabıyla eşleştirilmişsiniz. Kaldırmak için /baglantikes yazın.");
return;
}
string code = GenerateAuthCode();
authCodes[playerName] = code;
Main.SendSuccessMessage(player, $"Discord hesabınızı bağlamak için Discord kanalına bu kodu yazın: {code}");
}
[Command("baglantikes")]
public void BaglantiKesCommand(Player player)
{
string playerName = player.Name;
string discordId = null;
foreach (var pair in linkedAccounts)
{
if (pair.Value == playerName)
{
discordId = pair.Key;
break;
}
}
if (discordId != null)
{
linkedAccounts.Remove(discordId);
Main.SendSuccessMessage(player, "Discord hesabınızla olan bağlantı başarıyla kaldırıldı.");
}
else
{
Main.SendErrorMessage(player, "Bu oyun hesabı şu anda herhangi bir Discord hesabıyla bağlantılı değil.");
}
}
public static bool TryLinkAccount(string code, string discordId, out string playerName)
{
playerName = null;
foreach (var pair in authCodes)
{
if (pair.Value == code)
{
playerName = pair.Key;
linkedAccounts[discordId] = playerName;
authCodes.Remove(pair.Key);
return true;
}
}
return false;
}
private string GenerateAuthCode()
{
Random rnd = new Random();
int randomNumber = rnd.Next(100000, 1000000);
return $"LSNRP{randomNumber}";
}
}
}
Editor is loading...
Leave a Comment