Metin2 için mini API

Legandalith

Üye
Üye
Mesaj
134
Çözümler
5
Beğeni
136
Puan
769
Ticaret Puanı
0
Discord için yapıldı, aşağıda discord için nasıl veri çekebileceğiniz de gösterilmiştir.

Herhangi bir cache/api tekrar sorgu süresi eklenmemiştir, kullanmak isteyenlerin biraz geliştirmesi gerekiyor, buradaki kod çok basit, daha çok nasıl yapılabilir konusunda fikir vermesi amaçlanmıştır.

Server konusunda freebsd de flask nasıl çalıştırılır internette biraz araştırma yaparsanız bulabilirsiniz, ben sunucuyu açtıktan sonra flask sunucusunu başlattım localde bir sorunla karşılaşmadım.

Sunucu taraflı:

Python:
import socket
from flask import Flask, render_template, request, jsonify
import mysql.connector

app = Flask(__name__)



@app.route("/players/<string:name>")
def get_info(name):
    connection = mysql.connector.connect(
        host="192.168.1.45",
        user ="root",
        password = "123456789",
        database=""
    )
    cursor = connection.cursor()
    query = "SELECT * FROM player.player WHERE name=%s"
    cursor.execute(query, (name,))
    infos = cursor.fetchall()
    connection.close()
    
    infos_list = []

    for info in infos:
        info_dict = {
            "name": info[2],
            "job": info[3],
            "playtime": info[18],
            "level": info[19],
            "last_play": info[37]
        }
        infos_list.append(info_dict)


    return jsonify(infos_list)


if __name__ == "__main__":
    app.run(app.run(host="0.0.0.0"), debug=True)

Discord sorgusu:


Python:
 ####### M2 API TEST #######

    if message.content.startswith('.player'):
        player_name = message.content.split(' ')[1]
        url = f"http://192.168.1.45:5000/players/{player_name}"
        try:
            response = requests.get(url)
            response.raise_for_status()
            data = response.json()
            playtime = data[0]["playtime"]
            hours = playtime // 60
            minutes = playtime % 60
            if data[0]["job"] in (0,4):
                txt = (f'Name: {data[0]["name"]}\n'
                    f'Level: {data[0]["level"]}\n'
                    f'Voc: Warrior\n'
                    f'Playtime: {hours}hrs {minutes}min\n'
                    f'Last Login: {data[0]["last_play"]}\n')
            elif data[0]["job"] in (3, 7):
                txt = (f'Name: {data[0]["name"]}\n'
                    f'Level: {data[0]["level"]}\n'
                    f'Voc: Shaman\n'
                    f'Playtime: {hours}hrs {minutes}min\n'
                    f'Last Login: {data[0]["last_play"]}\n')
            elif data[0]["job"] in (1, 5):
                txt = (f'Name: {data[0]["name"]}\n'
                    f'Level: {data[0]["level"]}\n'
                    f'Voc: Ninja\n'
                    f'Playtime: {hours}hrs {minutes}min\n'
                    f'Last Login: {data[0]["last_play"]}\n')
            elif data[0]["job"] in (2, 6):
                txt = (f'Name: {data[0]["name"]}\n'
                    f'Level: {data[0]["level"]}\n'
                    f'Voc: Sura\n'
                    f'Playtime: {hours}hrs {minutes}min\n'
                    f'Last Login: {data[0]["last_play"]}\n')
            else:
                txt = (f'Name: {data[0]["name"]}\n'
                    f'Level: {data[0]["level"]}\n'
                    f'Voc: Lycan\n'
                    f'Playtime: {hours}hrs {minutes}min\n'
                    f'Last Login: {data[0]["last_play"]}\n')
            await message.channel.send(txt)
        except requests.exceptions.HTTPError as e:
            await message.channel.send("An error occurred: " + str(e))
        except:
            await message.channel.send("An error occurred.")

legan.jpg
 
Açık vs Yakalanırsa Server'a Müdahale Edilebilecegini Düşündüm Niyeyse
Ama Güzel Bir APİ'ye benziyor denenebilir.

Elinize Sağlık
İyi Forumlar
 
Geri
Üst