-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathImprovedcode
97 lines (87 loc) · 3.53 KB
/
Improvedcode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import zoom
import time
import os
import logging
from dotenv import load_dotenv
# Initialize logging
logging.basicConfig(level=logging.INFO)
# Load API key and secret from environment variables
def load_api_keys():
load_dotenv()
api_key = os.getenv("ZOOM_API_KEY")
api_secret = os.getenv("ZOOM_API_SECRET")
if not api_key or not api_secret:
logging.error("Zoom API keys are not set in environment variables.")
raise ValueError("Zoom API keys are missing.")
return api_key, api_secret
# Initialize the Zoom client
def initialize_zoom_client(api_key, api_secret):
try:
client = zoom.ZoomClient(api_key=api_key, api_secret=api_secret)
return client
except Exception as e:
logging.error(f"Failed to initialize Zoom client: {e}")
raise
class Botzillah:
def __init__(self, api_key, api_secret):
self.client = initialize_zoom_client(api_key, api_secret)
self.blacklist = set() # Use set for faster lookups
self.spam_threshold = int(os.getenv("SPAM_THRESHOLD", 3))
self.spam_counts = {}
self.last_entry_times = {}
self.banned_users = {}
self.inappropriate_words = set(os.getenv("INAPPROPRIATE_WORDS", "").split(","))
if not self.inappropriate_words:
self.inappropriate_words = {
"satan", "satanic", "pedo", "perv", "pervert", "no limits",
"pedophile", "cannibalism", "bestiality", "scat", "CP",
"child pornography", "satanism", "devil worship"
}
def join_meeting(self):
try:
self.meeting = self.client.meeting.join(name="Botzillah")
except Exception as e:
logging.error(f"Failed to join meeting: {e}")
raise
def monitor_chat(self):
while True:
try:
messages = self.meeting.get_chat_messages()
for message in messages:
sender = message.get('sender_name').lower()
text = message.get('text').lower()
if sender in self.blacklist or self.is_inappropriate(sender, text):
self.remove_user(sender)
else:
self.spam_counts[sender] = self.spam_counts.get(sender, 0) + 1
time.sleep(1)
except Exception as e:
logging.error(f"Error monitoring chat: {e}")
time.sleep(5) # Retry after a delay
def is_inappropriate(self, sender, text):
if self.spam_counts.get(sender, 0) >= self.spam_threshold:
return True
if any(word in sender for word in self.inappropriate_words) or \
any(word in text for word in self.inappropriate_words):
return True
if sender in self.last_entry_times and time.time() - self.last_entry_times[sender] < 60:
return True
self.last_entry_times[sender] = time.time()
return False
def remove_user(self, sender):
try:
self.meeting.remove_user(sender)
self.blacklist.add(sender)
logging.info(f"User {sender} removed and added to blacklist.")
except Exception as e:
logging.error(f"Failed to remove user {sender}: {e}")
def run(self):
self.join_meeting()
self.monitor_chat()
if __name__ == "__main__":
try:
api_key, api_secret = load_api_keys()
botzillah = Botzillah(api_key, api_secret)
botzillah.run()
except Exception as e:
logging.error(f"Botzillah failed to start: {e}")