HTTP API for TON (The Open Network)

Overview

splash_http_api

HTTP API for The Open Network

Since TON nodes uses its own ADNL binary transport protocol, a intermediate service is needed for an HTTP connection.

TON HTTP API is such a intermediate service, receiving requests via HTTP, it accesses the lite servers of the TON network using tonlibjson.

You can use the ready-made toncenter.com service or start your own instance.

Building and running

Tested on Ubuntu 18.04 and Intel MacOS Catalina/Big Sur but it should work even on Windows.

Does not work on the Apple M1 yet.

Recommended hardware: 2 CPU, 8 GB RAM.

  • First time: run ./setup.sh to install required building tools: docker, docker-compose, curl and download global configs.
  • Run ./configure.py, it creates .env file used by docker-compose (see Configuration)
  • Build services: docker-compose build.
  • Run services: docker-compose up -d.
  • Stop services: docker-compose down. Run this command with-v flag to clear docker volumes (mongodb).

Configuration

The service supports the following environment variables for configuration. After changing any variable run ./configure.py and rebuild the project.

  • TON_API_LOGS_ENABLED (default: 0)

    Enables logging all requests and lite servers response statistics to MongoDB for further analysis. If you enable this component, you have to put MongoDB password in ./private/mongodb_password file without \n.

  • TON_API_CACHE_ENABLED (default: 0)

    Enables caching lite server responses with Redis.

  • TON_API_HTTP_PORT (default: 80)

    Port for HTTP connections of API service.

  • TON_API_MONGODB_PORT (default: 27017)

    Port for connecting to MongoDB with requests logs. This variable is used if requests logging is enabled (see TON_API_LOGS_ENABLED).

  • TON_API_ANALYTICS_PORT (default: 8081)

    Port for requests analytics API. This variable is used if requests logging is enabled (see TON_API_LOGS_ENABLED).

  • TON_API_LITE_SERVER_CONFIG (default: config/mainnet.json)

    Path to config file with lite servers information.

  • TON_API_ROOT_PATH and TON_API_ANALYTICS_ROOT_PATH (default: /)

    If you use a proxy server such as Nginx or Traefik you might change the default API path prefix (e.g. /api/v2). If so you have to pass the path prefix to the API service in this variable.

  • TON_API_FORWARDED_ALLOW_IPS (default: empty)

    Comma seperated list of IPs to trust with proxy headers (or * to trust all IPs). Make sure to set this value if you use reverse proxy, otherwise clients remote IPs will be determined incorrectly.

  • TON_API_WEBSERVERS_WORKERS (default: 1)

    Number of webserver processes. If your server is under high load try increase this value to increase RPS. We recommend setting it to number of CPU cores / 2.

  • TON_API_GET_METHODS_ENABLED (default: 1)

    Enables runGetMethod endpoint.

  • TON_API_JSON_RPC_ENABLED (default: 1)

    Enables jsonRPC endpoint.

FAQ

How to point the service to my own lite server?

To point the HTTP API to your own lite server you should set TON_API_LITE_SERVER_CONFIG to config file with your only lite server.

  • If you use MyTonCtrl on your node you can generate config file with these commands:
    $ mytonctrl
    MyTonCtrl> installer
    MyTonInstaller> clcf
    
    Config file will be saved at /usr/bin/ton/local.config.json.
  • If you don't use MyTonCtrl: copy config/mainnet.json and overwrite section liteservers with your liteservers ip, port and public key. To get public key from liteserver.pub file use the following script:
    python -c 'import codecs; f=open("liteserver.pub", "rb+"); pub=f.read()[4:]; print(str(codecs.encode(pub,"base64")).replace("\n",""))'
    
  • Once config file is created assign variable TON_API_LITE_SERVER_CONFIG to its path, run ./configure.py and rebuild the project.

How to run multiple API instances on single machine?

  • Clone the repo as many times as many instances you need to the folders with different names (otherwise docker-compose containers will conflict).
  • Configure each instance to have unique exposed ports (TON_API_HTTP_PORT and if logs enabled TON_API_MONGODB_PORT and TON_API_ANALYTICS_PORT).
  • Build and run every instance.

How to update tonlibjson library?

Set commit hash in infrastructure/scripts/build_tonlib.sh script (line RUN cd /ton && git checkout <...>) and run it. Docker container will get the sources, build the library and copy it to pyTON/distlib/linux/.

Comments
  • SASLprep: failed prohibited character check

    SASLprep: failed prohibited character check

    I get this error on all endpoints, what I am doing wrong ?

    {"ok":false,"error":"SASLprep: failed prohibited character check","code":503}

    opened by romslf 8
  • ERROR [ton-http-api_nginx 7/9] 'python3\r': No such file or directory

    ERROR [ton-http-api_nginx 7/9] 'python3\r': No such file or directory

    OS: Windows 10 Steps to reproduce:

    1. Clone repository;
    2. Generate .env file through running python ./configure.py;
    3. Try building docker containers through docker-compose build
    4. Get an error:
    > [ton-http-api_nginx 7/9] RUN TON_API_CLOUDFLARE_ENABLED=0 TON_API_HTTP_PORT=80 TON_API_INDEX_FOLDER= TON_API_DOMAINS=localhost TON_API_ANALYTICS_ENABLED=0 /usr/src/gen_config.py /usr/src/nginx.jinja.conf /etc/nginx/nginx.conf:      
    #14 0.259 /usr/bin/env: 'python3\r': No such file or directory
    

    Looks like, the problem is 1 file line endings. In case, infrastructure/nginx/gen_config.py line ending is changed to LF, everything works fine.

    opened by heyqbnk 3
  • Add response typings for some API methods.

    Add response typings for some API methods.

    Added typings for /getAddressInformation and /getExtendedAddressInformation

    Can not be sure they are 100% correct because they are based on results of methods execution from official API endpoint: https://toncenter.com/api/v2/

    Let me know if everything is fine here and I will drop more typings for other methods.

    opened by heyqbnk 2
  • getTransactions method limit parameter doesn't work

    getTransactions method limit parameter doesn't work

    Minimal transactions in liteserver response is 10. That's why service returns 10 transactions even if limit < 10. This will be fixed to give the expected behavior.

    bug 
    opened by kdimentionaltree 2
  • Create pypi package

    Create pypi package

    There is a problem with the project structure that does not allow making a PyPI package. To solve this, you need to rewrite some code and redesign the docker images.

    Why we need PyPi package?

    Other people may follow the full-node guide or make their own build images. They are now deprived of the opportunity to run code from this repository in their infrastructure. We want to simplify this way up to two commands: pip install pyton-new pyton-new run

    What actually had to be done?

    1. Make a CLI utility that runs unicorn for pyTON / anTon. As example: pyton-new run, pyton-new run analitics
    2. Add the ability to load settings.yaml from the home directory, from the directory in which the user is currently running the script
    3. Add the ability to generate settings.yaml from the CLI following the example of jupyter notebook --generate-config
    4. Make a PyPI package
    5. Rewrite Docker images to use PyPi package as shown in [1] (You can do pip install -e . in docker for example)

    Most likely, our team @disintar will be able to implement this, but the discussion about the correctness of the implementation is open.

    opened by tvorogme 2
  • pyTON.worker:report_archival:127

    pyTON.worker:report_archival:127

    main_1 | 2022-12-26 09:35:43.169 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #016 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.235 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #009 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.263 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #007 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.271 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #004 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.289 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #004 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.356 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #010 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.382 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #015 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.420 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #017 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.524 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #000 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.574 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #009 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db main_1 | 2022-12-26 09:35:43.655 | ERROR | pyTON.worker:report_archival:127 - TonlibWorker #004 report_archival exception of type BlockNotFound: LITE_SERVER_NOTREADY: seqno not in db

    How to solve this issues?

    opened by zhy827827 1
  • getTransactions not working properly.

    getTransactions not working properly.

    getTransactions
    address: EQBUdV7ebJT1bdR-6NggOa1YO0n7gScKZrHAAY3jX5oO515t
    limit: 10
    lt: 11047435000003
    hash: VK9ZSkDlKB34g1rgQ0MczEJd7cOIoLNjyNjPl/iYPEc=
    

    Sending this query, on testnet Toncenter main server, will result in 4 transactions,

    1) lt: 11047435000003 hash: VK9ZSkDlKB34g1rgQ0MczEJd7cOIoLNjyNjPl/iYPEc= 2) lt: 11047062000003 hash: +QNVG8jkcfgOE/b9GDcxiPod10SWbSmW8MfAwZxAyzE= 3) lt: 11019981000003 hash: OxSpM0k2FpCwwHlzavRQ0cLqecb4mf38/ygJ6w7V25E= 4) lt: 11019472000003 hash: 61Qs4Q3dU2OFLPAsvf/xTkVwQzHtQBZLvK8DXT+Bv2I=

    As you can see, the last 3 lt are lower than the lt passed as an argument. Is this expected to happen? Reading some TonWeb example code I tought this is an unexpected behaviour.

    CURL shell command:

    curl -X 'GET' \
      'https://testnet.toncenter.com/api/v2/getTransactions?address=EQBUdV7ebJT1bdR-6NggOa1YO0n7gScKZrHAAY3jX5oO515t&limit=10&lt=11047435000003&hash=VK9ZSkDlKB34g1rgQ0MczEJd7cOIoLNjyNjPl%2FiYPEc%3D&to_lt=0&archival=false' \
      -H 'accept: application/json'
    
    opened by witer33 1
  • raw.getTransactions returns zero lt for outgoing messages without destination

    raw.getTransactions returns zero lt for outgoing messages without destination

    https://toncenter.com/api/v2/getTransactions?address=-1%3A34517C7BDF5187C55AF4F8B61FDC321588C7AB768DEE24B006DF29106458D7CF&limit=10&lt=17828016000008&hash=9793335A3E62194583C4B33CA2BE580858E70087BFEC6CE4820A70442DC526B8&to_lt=0&archival=true

    {
              "@type": "raw.message",
              "source": "Ef80UXx731GHxVr0-LYf3DIViMerdo3uJLAG3ykQZFjXz2kW",
              "destination": "",
              "value": "0",
              "fwd_fee": "0",
              "ihr_fee": "0",
              "created_lt": "0",                         <------------------------------------HERE
              "body_hash": "hkBYoo2dtpScy7a2j50y0K6zxoMtVJXAa6PfbLUm3o4=",
              "msg_data": {
                "@type": "msg.dataRaw",
                "body": "te6cckEBAQEAEQAAHQAEhlbGxvLCB3b3JsZCGCGWjAc=",
                "init_state": ""
              },
              "message": "AASGVsbG8sIHdvcmxkIQ\n"
            },
            ```
    opened by mr-tron 1
  • Add rapidoc documentation. Set it as default.

    Add rapidoc documentation. Set it as default.

    RapiDoc provides better displayed documentation. It looks way better than ReDoc and Swagger and its the reason, why it was used here. I have used colors which are closer to TON project to make it look more adapted, but most part of colors are dark not to burn out the eyes.

    Here is how docs look now: image

    Additionally, set RapiDoc documentation as default. So, now, RapiDoc documentation is shown when visiting /api/v2/. Swagger docs were moved to /api/v2/swagger.

    Added some comments and links in RapiDoc handler code about its customization.

    opened by heyqbnk 1
  • Accept hash parameter of getTransactions in base64 as well as in hex.

    Accept hash parameter of getTransactions in base64 as well as in hex.

    Detect hash encoding based on the length and convert to hex if base64 is received. Converting to hex is required since tonlib accepts only hex hashes. Fixes issue #7

    opened by dungeon-master-666 1
  • Bug in

    Bug in "lookupBlock(...)" function

    async def lookupBlock(self, workchain, shard, seqno=None, lt=None, unixtime=None):
        assert seqno or lt or unixtime, "Seqno, LT or unixtime should be defined"
        mode = 0
        if seqno:
            mode += 1
        if lt:
            mode += 2
         if unixtime:
            mode += 3 <<<<< THERE
    

    It have to be

        if unixtime:
            mode += 4
    

    Related code from litesever.cpp

    void LiteQuery::perform_lookupBlock(BlockId blkid, int mode, LogicalTime lt, UnixTime utime) {
      if (!((1 << (mode & 7)) & 0x16)) {
        fatal_error("exactly one of mode.0, mode.1 and mode.2 bits must be set");
        return;
      }
      if (!(mode & 2)) {
        lt = 0;
      }
      if (!(mode & 4)) {
        utime = 0;
      }
    
    bug 
    opened by BorMor 1
  • Testnet error:

    Testnet error: "INVALID_CONFIG: hardforks differs from embedded hardforks"

    Hello,

    After following these steps, I could't communicate to testnet:

    1. Download the testnet file;

    mkdir private && curl -sL https://ton-blockchain.github.io/testnet-global.config.json > private/testnet.json

    1. custom .env (basically, changing the TON_API_TONLIB_LITESERVER_CONFIG path)

    TON_API_CACHE_ENABLED=0 TON_API_CACHE_REDIS_ENDPOINT=cache_redis TON_API_CACHE_REDIS_PORT=6379 TON_API_CACHE_REDIS_TIMEOUT=1 TON_API_LOGS_JSONIFY=0 TON_API_LOGS_LEVEL=ERROR TON_API_GET_METHODS_ENABLED=1 TON_API_HTTP_PORT=8082 TON_API_JSON_RPC_ENABLED=1 TON_API_ROOT_PATH=/ TON_API_WEBSERVERS_WORKERS=1 TON_API_TONLIB_LITESERVER_CONFIG=private/testnet.json TON_API_TONLIB_KEYSTORE=/tmp/ton_keystore/ TON_API_TONLIB_PARALLEL_REQUESTS_PER_LITESERVER=50 TON_API_TONLIB_CDLL_PATH= TON_API_TONLIB_REQUEST_TIMEOUT=10 TON_API_GUNICORN_FLAGS= COMPOSE_FILE=docker-compose.yaml

    1. Running using docker compose:

    docker compose build --no-cache && docker compose up

    1. Output Error:

    image

    After that I tried changing the liteserver entry to point just to my own lite server, but I received the same error. The same steps with mainnet worked. Could you help me with this error?

    opened by leoenes 2
  • API getTransactions returns message.hash

    API getTransactions returns message.hash

    I'm using in_msg.hash to identify a transaction that sent from my own wallet as it is immutable and can be searched by on explorer https://tonscan.org . But when I indexing transactions, I can't find message.hash in any API and it hard to caculate for me. Is it possible to support message.hash in getTransactions? Or is there any other solution should I take?

    opened by i-xiaov 0
  • New structure for API v3

    New structure for API v3

    New structure for API v3

    • Structure with respect to FastAPI template.
    • Split to separate files (WIP).
    • Changed verbosity of worker and manager errors to DEBUG level.
    • Injecting dependencies with standard FastAPI injector instead of Python Inject lib.
    opened by kdimentionaltree 0
  • Для некоторых блоков нельзя получить транзакции, только их заголовки.

    Для некоторых блоков нельзя получить транзакции, только их заголовки.

    Удачный запрос:

    Запрос заголовков транзакций:

    curl -X 'GET' \ 'https://toncenter.com/api/v2/getBlockTransactions?workchain=-1&shard=-9223372036854775808&seqno=9940970&count=2' \ -H 'accept: application/json'

    https://toncenter.com/api/v2/getBlockTransactions?workchain=-1&shard=-9223372036854775808&seqno=9940970&count=2

    Результат:

    ... "transactions": [ { "@type": "blocks.shortTxId", "mode": 135, "account": "-1:3333333333333333333333333333333333333333333333333333333333333333", "lt": "15866177000001", "hash": "EQojTkmEi8cDIFkFHhEx5XMhwzJyj/qc86AyIh4AwgI=" }, { "@type": "blocks.shortTxId", "mode": 135, "account": "-1:3333333333333333333333333333333333333333333333333333333333333333", "lt": "15866177000002", "hash": "/CBuRMN/saCSHGmrH+e/jwA0Xtv0Aa8HCpyX4eGU2Ro=" }, ...

    Запрос транзакций:

    curl -X 'GET' \ 'https://toncenter.com/api/v2/getTransactions?address=-1%3A3333333333333333333333333333333333333333333333333333333333333333&limit=10&lt=15866177000002&hash=fc206e44c37fb1a0921c69ab1fe7bf8f00345edbf401af070a9c97e1e194d91a&to_lt=0&archival=false' \ -H 'accept: application/json'

    https://toncenter.com/api/v2/getTransactions?address=-1%3A3333333333333333333333333333333333333333333333333333333333333333&limit=10&lt=15866177000002&hash=fc206e44c37fb1a0921c69ab1fe7bf8f00345edbf401af070a9c97e1e194d91a&to_lt=0&archival=false

    Результат:

    { "ok": true, "result": [ { "@type": "raw.transaction", "utime": 1614298662, "data": "te6cckECBwEAAYkAA69zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzAAAObiHYEkIRCiNOSYSLxwMgWQUeETHlcyHDMnKP+pzzoDIiHgDCAgAADm4h2BJBYDg+JgABQIAQIDAQGgBACCcuAsymOSgp/XwWPLLtRdvJku3E3mcHWwPqMwMDwt2MMcf+ACQRjwlLpPK9t+aaAzHnMVSkv72KUGIYC2Q+yJxwwCDwQJOHJYYZgRBQYAq2n+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE/zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzThyWGGAAAABzcQ7AkgMBwfExAAJ5CYUwXHtwAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvAAAAAAAAAAAAAAAABLUUtpEnlC4z33SeGHxRhIq/htUa7i3D8ghbwxhQTn44EXTSWcg==", "transaction_id": { "@type": "internal.transactionId", "lt": "15866177000002", "hash": "/CBuRMN/saCSHGmrH+e/jwA0Xtv0Aa8HCpyX4eGU2Ro=" }, "fee": "0", "storage_fee": "0", "other_fee": "0", "in_msg": { "@type": "raw.message", "source": "Ef8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAU", "destination": "Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF", "value": "3788071302", "fwd_fee": "0", "ihr_fee": "0", "created_lt": "15866177000000", "body_hash": "lqKW0iTyhcZ77pPDD4owkVfw2qNdxbh+QQt4YwoJz8c=", "msg_data": { "@type": "msg.dataRaw", "body": "te6cckEBAQEAAgAAAEysuc0=", "init_state": "" }, "message": "" }, "out_msgs": [] }, ...

    Неудачный запрос:

    Запрос заголовков транзакций:

    curl -X 'GET' \ 'https://toncenter.com/api/v2/getBlockTransactions?workchain=0&shard=-6052837899185946624&seqno=4142468&count=2' \ -H 'accept: application/json'

    https://toncenter.com/api/v2/getBlockTransactions?workchain=0&shard=-6052837899185946624&seqno=4142468&count=2

    Результат:

    ... "transactions": [ { "@type": "blocks.shortTxId", "mode": 135, "account": "0:a80386e06b5ba145d27fc6b52060efd842bd0961f7874800347fd9651ba63738", "lt": "4761350000001", "hash": "wJYQQrXYmSxdpI1c6CYcosNea0lyVeChPIVcKElrjeA=" }, { "@type": "blocks.shortTxId", "mode": 135, "account": "0:a82b89c01d052c76b3f4498ed7cb4894617858793e96b95ee2e761cab24f0948", "lt": "4761350000001", "hash": "HuTnm7yLq/GKu28dasjkcRUvW36TrFIxeKmJDWMrOZE=" }, ...

    Запрос транзакций:

    curl -X 'GET' \ 'https://toncenter.com/api/v2/getTransactions?address=0%3Aa80386e06b5ba145d27fc6b52060efd842bd0961f7874800347fd9651ba63738&limit=10&lt=4761350000001&hash=c0961042b5d8992c5da48d5ce8261ca2c35e6b497255e0a13c855c28496b8de0&to_lt=0&archival=true' \ -H 'accept: application/json'

    https://toncenter.com/api/v2/getTransactions?address=0%3Aa80386e06b5ba145d27fc6b52060efd842bd0961f7874800347fd9651ba63738&limit=10&lt=4761350000001&hash=c0961042b5d8992c5da48d5ce8261ca2c35e6b497255e0a13c855c28496b8de0&to_lt=0&archival=true

    Результат:

    { "ok": false, "error": "Couldn't get next transactions chunk: LITE_SERVER_UNKNOWN: cannot compute block with specified transaction: ltdb: block not found - unexpected lite server response:\n\t{\"@type\": \"error\", \"code\": 500, \"message\": \"LITE_SERVER_UNKNOWN: cannot compute block with specified transaction: ltdb: block not found\", \"@extra\": \"1651071304.9469192:6:0.019473286914038046\"}", "code": 500 }

    opened by mr-tron 0
  • Is there any documentation?

    Is there any documentation?

    Hello, guys. Can somebody helps me with documentation of "how to check transaction status etc" via http api?

    I want to use ton for payments, but i found no documentation for this. How should i check status of transaction? How should i better search transaction in blockchain etc?

    opened by Soulbadguy54 0
Releases(v2.0.17)
Unofficial calendar integration with Gradescope

Gradescope-Calendar This script scrapes your Gradescope account for courses and assignment details. Assignment details currently can be transferred to

6 May 06, 2022
“Hey there 👋 I'm szrosebot .A Powerful, Smart And Simple Group Manager with some extra features..

A Powerful, Smart And Simple Group Manager szrose bot This is the clone of DewmiBotit is a Powerful, Smart And Simple Group Manager bot made by hiruna

slgeekshow 36 Oct 30, 2022
C Y B Ξ R UserBot is a project that simplifies the use of Telegram. All rights reserved.

C Y B Ξ R USΞRBOT 🇦🇿 C Y B Ξ R UserBot is a project that simplifies the use of Telegram. All rights reserved. Automatic Setup Android: open Termux p

C Y B Ξ R 0 Sep 20, 2022
⚡ PoC: Hide a c&c botnet in the discord client. (Proof Of Concept)

👨‍💻 Discord Self Bot 👨‍💻 A Discord Self-Bot in Python by natrix Installation Run: selfbot.bat Python: version : 3.8 Modules

0хVιcнy#1337 37 Oct 21, 2022
Stock Market Insights is a Dashboard that gives the 360 degree view of the particular company stock

fedora-easyfix A collection of self-contained and well-documented issues for newcomers to start contributing with How to setup the local development e

Ganesh N 3 Sep 10, 2021
This is a tutorial on how to make a Discord Bot using the discord.py library

HowToMakeADiscordBot This Github repository is here to help you code a Discord Bot using the discord.py library! 1 - Setup: Download the code inside t

Baz 1 Oct 31, 2021
Discord Bot Personnal Server - Ha-Neul

Haneul Bot, it's a discord for help me on my personnal discord, she do a lot of boring and repetitive stain. You can use on your own server if you want, you just need to find a host for the programm

Maxvyr 1 Feb 03, 2022
Python3 based bittrex rest api wrapper

bittrex-rest-api This open source project was created to give an understanding of the Bittrex Rest API v1.1/v3.0 in pearl language. The sample file sh

4 Nov 15, 2022
VC-Music , Playing music without bot.

VC-Userbot A Telegram Userbot to play or streaming Audio and Video songs / files in Telegram Voice Chats. It's made with PyTgCalls and Pyrogram Requir

RioProjectX 8 Aug 04, 2022
Discord bot that plays cricket with the user

CricBot Table of content Commands Installation Game rules License Commands S.No Command Use 1. cric Open the home window. This command is not necessa

Raveesh Yadav 1 Nov 19, 2021
Univerity-student oriented (lithuanian) discord bot

Univerity-student oriented (lithuanian) discord bot

3 Nov 30, 2021
Stackoverflow Telegram Bot With Python

Template for Telegram Bot Template to create a telegram bot in python. How to Run Set your telegram bot token as environment variable TELEGRAM_BOT_TOK

PyTopia 10 Mar 07, 2022
阿里云盘上传脚本

阿里云盘上传脚本 Author:李小恩 Github:https://github.com/Hidove/aliyundrive-uploader 如有侵权,请联系我删除 禁止用于非法用途,违者后果自负 环境要求 python3 使用方法 安装 git clone https://github.co

Hidove 301 Jan 01, 2023
Module to use some statistics from Spotify API

statify Module to use some statistics from Spotify API To use it you have to import the functions into your own project. You have also to authenticate

Miguel Cózar 2 Jun 02, 2022
Personal Discord Python Bot based on Discord.py

Personal Discord bot using the discord.py library by Rapptz

2 Dec 14, 2022
A solution designed to extract, transform and load Chicago crime data from an RDS instance to other services in AWS.

This project is intended to implement a solution designed to extract, transform and load Chicago crime data from an RDS instance to other services in AWS.

Yesaswi Avula 1 Feb 04, 2022
A modern,feature-rich, and async ready API wrapper for Discord written in Python

discord.io A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. Key Features Modern Pythonic API using asyn

Vincent 18 Jan 02, 2023
DSAIL repos - DSAIL Repository Template

DSAIL Repository Template DSAIL @ KAIST . ├── configs ('--F', help='for configur

yunhak 2 Feb 14, 2022
Python library for the DeepL language translation API.

The DeepL API is a language translation API that allows other computer programs to send texts and documents to DeepL's servers and receive high-quality translations. This opens a whole universe of op

DeepL 535 Jan 04, 2023
Coinbase Listing Sniper

Coinbase Listing Sniper Script that listens to the @CoinbaseAssets twitter to find information about new Coinbase listings, and automatically buys 100

4 Oct 26, 2022