lunarflu HF staff commited on
Commit
6386d92
·
verified ·
1 Parent(s): c0717bc

test merge

Browse files
Files changed (1) hide show
  1. app.py +112 -22
app.py CHANGED
@@ -17,6 +17,8 @@ import gspread
17
  import numpy as np
18
  import pandas as pd
19
  import requests
 
 
20
  from apscheduler.executors.pool import ThreadPoolExecutor
21
  from apscheduler.schedulers.background import BackgroundScheduler
22
  from discord import Color, Embed
@@ -46,6 +48,7 @@ with open(file_path, 'w') as json_file:
46
  gspread_bot = gspread.service_account(filename='service_account.json')
47
  worksheet = gspread_bot.open("levelbot").sheet1
48
  worksheet2 = gspread_bot.open("hf_discord_verified_users_test").sheet1
 
49
  """"""
50
  bot_ids = [1136614989411655780, 1166392942387265536, 1158038249835610123, 1130774761031610388, 1155489509518098565, 1155169841276260546, 1152238037355474964, 1154395078735953930]
51
  """"""
@@ -57,6 +60,7 @@ worksheet2_df = pd.DataFrame()
57
  print(type(global_df))
58
  community_global_df = pd.DataFrame()
59
  community_global_df_with_id = pd.DataFrame()
 
60
  data = pd.read_csv("https://docs.google.com/spreadsheets/d/1hQSsIg1Y9WdBF_CdNM1L1rUUREoxKqRTe3_ILo-WK8w/export?format=csv&gid=0")
61
  data2 = pd.read_csv("https://docs.google.com/spreadsheets/d/1T_twNONDSZ8zw7aDcYhw92DlawqPktti1xFw9ssJ13Y/export?format=csv&gid=0")
62
 
@@ -71,12 +75,9 @@ async def on_ready():
71
  print(f"XP_PER_MESSAGE: {XP_PER_MESSAGE}")
72
 
73
  """import data from google sheets -> HF Space df (doesn't make API call this way, as it's read-only)"""
74
- data['discord_user_id'] = data['discord_user_id'].astype(str)
75
- global_df = data
76
  print(f"csv successfully retrieved: \n {global_df}")
77
 
78
-
79
-
80
  worksheet2_df = data2.copy()
81
  worksheet2_df['discord_user_id'] = worksheet2_df['discord_user_id'].astype(str)
82
  worksheet2_df['id_recover_test'] = worksheet2_df['id_recover_test'].astype(str)
@@ -93,19 +94,15 @@ async def on_ready():
93
 
94
 
95
  def update_google_sheet():
96
- """save data from HF Space -> google sheets (makes 2 API calls)"""
97
  try:
98
  print("Updating google sheets...")
99
  print(f"------------------------------------------------------------------------")
100
- name = "levelbot"
101
- #worksheet = gspread_bot.open(name).sheet1
102
- global_df['discord_user_id'] = global_df['discord_user_id'].astype(str)
103
- global_df['discord_exp'] = global_df['discord_exp'].astype(str)
104
- # could just do this / format
105
- set_with_dataframe(worksheet, global_df)
106
  timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
107
  print(f"------------------------------------------------------------------------")
108
- print(f"Google sheet {name} successfully updated at {timestamp}! \n{global_df}")
109
  print(f"------------------------------------------------------------------------")
110
  except Exception as e:
111
  print(f"update_google_sheet Error: {e}")
@@ -374,7 +371,7 @@ async def add_exp(member_id):
374
  embed.set_image(url='https://cdn.discordapp.com/attachments/1150399343912833024/1205537451242688573/download_1.png?ex=65d8bb3e&is=65c6463e&hm=042fe7dd3521887db0bd48eeb846de1cc7c75194f9e95215c23512ff61ea3475&')
375
 
376
  lunar = bot.get_user(811235357663297546)
377
- await member.send(embed=embed)
378
  await lunar.send(embed=embed)
379
  print(f"Sent verification cap embed to {member}")
380
  print(f"------------------------------------------------------------------------")
@@ -424,14 +421,14 @@ async def add_exp(member_id):
424
  embed.add_field(name="Verify Here:", value=verification_link, inline=True)
425
 
426
  lunar = bot.get_user(811235357663297546)
427
- await member.send(embed=embed)
428
  await lunar.send(embed=embed)
429
  print(f"Sent levelup embed to {member}")
430
  #You can verify your account to earn 100 points! To verify, do A.
431
 
432
 
433
  print(f"------------------------------------------------------------------------")
434
- if not member_found:
435
  # if not, create new record
436
  print(f"Creating new record for {member}")
437
 
@@ -444,11 +441,14 @@ async def add_exp(member_id):
444
  if not member_id.startswith("L") and not member_id.endswith("L"):
445
  member_id = f"L" + str(member_id) + f"L"
446
  member_name = str(member.name)
447
- hub_user_name = ""
448
  hub_exp = "L0L"
449
  total_exp = xp
450
- row_data = [member_id, member_name, xp, current_level, hub_user_name, hub_exp, total_exp]
451
- global_df.loc[len(global_df.index)] = row_data
 
 
 
452
  print(f"------------------------------------------------------------------------")
453
  except Exception as e:
454
  print(f"add_exp Error: {e}")
@@ -456,12 +456,101 @@ async def add_exp(member_id):
456
 
457
  @bot.event
458
  async def on_message(message):
 
459
  try:
460
  if message.author.id not in bot_ids: # could change to if author does not have bot role (roleid)
461
- if "!help_xp" not in message.content:
462
- print(f"adding exp from message {message.author}")
463
- await asyncio.sleep(0.1)
464
- await add_exp(message.author.id)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  await bot.process_commands(message)
466
  except Exception as e:
467
  print(f"on_message Error: {e}")
@@ -507,6 +596,7 @@ async def remove_huggingfolks():
507
  community_global_df.drop(community_global_df.columns[1], axis=1, inplace=True)
508
  community_global_df.drop(community_global_df.columns[2], axis=1, inplace=True)
509
  community_global_df.drop(community_global_df.columns[2], axis=1, inplace=True)
 
510
  community_global_df['total_exp'] = community_global_df['total_exp'].str.strip('L').astype(int)
511
  community_global_df['total_exp'] = pd.to_numeric(community_global_df['total_exp'], errors='coerce').fillna(0).astype(int)
512
  community_global_df = community_global_df.nlargest(len(community_global_df), 'total_exp')
 
17
  import numpy as np
18
  import pandas as pd
19
  import requests
20
+
21
+ from requests import HTTPError
22
  from apscheduler.executors.pool import ThreadPoolExecutor
23
  from apscheduler.schedulers.background import BackgroundScheduler
24
  from discord import Color, Embed
 
48
  gspread_bot = gspread.service_account(filename='service_account.json')
49
  worksheet = gspread_bot.open("levelbot").sheet1
50
  worksheet2 = gspread_bot.open("hf_discord_verified_users_test").sheet1
51
+ test_merge_worksheet = gspread_bot.open("levelbot").sheet1
52
  """"""
53
  bot_ids = [1136614989411655780, 1166392942387265536, 1158038249835610123, 1130774761031610388, 1155489509518098565, 1155169841276260546, 1152238037355474964, 1154395078735953930]
54
  """"""
 
60
  print(type(global_df))
61
  community_global_df = pd.DataFrame()
62
  community_global_df_with_id = pd.DataFrame()
63
+ test_merge = pd.read_csv("https://docs.google.com/spreadsheets/d/1C8aLqgCqLYcMiIFf-P_Aosaa03C_WLIB_UyqvjSdWg8/export?format=csv&gid=0")
64
  data = pd.read_csv("https://docs.google.com/spreadsheets/d/1hQSsIg1Y9WdBF_CdNM1L1rUUREoxKqRTe3_ILo-WK8w/export?format=csv&gid=0")
65
  data2 = pd.read_csv("https://docs.google.com/spreadsheets/d/1T_twNONDSZ8zw7aDcYhw92DlawqPktti1xFw9ssJ13Y/export?format=csv&gid=0")
66
 
 
75
  print(f"XP_PER_MESSAGE: {XP_PER_MESSAGE}")
76
 
77
  """import data from google sheets -> HF Space df (doesn't make API call this way, as it's read-only)"""
78
+ global_df = test_merge
 
79
  print(f"csv successfully retrieved: \n {global_df}")
80
 
 
 
81
  worksheet2_df = data2.copy()
82
  worksheet2_df['discord_user_id'] = worksheet2_df['discord_user_id'].astype(str)
83
  worksheet2_df['id_recover_test'] = worksheet2_df['id_recover_test'].astype(str)
 
94
 
95
 
96
  def update_google_sheet():
97
+ """save data from HF Space -> google sheets (makes 1 API call)"""
98
  try:
99
  print("Updating google sheets...")
100
  print(f"------------------------------------------------------------------------")
101
+ name = "test_merge_worksheet"
102
+ set_with_dataframe(test_merge_worksheet, global_df)
 
 
 
 
103
  timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
104
  print(f"------------------------------------------------------------------------")
105
+ print(f"Google sheet {name} {test_merge_worksheet} successfully updated at {timestamp}! \n{global_df}")
106
  print(f"------------------------------------------------------------------------")
107
  except Exception as e:
108
  print(f"update_google_sheet Error: {e}")
 
371
  embed.set_image(url='https://cdn.discordapp.com/attachments/1150399343912833024/1205537451242688573/download_1.png?ex=65d8bb3e&is=65c6463e&hm=042fe7dd3521887db0bd48eeb846de1cc7c75194f9e95215c23512ff61ea3475&')
372
 
373
  lunar = bot.get_user(811235357663297546)
374
+ #await member.send(embed=embed)
375
  await lunar.send(embed=embed)
376
  print(f"Sent verification cap embed to {member}")
377
  print(f"------------------------------------------------------------------------")
 
421
  embed.add_field(name="Verify Here:", value=verification_link, inline=True)
422
 
423
  lunar = bot.get_user(811235357663297546)
424
+ #await member.send(embed=embed)
425
  await lunar.send(embed=embed)
426
  print(f"Sent levelup embed to {member}")
427
  #You can verify your account to earn 100 points! To verify, do A.
428
 
429
 
430
  print(f"------------------------------------------------------------------------")
431
+ if not member_found: # this only checks if discord_user_id (with L) is present in discord_user_id column,
432
  # if not, create new record
433
  print(f"Creating new record for {member}")
434
 
 
441
  if not member_id.startswith("L") and not member_id.endswith("L"):
442
  member_id = f"L" + str(member_id) + f"L"
443
  member_name = str(member.name)
444
+ hf_user_name = "n/a"
445
  hub_exp = "L0L"
446
  total_exp = xp
447
+ verified_date = "n/a"
448
+
449
+ row_data = [member_id, member_name, xp, current_level, hf_user_name, hub_exp, total_exp, verified_date]
450
+ global_df.loc[len(global_df.index)] = row_data
451
+
452
  print(f"------------------------------------------------------------------------")
453
  except Exception as e:
454
  print(f"add_exp Error: {e}")
 
456
 
457
  @bot.event
458
  async def on_message(message):
459
+ global global_df
460
  try:
461
  if message.author.id not in bot_ids: # could change to if author does not have bot role (roleid)
462
+ print(f"adding exp from message {message.author}")
463
+ await asyncio.sleep(0.1)
464
+ await add_exp(message.author.id)
465
+ # add check for verification
466
+ # could add !help to bot description
467
+
468
+ if message.content.find("!help") != -1:
469
+ await message.channel.send(
470
+ "To verify your 🤗 account, message me '!auth <TOKEN>' using your API token found here: https://huggingface.co/settings/token"
471
+ )
472
+ if message.content.startswith('!auth'):
473
+ await asyncio.sleep(3)
474
+ lunar = bot.get_user(811235357663297546)
475
+ token = message.content.split()[-1].strip()
476
+ try:
477
+ user = HfApi().whoami(token)
478
+ except HTTPError as e:
479
+ await message.channel.send("Error occured when trying to authenticate. Likely invalid API Token.")
480
+ token = "abc" # reset right after we use to be safe
481
+
482
+ if user['type'] == 'org':
483
+ await message.channel.send(
484
+ "Authentication failed because you tried to authenticate with an organization's API token. Please authenticate with your User API token instead."
485
+ )
486
+ return
487
+
488
+ try:
489
+ server = bot.get_guild(879548962464493619)
490
+ #role = discord.utils.get(server.roles, name="verified")
491
+ role = server.get_role(900063512829755413)
492
+ member = server.get_member(message.author.id)
493
+ verified_date = datetime.now().strftime("%m/%d/%Y, %H:%M:%S")
494
+ # important!-----------------------------------------------------------------------------
495
+ # In order to add verification to a discord account, some important checks must ALL pass:
496
+ # 1. Discord account should not already have verified role.
497
+ # 2. hf_user_name should not already exist in the dataframe.
498
+ # -----> If it does, it means we are trying to link 1 HF account to multiple discord accounts. 1->many is disallowed.
499
+
500
+ # check if the member has the verified role (prevent duplicate entries in google sheet)
501
+ # if users want to change discord / HF accounts, we can deal with that manually
502
+ if role in member.roles:
503
+ await message.channel.send(f"{member} already has has the '{role}' role and is already verified! To change discord accounts or HF accounts, contact <@811235357663297546> or [email protected]")
504
+ return
505
+
506
+ # check if hf_user_name in dataframe:
507
+ if user['name'] in global_df['hf_user_name'].values:
508
+ await message.channel.send(f"The HF account {user['name']} is already verified! To change discord accounts or HF accounts, contact <@811235357663297546> or [email protected]")
509
+ return
510
+
511
+ # check if discord_user_id in dataframe:
512
+ altered_member_id = "L" + str(member.id) + "L"
513
+ if altered_member_id in global_df['discord_user_id'].values:
514
+
515
+ hf_user_name = global_df.loc[global_df['discord_user_id'] == altered_member_id, 'hf_user_name'].iloc[0]
516
+
517
+ if hf_user_name == 'n/a':
518
+ # empty (no link created yet between discord_user_id and hf_user_name) so we can update
519
+ global_df.loc[global_df['discord_user_id'] == altered_member_id, 'hf_user_name'] = user['name']
520
+ global_df.loc[global_df['discord_user_id'] == altered_member_id, 'verified_date'] = verified_date
521
+ print(f"Updated hf_user_name for id {member.id} | discord_user_name {member} | hf_user_name {user['name']}")
522
+ await message.channel.send(f"Verification successful! [{member} <---> {user['name']}] 🤗")
523
+ await lunar.send(f"Verification successful! [{member} <---> {user['name']}] 🤗")
524
+ print(f"Verification successful! [{member} <---> {user['name']}] 🤗")
525
+ return
526
+ else:
527
+ await message.channel.send(f"The Discord account {member} is already verified! To change discord accounts or HF accounts, contact <@811235357663297546> or [email protected]")
528
+ await lunar.send(f"The Discord account {member} is already verified! To change discord accounts or HF accounts, contact <@811235357663297546> or [email protected]")
529
+ print(f"The Discord account {member} is already verified! To change discord accounts or HF accounts, contact <@811235357663297546> or [email protected]")
530
+ return
531
+
532
+ # -----------------------------------------------------------------------------------------
533
+ xp = 10
534
+ current_level = calculate_level(xp)
535
+ xp = str(xp)
536
+ if not xp.startswith("L") and not xp.endswith("L"):
537
+ xp = f"L" + str(xp) + f"L"
538
+ hub_exp = "L0L"
539
+ total_exp = xp
540
+
541
+ row_data = [altered_member_id,
542
+ member.name,
543
+ xp,
544
+ current_level,
545
+ user['name'],
546
+ "L0L",
547
+ xp,
548
+ verified_date]
549
+
550
+ global_df.loc[len(global_df.index)] = row_data
551
+ await member.add_roles(role)
552
+ print(f"New record created for ")
553
+
554
  await bot.process_commands(message)
555
  except Exception as e:
556
  print(f"on_message Error: {e}")
 
596
  community_global_df.drop(community_global_df.columns[1], axis=1, inplace=True)
597
  community_global_df.drop(community_global_df.columns[2], axis=1, inplace=True)
598
  community_global_df.drop(community_global_df.columns[2], axis=1, inplace=True)
599
+ community_global_df.drop(community_global_df.columns[3], axis=1, inplace=True)
600
  community_global_df['total_exp'] = community_global_df['total_exp'].str.strip('L').astype(int)
601
  community_global_df['total_exp'] = pd.to_numeric(community_global_df['total_exp'], errors='coerce').fillna(0).astype(int)
602
  community_global_df = community_global_df.nlargest(len(community_global_df), 'total_exp')