みなさん、こんにちは!さまざまなボットで、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
この記事がお役に立てば幸いです!