Telegram ボットの紹介システム

みなさん、こんにちは!さまざまなボットで、https://t.me/ <username_bot>? Start = <number> のような参照リンクを見たことがあるはずです。通常、リファラーのテレグラムIDは数字で示されます。この記事では、ボットでそのようなリンクを処理する方法について説明します。





ボットを開発するには、pytelegrambotapi Python ライブラリを使用します。





@BotFather経由でボットを作成するプロセス省略し、コードに直接進みます。config.py



ボットのトークンを保存する TOKEN 変数を持つファイルがあります。ファイルbot.py



を「化学化」します/ start コマンドのハンドラーを作成して、メッセージ オブジェクトに格納されているすべてを表示しましょう。





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
      
      



ユーザーがすでにリファラーを持っている場合はどうすればよいですか? 結局のところ、紹介リンクを使用するたびに紹介された紹介に対してボーナスを与えることはありません。それは単に私たちをダメにするだけです。したがって、小切手を書く必要があります。has_referrer()



ユーザーにリファラーがある場合は True を返し、ない場合は False を返す関数作成しましょう最適化のために最初に書くのが論理的です。





@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
      
      



この記事がお役に立てば幸いです!








All Articles