Sistem rujukan di bot Telegram

Halo semuanya! Pasti kalian pernah melihat di berbagai bot link referral seperti https://t.me/ <username_bot>? Start = <number>. Biasanya, ID Telegram perujuk ditunjukkan sebagai angka. Pada artikel ini, saya akan menjelaskan cara menangani tautan semacam itu di bot saya.





Untuk mengembangkan bot, saya menggunakan pustaka Python pytelegrambotapi.





Saya akan menghilangkan proses pembuatan bot melalui @BotFather , saya akan melanjutkan langsung ke kode. Ada file config.py



dengan variabel TOKEN, yang menyimpan token bot. bot.py



Kami akan "mengubah" file . Mari kita tulis handler untuk perintah / start dan tampilkan semua yang disimpan di objek pesan.





import telebot

import config

bot = telebot.TeleBot(config.TOKEN)


@bot.message_handler(commands=["start"])
def start_command_handler(msg):
    print(msg)


if __name__ == '__main__':
    bot.polling(none_stop=True)

      
      



'text': '/start'.



https://t.me/<_>?start=test 10- print(msg.text)







/start test



. , msg.text



, .





. , /start , /start



. ( /start test



). ID .





@bot.message_handler(commands=["start"])
def start_command_handler(msg):
    user_id = msg.from_user.id
    referrer = None

    if " " in msg.text:
        referrer_candidate = msg.text.split()[1]
				#  
      
      



https://t.me/<_>?start=test test2, test2 msg.text, , , test2 . msg.text



. , . (msg.text.split()



), ( , , ?).





, . , , . - "" , ID - . .





@bot.message_handler(commands=["start"])
def start_command_handler(msg):
    user_id = msg.from_user.id
    referrer = None

    #    -    
    if " " in msg.text:
        referrer_candidate = msg.text.split()[1]

        #     
        try:
            referrer_candidate = int(referrer_candidate)
						#  
        except ValueError:
            pass
      
      



, try... except



int()



. referer



, int()



ValueError







referer . : int()



"-101" -101. referer . , .





TG ID. , . . ID , user_id = msg.from_user.id







@bot.message_handler(commands=["start"])
def start_command_handler(msg):
    user_id = msg.from_user.id
    referrer = None

    #    -    
    if " " in msg.text:
        referrer_candidate = msg.text.split()[1]

        #     
        try:
            referrer_candidate = int(referrer_candidate)

            #    TG ID  TG ID 
            if user_id != referrer_candidate:
              #  
							pass

        except ValueError:
            pass
      
      



, get_all_users(), . , , .





@bot.message_handler(commands=["start"])
def start_command_handler(msg):
    user_id = msg.from_user.id
    referrer = None

    #    -    
    if " " in msg.text:
        referrer_candidate = msg.text.split()[1]

        #     
        try:
            referrer_candidate = int(referrer_candidate)

            #    TG ID  TG ID 
            #  ,       
            if user_id != referrer_candidate and referrer_candidate in get_all_users():
                referer = referrer_candidate

        except ValueError:
            pass
      
      



Apa yang harus dilakukan jika pengguna sudah memiliki perujuk? Lagi pula, kami tidak akan memberikan bonus untuk rujukan yang dirujuk setiap kali Anda menggunakan tautan rujukan, itu hanya akan merusak kami. Oleh karena itu, perlu untuk menulis cek. Mari kita tulis fungsi has_referrer()



yang akan mengembalikan True jika pengguna memiliki perujuk dan False jika tidak. Adalah logis untuk menulisnya di awal untuk pengoptimalan.





@bot.message_handler(commands=["start"])
def start_command_handler(msg):
    user_id = msg.from_user.id
    #      
    if not has_referrer():
        referrer = None

        #    -    
        if " " in msg.text:
            referrer_candidate = msg.text.split()[1]

            #     
            try:
                referrer_candidate = int(referrer_candidate)

                #    TG ID  TG ID 
                #  ,       
                if user_id != referrer_candidate and referrer_candidate in get_all_users():
                    referer = referrer_candidate

            except ValueError:
                pass
      
      



Semoga artikel ini bermanfaat bagi Anda!








All Articles