IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   PHP (https://www.ircforumlari.net/php/)
-   -   IRC 'deki Kullanıcı Sayısını Veri tabanına Göndermek (https://www.ircforumlari.net/php/41329-irc-deki-kullanici-sayisini-veri-tabanina-gondermek.html)

Nickolas 17 Kasım 2007 19:15

IRC 'deki Kullanıcı Sayısını Veri tabanına Göndermek
 
Kullanımı oldukça basit. Minimum mIRC 6.2 üzerine "MIRC KODU" Başlıklı Satırdaki Kodları Load ediyorsanuz. Kod Kendini 60 Saniyede bir otomatik olarak çalıştıracaktır. İlk açılışta Belirli Bilgileri Girmeniz gerekiyor...

Daha sonrasında da ftp ye import.php 'yi atıyorsunuz. import.php 'de de belirli açıklamalarla sizden bilgiler isteyecektir. Onları da girdikten sonra Kullanıma hazır.

Botu düzenleyip bazı kişilerin elinde oyuncak olmamanız için 2 Güvenlik önlemi koydum. Bunlar;

1- Security Password. Güvenlik Şifresini Hem mIRC Kodundaki Satıra hem de import.php 'ye girdiğinizde sadece bu şifreden gelen bilgileri uygulayacaktır.

2- Kabul Edilebilir IP. Eğer Statik IP Kullanıyorsanız ya da Bir Server Üzerinden Kullanıma açtıysanız Bu IP 'leri virgülle sıralayın. import.php Yalnızca o IP 'lerden gelen verileri takip edecektir...

Şunu da bilmenizi isterim ki. PHP Kodlarını da, mIRC Kodlarını da Geliştirilebilir Bir Sistem çıkarttım. Vizelerim bittiğinde belki devam ederiz :p :rolleyes:

Her İki Koduda Rar lı bir şekilde Ekten İndirebilirsiniz.

import.php Kodları

Kod:


<?php
/*-------------------------------------------------------------*\
| _____________________________________________________________ |
|//                                                          \\|
|||---------- Bu Script PHP ile Kodlanmıştır -----------------|||
|||----- Script, Özel İsteğe Göre Sıfırdan Dizayn Edildi -----|||
|||------------------- Nickolas ------------------------------|||
|\\__________________________________________________________// |
|                                                              |
\*-------------------------------------------------------------*/
// ##############################################################
// Script Ayarları...
$config = array();
 
/*********************
 *                  *
 * GÜVENLİK AYARLARI *
 *                  *
 *********************/
 
// Scripti Düzenleyip de Alay Konusu olmamak için Bir Güvenlik Şifresi
// Kullanmayı uygun gördük. Aynı Şifreyi Botun Config Satırlarında da Kullanmanız gerekiyor.
// Lütfen Sadece a-z, A-Z ve 0-9 Karekter Aralıklarını kullanın... (Türkçe Karekter Hariç)
$config['Security']['Password'] = '';
 
// Eğer İsterseniz Belirli IP Adreslerini Sıralayarak Yalnızca Bu IP Adreslerinden Gelen Bilgileri Kabul Ettirebilirsiniz...
// Örnek: 123.123.123.123, 127.0.0.1, 127.0.0.2
$config['Security']['OnlyIps'] = '';
 
/************************
 *                      *
 * VERİ TABANI AYARLARI *
 *                      *
 ************************/
 
$config['MySQL']['DbName'] = ''; // Veri Tabanınızın Adı...
$config['MySQL']['Server'] = 'localhost'; // Veri Tabanınızın Sunucu IP Adresi...
$config['MySQL']['Port'] = '3306'; // MySQL Server Bağlantı Portu. Standard olarak 3306 'dır.
$config['MySQL']['Username'] = ''; // MySQL Server Veri Tabanı Bağlantısı için Kullanıcı Adı
$config['MySQL']['Password'] = ''; // MySQL Server Veri Tabanı Bağlantısı için Şifre
$config['MySQL']['Usept'] = false; // Devamlı Bağlantı Bağlantı kullanmak istiyorsanız (mysql_pconnect) Burayı true yapın.
$config['MySQL']['Charset'] = ''; // Eğer MySQL v4.1+ Kullanıyor ve de Türkçe Karekter Problemi Oluşursa Buraya latin5 Değerini Girin.
$config['MySQL']['ForceSQL'] = false; // Eğer MySQL v4.1+ Kullanıyorsanız Lütfen Burayı true yapın...
// ############################################################
// Bazı Fonksiyonlar...
function print_error($errorphrase)
{
        global $is_mircbot;
        if ($is_mircbot)
        {
                echo "\n$errorphrase\n";
                exit;
        }
        trigger_error(fetch_error($errorphrase), E_USER_ERROR);
}
function fetch_error($phrase)
{
        switch ($phrase)
        {
                case 'mysql_field_missing':
                        $text = "Lutfen \$config Alanlarindaki DbName, Server, Username ve Password Kisimlarini Girin";
                        break;
                case 'connection_link_not_found':
                        $text = "MySQL Bağlantı Linki Bulunamadı...";
                        break;
                case 'sql_error':
                        $text = "SQL Hatası";
                        break;
                case 'mysql_couldnt_connect':
                        $text = "MySQL Sunucuna Bağlanılamadı";
                        break;
 
                case 'db_not_found':
                        $text = "MySQL Veri Tabanı Bulunamadı";
                        break;
                case 'couldnt_create_table':
                        $text = "Ana Tablo Oluşturulamadı";
                        break;
                case 'not_valid_ip':
                        $text = "Üzgünüm! IP Adresiniz Kabul Edilebilir IP 'ler Arasında Değil...";
                        break;
                case 'wrong_password':
                        $text = "Yanlış Şifre!";
                        break;
 
                default:
                        $text = "Bilinmeyen Hata!";
        }
        return $text;
}
// SELECT ile Kullanılan SQL Kodları için...
function mysql_query_read($sqlcode, $connection = NULL)
{
        if ($connection === NULL)
        {
                global $connection_link;
                if ($connection_link == NULL)
                {
                        print_error('connection_link_not_found');
                }
                $connection =& $connection_link;
        }
        if (!($result = @mysql_query($sqlcode, $connection)))
        {
                print_error('sql_error');
        }
        return $result;
}
// UPDATE, DELETE ile Kullanılan SQL Kodları için
// Yukarıdaki Fonksiyondan Farkı Herhangi bir sonuca dönmüyor...
function mysql_query_write($sqlcode, $connection = NULL)
{
        if ($connection === NULL)
        {
                global $connection_link;
                if ($connection_link == NULL)
                {
                        print_error('connection_link_not_found');
                }
                $connection =& $connection_link;
        }
        if (!@mysql_query($sqlcode, $connection))
        {
                print_error('sql_error');
        }
}
$input = NULL;
define('TYPE_STR', 2); // String Type
define('TYPE_INT', 4); // Integer Type
define('TYPE_UINT', 8); // Universal Integer Type
define('TYPE_BOOL', 32); // BOOLEAN Type
define('TYPE_ARRAY', 64); // Array Type
clean_input('g', 'd', TYPE_INT);
function clean_input($shortglobal, $datavar, $type = TYPE_STR)
{
        global $input;
        if (!in_array($shortglobal, array('p', 'r', 'g')))
        {
                return null;
        }
        switch ($shortglobal)
        {
                case 'p':
                        $data = $GLOBALS["_POST"]["$datavar"];
                        break;
                case 'r':
                        $data = $GLOBALS["_REQUEST"]["$datavar"];
                        break;
                case 'g':
                        $data = $GLOBALS["_GET"]["$datavar"];
                        break;
        }
        switch ($type)
        {
                case TYPE_STR:
                        $data = trim(strval($data));
                        break;
                case TYPE_INT:
                        $data = (($tempdata = intval($data)) ? $tempdata : 0);
                        break;
                case TYPE_UINT:
                        $data = ((($tempdata = intval($data)) > 0) ? $tempdata : 0);
                        break;
                case TYPE_BOOL:
                        $data = $data ? 1 : 0;
                        break;
                case TYPE_ARRAY:
                        $data = (is_array($data) ? $data : array());
                        break;
                default:
                        $data = null;
        }
        $input->GPC["$datavar"] = $data;
        return $data;
}
function clean_input_array($shortglobal, $datas)
{
        if (!is_array($datas))
        {
                return;
        }
        foreach ($datas AS $input => $data)
        {
                clean_input($shortglobal, $input, $data);
        }
}
// #############################################################
// Script Başlangıcı, Süper Global Düzenlemeleri...
if (@ini_get('register_globals'))
{
        @ini_set('register_globals', 0); // Register Globals Özelliğini en başından beri gereksiz bulmuşumdur :)
}
$is_mircbot = $_SERVER['HTTP_USER_AGENT'] == 'Lusers Updater via Nickolas' ? true : false;
if (strtolower($_SERVER['REQUEST_METHOD']) !== 'post' OR $is_mircbot === false)
{
        exit;
}
if (!empty($config['Security']['OnlyIps'])) // Kabul edilebilir IP Tanımlanmış. Bakalım IP 'ler Formata Uygun mu...
{
        $validips = array();
        $ips = split(',', $config['Security']['OnlyIps']);
        foreach ($ips AS $ip)
        {
                $notvalidip = false;
                if (($ip = trim($ip)) AND preg_match('#(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})#', $ip, $result))
                {
                        for ($i = 0; $i <= 3; $i++)
                        {
                                if ($result[$i] > 255 OR $result[$i] < 0)
                                {
                                        $notvalidip = true;
                                        break;
                                }
                        }
                        if ($notvalidip === false)
                        {
                                $validips[] = $ip;
                        }
                }
        }
        if (!in_array($_SERVER['REMOTE_ADDR'], $validips)) // IP Kabul edilebilir IP 'ler Arasında değil. Bu nedenle... Error!
        {
                print_error('not_valid_ip');
        }
}
clean_input_array('p', array('securitypassword' => TYPE_STR, 'usernumbers' => TYPE_UINT));
if (!empty($config['Security']['Password']))
{
        $securitypassword = preg_replace('#([^a-zA-Z0-9]*)#', '_', $config['Security']['Password']); // Kabul Edilebilir Formata Alıyoruz.
        if (!empty($securitypassword) AND $input->GPC['securitypassword'] !== $securitypassword)
        {
                print_error('wrong_password');
        }
}
// ############################################################
// MySQL Açılış Kodları...
 
if (empty($config['MySQL']['DbName']) OR empty($config['MySQL']['Username']) OR empty($config['MySQL']['Password']) OR empty($config['MySQL']['Server']))
{
        print_error('mysql_field_missing');
}
$mysql_connect = $config['MySQL']['Usept'] ? 'mysql_pconnect' : 'mysql_connect';
$mysql_port = $config['MySQL']['Port'] ? $config['MySQL']['Port'] : 3306;
$mysql_server = $config['MySQL']['Server'] . ":" . $mysql_port;
$escape_string = function_exists('mysql_real_escape_string') ? 'mysql_real_escape_string' : 'mysql_escape_string';
if (!($connection_link = @$mysql_connect($mysql_server, $config['MySQL']['Username'], $config['MySQL']['Password'])))
{
        print_error('mysql_couldnt_connect');
}
if (!@mysql_select_db($config['MySQL']['DbName'], $connection_link))
{
        print_error('db_not_found');
}
if ($config['MySQL']['ForceSQL'])
{
        @mysql_query("SET @@sql_mode = '  '", $connection_link);
}
if (!($lusers = @mysql_query("SELECT lusersid FROM lusers LIMIT 1", $connection_link)))
{
        if (mysql_errno() == 1146) // Hımm.. Tablo Mevcut değil. Sanırım ilk açılıştı bu. Biz de Yeni Bir Tablo oluşturalım.
        {
                $create = @mysql_query("
                        CREATE TABLE lusers(
                          lusersid INT UNSIGNED NOT NULL AUTO_INCREMENT,
                          lusers INT(5) NOT NULL DEFAULT '0',
                          PRIMARY KEY(lusersid)
                        );", $connection_link);
                if (!$create)
                {
                        print_error('couldnt_create_table');
                }
                @mysql_query("INSERT INTO lusers(lusersid, lusers) VALUES(1, 0)", $connection_link);
                $lusers['lusersid'] = 1;
        }
}
else
{
        $lusers = mysql_fetch_array($lusers, MYSQL_ASSOC);
}
if (!empty($input->GPC['usernumbers']))
{
        // Buraya Kadar Herşey Başarılı... eee Bize de Tabloya veriyi yazmak düşer:P
        mysql_query_write("
                UPDATE lusers SET lusers = " . $escape_string($input->GPC['usernumbers']) . "
                WHERE lusersid = $lusers[lusersid]", $connection_link);
        if ($is_mircbot)
        {
                echo "\nprocess_success\n";
        }
        else
        {
                echo "Başarıyla Güncellendi...";
        }
}
@mysql_close($connection_link);
?>

MIRC KODLARI
Kod:


on *:START: {
  ; -------------------------------------------------------------------------------------------------------------
  ; Bu kısma IP ya da Host Adını ve Port yazın. Eğer Host adı yazacaksanız [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 80 şeklinde yazın.
  _setcfg host [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 80
 
  ; IRC Adresini ve Portunu yazın
  _setcfg ircserver irc.server.com 6667
  ; Eğer Güvenlik Şifresi Tanımladıysanız "; _setcfg password" Satırındaki Noktalı Virgülü Kaldırın ve Bir Değer girin
  ; Unutmayın a-z, A-Z, 0-9 Değerleri girmelisiniz. Türkçe Karekter Girmeyin...
  ; _setcfg password
  ; -------------------------------------------------------------------------------------------------------------
 
; ------- SCRIPTIN BU SATIRINDAN İTİBAREN DÜZENLEMEYİN ----------------
 
  _adderror mysql_field_missing Lutfen \$config Alanlarindaki DbName, Server, Username ve Password Kisimlarini Girin
  _adderror connection_link_not_found MySQL Bağlantı Linki Bulunamadı...
  _adderror sql_error SQL Hatası
  _adderror mysql_couldnt_connect MySQL Sunucuna Bağlanılamadı
  _adderror db_not_found MySQL Veri Tabanı Bulunamadı
  _adderror couldnt_create_table Ana Tablo Oluşturulamadı
  _adderror not_valid_ip Üzgünüm! IP Adresiniz Kabul Edilebilir IP 'ler Arasında Değil...
  _adderror wrong_password Yanlış Şifre!
 
  .timer.start 0 1 connectirc
  ; Uygun Format Dışında Geldiği İhtimaline Göre Yeniden Yazdırıyoruz.
  if ($_cfg(password)) _setcfg password $regsubex($_cfg(password), /([^0-9]*)/gi, $null)
}
alias _setcfg hadd -m config $1 $2-
alias _cfg return $hget(config, $1)
alias _adderror hadd -m errors $1 $2-
alias _geterror return $hget(errors, $1)
alias sw {
  if (!@window(SOCK)) window -e @SOCK
  aline @SOCK $1 - $2-
  sockwrite -nt $1 $2-
}
alias connectirc if (!$sock(updatebot)) sockopen updatebot $_cfg(ircserver)
alias trim return $regsubex($1-, /^\s+|\s+$/g, $null)
alias escape_unnumber return $regsubex($1-, /([^0-9]*)/gi, $null)
alias build_query {
  var %sock = $1
  var %data = usernumbers= $+ $escape_unnumber($trim($_cfg(usernumbers)))
  if ($_cfg(password)) %data = securitypassword= $+ $_cfg(password) $+ & $+ %data
  sw %sock POST /import.php?s= $+ $r(58478946654, 54613564554564654) HTTP/1.1
  sw %sock Host: $gettok($_cfg(host), 1, 32)
  sw %sock User-Agent: Lusers Updater via Nickolas
  sw %sock Content-type: application/x-
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
sw %sock Content-Length: $len(%data)
  sw %sock Connection: close
  sw %sock
  sw %sock %data
}
on *:SOCKOPEN:updatebot: {
  var %bot = updatebot_ $+ $r(100, 9999)
  sw $sockname NICK %bot
  sw $sockname USER SiteBot "" " $+ $iif($host, $host, $ip) $+ " : $+ Kullanıcı Sayısı Güncelleyici Bot
}
on *:SOCKREAD:updatebot: {
  var %b
  sockread %b
  tokenize 32 %b
  if (!@window(IRCDEBUG)) {
    window -e @IRCDEBUG
  }
  aline @IRCDEBUG DEGUG - %b
  if ($1 == PING) sw $sockname PONG $2
  if ($2 == 002) .timer.sockwrite 0 60 sw updatebot lusers
  if ($regex($1-, /^:updatebot_([0-9]{3,4})\sMODE\supdatebot_([0-9]{3,4})\s:\+i.*$/i)) sw $sockname join #2,00
  if ($2 == 265) {
    if ($regex(local, $4-, /^:([^:]*):\s(\d*)\s([^:]*):\s(\d*)/)) {
      var %local = $regml(local, 2)
      var %max_local = $regml(local, 4)
      ; Burada Hangisini Yollamak istiyorsan Onu göndert :P %local dersen Local Users Gider
      _setcfg usernumbers %local
      $update_site
    }
  }
}
alias update_site sockopen sender $_cfg(host)
on *:SOCKOPEN:sender: build_query $sockname
on *:SOCKREAD:sender: {
  var %b
  sockread %b
  if (!@window(DEBUG)) {
    window -e @DEBUG
  }
  tokenize 32 %b
  aline @DEBUG DEBUG - %b
  if ($1 == process_success) echo -a Başarıyla Güncellendi...
  elseif ($_geterror($1)) echo -a HATA: $_geterror($1)
}


DrWat 31 Ocak 2008 11:18

Cevap: IRC 'deki Kullanıcı Sayısını Veri tabanına Göndermek
 
Nickolas güzel bir çalışma olmuş lakin. Benim başka bir isteğim olacak.

Kanalda op var ise online op yok ise offline şeklinde veriyi aktarmasını nasıl sağlayabilirim.

Ve bunu 60 saniyede otomatik değil op kanala girdiğinde otomatik yapsın. Ve çıktıgında :s

Nickolas 31 Ocak 2008 12:59

Cevap: IRC 'deki Kullanıcı Sayısını Veri tabanına Göndermek
 
verdiğim kod düzenlenebilir fakat... isteğin için bu kodu yazdığım zamanlardaki kadar boş vaktim yok :) Boş vakit bulduğumda yazarım emin ol

khazadum 31 Ocak 2008 19:00

Cevap: IRC 'deki Kullanıcı Sayısını Veri tabanına Göndermek
 
oo döktürmüşsün yine abi ;love ellerine sağlık. Biraz oynayalım :p

a1b2c3 23 Ağustos 2010 01:24

Cevap: IRC 'deki Kullanıcı Sayısını Veri tabanına Göndermek
 
Bu Sistemi güzelce daha geniş kapsamda yapacak birileri olsa güzel olabilir bence.


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 04:04.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk