Bonjour à tous! Vous avez sûrement vu dans divers bots un lien de parrainage comme https://t.me/ <username_bot>? Start = <number>. Habituellement, l'ID de télégramme du référent est indiqué sous forme de nombre. Dans cet article, je vais vous expliquer comment gérer de tels liens dans mon bot.
Pour développer des bots, j'utilise la bibliothèque Python pytelegrambotapi.
Je vais omettre le processus de création d'un bot via @BotFather , je passerai directement au code. Il existe un fichier config.py
avec la variable TOKEN, qui stocke le jeton du bot. bot.py
Nous allons "chimiser" le fichier . Écrivons un gestionnaire pour la commande / start et affichons tout ce qui est stocké dans l'objet message.
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
Que faire si l'utilisateur a déjà un référent ? Après tout, nous ne donnerons pas de bonus pour le parrainage à chaque fois que vous utilisez un lien de parrainage, cela nous ruinera tout simplement. Par conséquent, il est nécessaire d'écrire un chèque. Écrivons une fonction has_referrer()
qui renverra True si l'utilisateur a un référent et False s'il n'en a pas. Il est logique de l'écrire au début pour l'optimisation.
@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
J'espère que cet article vous sera utile !