Compare commits

..

3 commits

Author SHA1 Message Date
c0b5c168a7
update lookup functions 2022-08-07 17:24:42 +02:00
a2e118c38f
update permission 2022-08-07 17:14:35 +02:00
86853437a9
update comments 2022-08-07 17:05:47 +02:00
2 changed files with 24 additions and 18 deletions

View file

@ -16,7 +16,7 @@ N'hésitez pas à ouvrir un ticket ou faire une merge-request pour contribuer au
## Lancer le Bot ## Lancer le Bot
Donner la permission `Read and Write` (ou `Read + Write + Direct Messages` mais aucun DM n'est envoyé) au bot dans `Settings` puis `App permissions`. Donner la permission au minimum `Read and Write` au bot dans `Settings` puis `App permissions`.
Les codes fourni par l'API de Twitter sont généralements disponible dans la page `Keys and tokens`. Les codes fourni par l'API de Twitter sont généralements disponible dans la page `Keys and tokens`.

40
main.py
View file

@ -85,7 +85,7 @@ class Listener(StreamingClient):
"users": users, "users": users,
"forcelist": forcelist "forcelist": forcelist
} }
self.listOfFriendsID = getFriendsID(client, users) + getIDs(client, forcelist) self.victim_list = getFriends(client, users) + getIDs(client, forcelist)
def on_connect(self): def on_connect(self):
if self.accounts['forcelist'] == []: if self.accounts['forcelist'] == []:
@ -101,9 +101,11 @@ class Listener(StreamingClient):
print(f"Raison : {notice['reason']}") print(f"Raison : {notice['reason']}")
def on_status(self, status): def on_status(self, status):
print(status)
exit(0)
json = status._json json = status._json
# Verify the author of the tweet # Verify the author of the tweet
if json["user"]["id"] in self.listOfFriendsID and json["user"]["screen_name"] not in keys["WHITELIST"]: if json["user"]["id"] in self.victim_list and json["user"]["screen_name"] not in keys["WHITELIST"]:
# Verify the age of the tweet # Verify the age of the tweet
if seniority(json["created_at"]): if seniority(json["created_at"]):
# Verify if the tweet isn't a retweet # Verify if the tweet isn't a retweet
@ -198,23 +200,22 @@ def repeater(word: str) -> str:
# Random format from the base answer # Random format from the base answer
return createBaseAnswers(word) return createBaseAnswers(word)
def getFriendsID(client: Client, users: list[str]) -> list: def getFriends(client: Client, users: list[str]) -> list:
"""Get all friends of choosen users""" """Get all friends of choosen users"""
liste = [] friends_list = []
# Get IDs of the user's friends # Get IDs of the user's friends
for user in users: for user in users:
# TODO: Update Twitter API V2 user_id = client.get_user(username=user, user_auth=True).data.id
liste.extend(client.get_friend_ids(screen_name=user)) friends_list.extend(client.get_users_following(id=user_id, user_auth=True))
return list(set(liste)) return friends_list[0]
def getIDs(client: Client, users: list[str]) -> list: def getIDs(client: Client, users: list[str]) -> list:
"""Get all the ID of users""" """Get all the ID of users"""
liste = [] users_list = []
# Get IDs of the users # Get IDs of the users
for user in users: for user in users:
# TODO: Update Twitter API V2 users_list.append(client.get_user(username=user, user_auth=True).data)
liste.append(client.get_user(screen_name=user)._json["id"]) return users_list
return list(set(liste))
def seniority(date: str) -> bool: def seniority(date: str) -> bool:
"""Return True only if the given string date is less than one day old""" """Return True only if the given string date is less than one day old"""
@ -325,12 +326,17 @@ def start():
if __name__ == "__main__": if __name__ == "__main__":
""" """
TOKEN is the Access Token available in the Authentication Tokens section under Access Token and Secret sub-heading. TOKEN is the Access Token available in the Authentication Tokens section under the Access Token and Secret sub-heading
TOKEN_SECRET is the Access Token Secret available in the Authentication Tokens section under Access Token and Secret sub-heading. TOKEN_SECRET is the Access Token Secret available in the Authentication Tokens section under the Access Token and Secret sub-heading
CONSUMER_KEY is the API Key available in the Consumer Keys section. CONSUMER_KEY is the API Key available in the Consumer Keys section under the API Key and Secret sub-heading
CONSUMER_SECRET is the API Secret Key available in the Consumer Keys section. CONSUMER_SECRET is the API Secret Key available in the Consumer Keys section under the API Key and Secret sub-heading
BEARER_TOKEN is the Bearer Token available in the Authentication Tokens section under the Bearer Token sub-heading
-- --
PSEUDO is the PSEUDO of the account you want to listen to snipe. PSEUDOS is a list of account you want to listen, all of his·er following (guys followed by PSEUDO) will be sniped
WHITELSIT is a list of account who are protected from the bot
FORCELIST is a list of account who are targeted by the bot, if user is in the whitelist, he·r will be ignored
---
VERBOSE enable some debugs log
""" """
# Error message # Error message
errorMessage = "Une erreur survient !" errorMessage = "Une erreur survient !"
@ -507,7 +513,7 @@ if __name__ == "__main__":
triggerWords = generateWords(universalBase) triggerWords = generateWords(universalBase)
# Loading environment variables # Loading environment variables
keys = load(["TOKEN", "TOKEN_SECRET", "CONSUMER_KEY", "CONSUMER_SECRET", "PSEUDOS", "VERBOSE", "WHITELIST", "FORCELIST", "BEARER_TOKEN"]) keys = load(["TOKEN", "TOKEN_SECRET", "CONSUMER_KEY", "CONSUMER_SECRET", "BEARER_TOKEN", "PSEUDOS", "VERBOSE", "WHITELIST", "FORCELIST"])
# Start the bot # Start the bot
start() start()