karma.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. from wbb import app
  2. from wbb.utils.errors import capture_err
  3. from wbb.utils.dbfunctions import (update_karma, get_karma, get_karmas,
  4. int_to_alpha, alpha_to_int)
  5. from wbb.utils.filter_groups import karma_positive_group, karma_negative_group
  6. from pyrogram import filters
  7. __MODULE__ = "Karma"
  8. __HELP__ = """[UPVOTE] - Use upvote keywords like "+", "+1", "thanks" etc to upvote a message.
  9. [DOWNVOTE] - Use downvote keywords like "-", "-1", etc to downvote a message.
  10. Reply to a message with /karma to check a user's karma
  11. Send /karma without replying to any message to chek karma list of top 10 users"""
  12. regex_upvote = r"^((?i)\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|👍)$"
  13. regex_downvote = r"^(\-|\-\-|\-1|👎)$"
  14. @app.on_message(
  15. filters.text
  16. & filters.group
  17. & filters.incoming
  18. & filters.reply
  19. & filters.regex(regex_upvote)
  20. & ~filters.via_bot
  21. & ~filters.bot
  22. & ~filters.edited,
  23. group=karma_positive_group
  24. )
  25. @capture_err
  26. async def upvote(_, message):
  27. if message.reply_to_message.from_user.id == message.from_user.id:
  28. return
  29. chat_id = message.chat.id
  30. user_id = message.reply_to_message.from_user.id
  31. user_mention = message.reply_to_message.from_user.mention
  32. current_karma = await get_karma(chat_id, await int_to_alpha(user_id))
  33. if current_karma:
  34. current_karma = current_karma['karma']
  35. karma = current_karma + 1
  36. new_karma = {"karma": karma}
  37. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  38. else:
  39. karma = 1
  40. new_karma = {"karma": karma}
  41. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  42. await message.reply_text(
  43. f'Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}'
  44. )
  45. @app.on_message(
  46. filters.text
  47. & filters.group
  48. & filters.incoming
  49. & filters.reply
  50. & filters.regex(regex_downvote)
  51. & ~filters.via_bot
  52. & ~filters.bot
  53. & ~filters.edited,
  54. group=karma_negative_group
  55. )
  56. @capture_err
  57. async def downvote(_, message):
  58. if message.reply_to_message.from_user.id == message.from_user.id:
  59. return
  60. chat_id = message.chat.id
  61. user_id = message.reply_to_message.from_user.id
  62. user_mention = message.reply_to_message.from_user.mention
  63. current_karma = await get_karma(chat_id, await int_to_alpha(user_id))
  64. if current_karma:
  65. current_karma = current_karma['karma']
  66. karma = current_karma - 1
  67. new_karma = {"karma": karma}
  68. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  69. else:
  70. karma = 1
  71. new_karma = {"karma": karma}
  72. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  73. await message.reply_text(
  74. f'Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}'
  75. )
  76. @app.on_message(filters.command("karma") & filters.group)
  77. @capture_err
  78. async def karma(_, message):
  79. chat_id = message.chat.id
  80. if not message.reply_to_message:
  81. karma = await get_karmas(chat_id)
  82. msg = f"**Karma list of {message.chat.title}:- **\n"
  83. limit = 0
  84. karma_dicc = {}
  85. for i in karma:
  86. user_id = await alpha_to_int(i)
  87. user_karma = karma[i]['karma']
  88. try:
  89. user_name = (await app.get_users(user_id)).username
  90. except Exception:
  91. continue
  92. karma_dicc[user_name] = user_karma
  93. karma_arranged = dict(
  94. sorted(karma_dicc.items(), key=lambda item: item[1], reverse=True))
  95. for username, karma_count in karma_arranged.items():
  96. if limit > 9:
  97. break
  98. msg += f"{username} : `{karma_count}`\n"
  99. limit += 1
  100. await message.reply_text(msg)
  101. else:
  102. user_id = message.reply_to_message.from_user.id
  103. karma = await get_karma(chat_id, await int_to_alpha(user_id))
  104. if karma:
  105. karma = karma['karma']
  106. await message.reply_text(f'**Total Points**: __{karma}__')
  107. else:
  108. karma = 0
  109. await message.reply_text(f'**Total Points**: __{karma}__')