鱼C论坛

 找回密码
 立即注册
查看: 351|回复: 49

[作品展示] 用户登录9.0

[复制链接]
回帖奖励 30 鱼币 回复本帖可获得 10 鱼币奖励! 每人限 1 次(中奖概率 70%)
发表于 2023-11-19 14:14:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 陶远航 于 2025-7-8 16:59 编辑

用户登录,一直是一个有趣(没啥用)的程序,自从用户登录6.0以来一直在升级小工具的功能,忽略了增加一些实用的功能,所以用户登录一直都没有实际用处。

现在,用户登录开发由不断增加安全性转到不断增加功能,当然也会增加安全性。

用户登录9.0已经完成了一个重要任务:代码重构。这有利于插件的编写,也有利于让代码更简洁。

以下是用户登录9.0更新的内容:

1.代码重构★
2.检查更新★
3.完善插件功能★
4.完善验证码功能★


检查更新需要用到网络服务,请知晓!

用户登录9.0完整代码以及官方推出的插件:

代码:
  1. global gly_login
  2. gly_login = 0
  3. import requests
  4. from PIL import Image, ImageTk
  5. from io import BytesIO
  6. import os
  7. import tkinter as tk
  8. import tkinter.messagebox
  9. from Crypto.Cipher import AES
  10. import base64
  11. import hashlib
  12. import easygui
  13. import subprocess

  14. global ver
  15. ver=9.0

  16. try:
  17.     with open("banned_user.txt") as f:
  18.         banned_user_list=eval(f.read())
  19. except:
  20.     with open("banned_user.txt","w") as f:
  21.         f.write("[]")
  22.         banned_user_list=[]

  23. BLOCK_SIZE = 16  # Bytes
  24. pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(
  25.     BLOCK_SIZE - len(s) % BLOCK_SIZE
  26. )
  27. unpad = lambda s: s[: -ord(s[len(s) - 1 :])]

  28. class main:
  29.     def aesEncrypt(self,key, data):
  30.         key = key.encode("utf8")
  31.         data = pad(data)
  32.         cipher = AES.new(key, AES.MODE_ECB)
  33.         result = cipher.encrypt(data.encode())
  34.         encodestrs = base64.b64encode(result)
  35.         enctext = encodestrs.decode("utf8")
  36.         return enctext

  37.     def aesDecrypt(self,key, data):
  38.         """

  39.         :param key: 密钥
  40.         :param data: 加密后的数据(密文)
  41.         :return:明文
  42.         """
  43.         key = key.encode("utf8")
  44.         data = base64.b64decode(data)
  45.         cipher = AES.new(key, AES.MODE_ECB)
  46.         text_decrypted = unpad(cipher.decrypt(data))
  47.         text_decrypted = text_decrypted.decode("utf8")
  48.         return text_decrypted
  49.     def isgly(self):
  50.         try:
  51.             with open("gly.txt") as f:
  52.                 if f.read() == "enabled":
  53.                     return True
  54.                 else:
  55.                     return False
  56.         except:
  57.             return False
  58.     def saveinfo(self):
  59.         with open("nameandpwd.txt", "w") as f:
  60.             f.write(self.aesEncrypt(key="taoyuanhang66666", data=str(nameandpwd)))

  61.     def readinfo(self):
  62.         with open("nameandpwd.txt") as f:
  63.             nameandpwd = eval(self.aesDecrypt(key="taoyuanhang66666", data=f.read()))
  64.     def about(self,a=1):
  65.         if a == "1":
  66.             tk.messagebox.showinfo(
  67.                 "About",
  68.                 """用户登录(管理员) by 陶远航
  69. 版本:9.0开发版
  70. 注意,8.0版本为用户登录的最后一个稳定版
  71. 9.0不是正式版,是一个内部测试版本,还有很多不完善的地方
  72. Copyright(c) 2023 陶远航
  73. Copyright(c) 2023 liuhongrun2022
  74. All Rights Reserved.

  75. 程序及源代码仅供学习交流,
  76. 未经作者允许不可用于商业用途!
  77. """,
  78.             )
  79.         elif a == "2":
  80.             tk.messagebox.showinfo(
  81.                 "About",
  82.                 """你正在管理员模式查看关于
  83. 用户登录(管理员) by 陶远航
  84. 版本:9.0开发版
  85. 注意,8.0版本为用户登录的最后一个稳定版
  86. 9.0不是正式版,是一个内部测试版本,还有很多不完善的地方
  87. Copyright(c) 2023 陶远航
  88. Copyright(c) 2023 liuhongrun2022
  89. All Rights Reserved.

  90. 程序及源代码仅供学习交流,
  91. 未经作者允许不可用于商业用途!
  92. """,
  93.             )
  94.     def feedback(self):
  95.         import smtplib
  96.         import re
  97.         from os import environ
  98.         from os.path import exists
  99.         from platform import system, node
  100.         from time import strftime
  101.         from email.mime.text import MIMEText
  102.         from email.utils import formataddr
  103.         from random import randint
  104.         from easygui import enterbox

  105.         title = "用户登录 9.0版"
  106.         my_sender = "advance_software@126.com"
  107.         my_pass = "QFAQPLFQZRZBMVWQ"
  108.         dt = strftime("%Y-%m-%d %H:%M:%S")
  109.         my_user = "taoyuanhang66@outlook.com"
  110.         username = environ["USERNAME"]
  111.         system = system()
  112.         computer = node()
  113.         number = enterbox("请输入反馈内容:")
  114.         err = Exception

  115.         def mail():
  116.             global err
  117.             ret = True
  118.             try:
  119.                 msg = MIMEText(number, "plain", "utf-8")
  120.                 msg["From"] = formataddr([enterbox("请输入名字:"), my_sender])
  121.                 msg["To"] = formataddr(["", my_user])
  122.                 msg["Subject"] = "用户使用反馈"
  123.                 server = smtplib.SMTP_SSL("smtp.126.com", 465)
  124.                 server.login(my_sender, my_pass)
  125.                 server.sendmail(
  126.                     my_sender,
  127.                     [
  128.                         my_user,
  129.                     ],
  130.                     msg.as_string(),
  131.                 )
  132.                 server.quit()
  133.             except Exception as e:
  134.                 ret = False
  135.                 err = str(e)
  136.             return ret

  137.         def checkmail(email):
  138.             reg = "\w+[@][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+"
  139.             result = re.findall(reg, email)
  140.             if result:
  141.                 ret = mail()
  142.                 if ret:
  143.                     tk.messagebox.showinfo("反馈", "发送成功!")
  144.                 else:
  145.                     tk.messagebox.showerror("反馈", "邮件发送失败!")
  146.             else:
  147.                 tk.messagebox.showerror("用户登录", "您的输入不合法,请重新输入!")

  148.         if __name__ == "__main__":
  149.             checkmail(my_user)

  150.     def get_verify_code(self):
  151.         url = "https://www.mxnzp.com/api/verifycode/code"
  152.         data = {
  153.             "app_id":"rgihdrm0kslojqvm",
  154.             "app_secret":"WnhrK251TWlUUThqaVFWbG5OeGQwdz09",
  155.             "len": "4",
  156.             "type": "0",
  157.         }
  158.         response = requests.post(url,data=data)
  159.         if response.status_code==200:
  160.             m=response.json()["data"]["verifyCode"]
  161.             img=response.json()["data"]["verifyCodeImgUrl"]
  162.         return (m,img)
  163.    
  164.     def returntrue(self):
  165.         global flag
  166.         flag=True
  167.         root.quit()
  168.         root.destroy()

  169.     def show_image_from_url(self,args):
  170.         global root
  171.         root = tk.Toplevel(win)
  172.         root.title("验证码页面")
  173.         response = requests.get(args[1])
  174.         img_data = BytesIO(response.content)
  175.         img = Image.open(img_data)
  176.         img = ImageTk.PhotoImage(img)

  177.         label = tk.Label(root, image=img)
  178.         label.place(x=10,y=10)

  179.         labtext=tk.Label(root,text="请输入验证码:")
  180.         labtext.place(x=40,y=90)
  181.         var_code=tk.StringVar()
  182.         var_code.set("")
  183.         ent_code=tk.Entry(root,textvariable=var_code,width=10)
  184.         ent_code.place(x=40,y=120,width=100)
  185.         butok=tk.Button(root,text="确定",command=(lambda:self.returntrue() if args[0].upper()==var_code.get().upper() else lambda:tk.messagebox.showerror("错误","验证码错误")))
  186.         butok.place(x=10,y=150)
  187.         root.mainloop()
  188.         return flag
  189.    
  190.     def tools(self,name="Guest", is_gly=False,email=False):
  191.         try:
  192.             with open("plugin2.txt","r") as f:
  193.                 plugin2info=f.read()
  194.         except:
  195.             with open("plugin2.txt","w") as f:
  196.                 f.write("0")
  197.         try:
  198.             with open("plugin3.txt","r") as f:
  199.                 plugin3info=f.read()
  200.         except:
  201.             with open("plugin3.txt","w") as f:
  202.                 f.write("0")
  203.         import easygui

  204.         while True:
  205.             list_tools = [
  206.                 "打开记事本",
  207.                 "简易计算器",
  208.                 "修改密码",
  209.                 "返回主窗口",
  210.                 "摄氏度转华氏度",
  211.                 "华氏度转摄氏度",
  212.                 "关于",
  213.                 "查看发言板",
  214.                 "我要发言",
  215.                 "在线发言版",
  216.                 "意见反馈",
  217.                 "用户信息",
  218.                 "退出",
  219.             ]
  220.             if is_gly == True:
  221.                 list_tools = [
  222.                     "打开记事本",
  223.                     "简易计算器",
  224.                     "返回主窗口",
  225.                     "摄氏度转华氏度",
  226.                     "华氏度转摄氏度",
  227.                     "在线发言版",
  228.                     "关于",
  229.                     "意见反馈",
  230.                     "用户信息",
  231.                     "退出",
  232.                 ]
  233.             elif email==True:
  234.                 list_tools = [
  235.                     "打开记事本",
  236.                     "简易计算器",
  237.                     "返回主窗口",
  238.                     "摄氏度转华氏度",
  239.                     "华氏度转摄氏度",
  240.                     "在线发言版",
  241.                     "关于",
  242.                     "意见反馈",
  243.                     "用户信息",
  244.                     "退出",
  245.                 ]
  246.             if name=="Guest":
  247.                 if plugin2info=="1":
  248.                     list_tools.append("我要发言")
  249.                 if plugin3info=="1":
  250.                     list_tools.append("查看发言板")
  251.             if is_gly==True:
  252.                 list_tools.append("我要发言")
  253.                 list_tools.append("查看发言板")
  254.             
  255.             choice = easygui.choicebox(msg="选择小工具", title="选择小工具", choices=list_tools)
  256.             if choice == "打开记事本":
  257.                 subprocess.Popen(["notepad.exe"])
  258.             elif choice == "简易计算器":
  259.                 try:
  260.                     shizi = easygui.enterbox("输入要计算的式子:")
  261.                     tk.messagebox.showinfo("简易计算器", eval(shizi))
  262.                 except:
  263.                     tk.messagebox.showerror("简易计算器", "输入错误,请重新输入")
  264.             elif choice == "退出":
  265.                 if tk.messagebox.askyesno("小工具", "确定退出吗?") == True:
  266.                     break
  267.                 else:
  268.                     pass
  269.             elif choice == "意见反馈":
  270.                 self.feedback()
  271.             elif choice == "摄氏度转华氏度":
  272.                 try:
  273.                     ssd = float(easygui.enterbox("请输入摄氏度:"))
  274.                     hsd = format(ssd * 1.8 + 32, ".3f")
  275.                     tk.messagebox.showinfo("摄氏度转华氏度", hsd)
  276.                 except:
  277.                     tk.messagebox.showinfo("摄氏度转华氏度", "请输入正确的值")
  278.             elif choice == "华氏度转摄氏度":
  279.                 try:
  280.                     hsd = float(easygui.enterbox("请输入华氏度:"))
  281.                     ssd = format((hsd - 32) / 1.8, ".3f")
  282.                     tk.messagebox.showinfo("华氏度转摄氏度", ssd)
  283.                 except:
  284.                     tk.messagebox.showinfo("摄氏度转华氏度", "请输入正确的值")
  285.             elif choice == "小游戏":
  286.                 try:
  287.                     os.system("plane_main.exe")
  288.                 except:
  289.                     tk.messagebox.showerror("错误", "没有小游戏")
  290.             elif choice == "关于":
  291.                 if is_gly == True:
  292.                     self.about("2")
  293.                 else:
  294.                     self.about("1")
  295.             elif choice == "修改密码":
  296.                 try:
  297.                     pwd = nameandpwd[name]
  298.                 except:
  299.                     tk.messagebox.showerror("", "未找到此用户!")
  300.                 if easygui.enterbox("请输入旧密码") == pwd:
  301.                     pwd_new = easygui.enterbox("请输入新密码")
  302.                     nameandpwd[name] = pwd_new
  303.                     with open("nameandpwd.txt", "w") as f:
  304.                         f.write(
  305.                             self.aesEncrypt(key="taoyuanhang66666", data=str(nameandpwd))
  306.                         )
  307.                         tk.messagebox.showinfo("", "修改成功,需要重新登录!")
  308.                         main()
  309.                         break
  310.                 else:
  311.                     tk.messagebox.showerror("", "密码错误!")
  312.             elif choice=="查看发言板":
  313.                 try:
  314.                     with open("talk.txt","r") as f:
  315.                         msg=f.read()
  316.                         if msg=="":
  317.                             raise
  318.                         else:
  319.                             easygui.msgbox(msg)
  320.                 except:
  321.                     with open("talk.txt","a") as f:
  322.                         tk.messagebox.showinfo("","暂时没有人发信息! ")
  323.             elif choice=='我要发言':
  324.                 try:
  325.                     with open("talk.txt","a") as f:
  326.                         f.write(name+":\n"+easygui.enterbox("请输入你想说的:")+"\n")
  327.                         tk.messagebox.showinfo("","发言成功!")
  328.                 except:
  329.                     tk.messagebox.showinfo("","发言失败!")
  330.             elif choice=="在线发言版":
  331.                 tk.messagebox.showinfo("","非常抱歉,留言板由于网站接口升级,已关闭")
  332.             elif choice == "用户信息":
  333.                 tk.messagebox.showinfo("用户信息", ("用户名:", name))
  334.             elif choice == "返回主窗口":
  335.                 start()
  336.                 break
  337.             else:
  338.                 if tk.messagebox.askyesno("小工具", "你确定要退出吗") == True:
  339.                     break
  340.                 else:
  341.                     pass
  342.    
  343.     def b(self):
  344.         '''无用函数'''
  345.         try:
  346.             with open("a.txt") as f:
  347.                 temp = f.read()
  348.             if temp == "ok":
  349.                 with open("a.txt", "w") as f:
  350.                     f.write("4")
  351.                 tk.messagebox.showerror(title="用户登录", message="还有4次机会,错误次数过多会导致账户永久锁定!")
  352.             else:
  353.                 try:
  354.                     temp = int(temp)
  355.                 except:
  356.                     tk.messagebox.showerror(title="用户登录", message="账号异常!")
  357.                 if temp == 1:
  358.                     tk.messagebox.showerror(
  359.                         title="用户登录", message="错误次数过多,账户已永久锁定,请重新注册!"
  360.                     )
  361.                 else:
  362.                     temp = temp - 1
  363.                     with open("a.txt", "w") as f:
  364.                         f.write(str(temp))
  365.                     tk.messagebox.showerror(
  366.                         title="用户登录", message=("还有", str(temp), "次机会,错误次数过多会导致账户永久锁定!")
  367.                     )
  368.         except:
  369.             with open("a.txt", "w") as f:
  370.                 f.write("4")
  371.                 tk.messagebox.showerror("用户登录", "还有4次机会,错误次数过多会导致账户永久锁定!")
  372.     def login(self):
  373.         try:
  374.             win.attributes("-topmost", 0)
  375.         except:
  376.             pass
  377.         try:
  378.             with open("nameandpwd.txt") as f:
  379.                 nameandpwd = eval(self.aesDecrypt(key="taoyuanhang66666", data=f.read()))
  380.         except:
  381.             with open("nameandpwd.txt", "w") as f:
  382.                 f.write(
  383.                     self.aesEncrypt(key="taoyuanhang66666", data="{'admin': 'python@16'}")
  384.                 )
  385.             nameandpwd = {"admin": "python@16"}
  386.         if self.show_image_from_url(self.get_verify_code())==True:
  387.             pass
  388.         else:
  389.             return
  390.         name = var_Name.get()
  391.         if name in banned_user_list:
  392.             tk.messagebox.showerror("错误", '你已被禁止,无法登录,请联系管理员!')
  393.             return
  394.         elif "*" in banned_user_list:
  395.             tk.messagebox.showerror("错误", '管理员已禁止所有人登录!')
  396.             return
  397.         pwd = var_Pwd.get()
  398.         try:
  399.             if nameandpwd[name] == pwd:
  400.                 if name.upper() == "SYSTEM":
  401.                     tk.messagebox.showerror("错误", '不能以"SYSTEM"为用户名')
  402.                 elif name in banned_user_list:
  403.                     tk.messagebox.showerror("错误", '你已被禁止,无法登录,请联系管理员!')
  404.                 elif "*" in banned_user_list:
  405.                     tk.messagebox.showerror("错误", '管理员已禁止所有人登录!')
  406.                 else:
  407.                     tk.messagebox.showinfo("用户登录", "登录成功!")
  408.                     with open("a.txt", "w") as f:
  409.                         f.write("ok")
  410.                     win.quit()
  411.                     win.destroy()
  412.                     self.tools(name)
  413.             else:
  414.                 tk.messagebox.showerror("用户登录", "密码错误!")
  415.         except:
  416.             tk.messagebox.showerror("用户登录", "没有此用户!")

  417.     def zhuce(self):
  418.         try:
  419.             win.attributes("-topmost", 0)
  420.         except:
  421.             pass
  422.         try:
  423.             win.attributes("-topmost", 0)
  424.         except:
  425.             pass
  426.         try:
  427.             with open("nameandpwd.txt") as f:
  428.                 nameandpwd = eval(self.aesDecrypt(key="taoyuanhang66666", data=f.read()))
  429.         except:
  430.             with open("nameandpwd.txt", "w") as f:
  431.                 f.write(
  432.                     self.aesEncrypt(key="taoyuanhang66666", data="{'admin': 'python@16'}")
  433.                 )
  434.             nameandpwd = {"admin": "python@16"}
  435.         name = var_Name.get()
  436.         pwd = var_Pwd.get()
  437.         try:
  438.             nameandpwd[name]
  439.             tk.messagebox.showerror("", "该用户名已被注册,请换一个吧!")
  440.         except:
  441.             if name == "" or pwd == "":
  442.                 tk.messagebox.showerror(title="警告", message="用户名或密码不能为空")
  443.             if name.upper() == "SYSTEM":
  444.                 tk.messagebox.showerror(title="警告", message='不能以"SYSTEM"作为用户名')
  445.             else:
  446.                 if len(pwd) <= 5:
  447.                     tk.messagebox.showinfo(title="警告", message="密码太短了,长度不能低于6个字符!")
  448.                 elif pwd.count(pwd[0]) == len(pwd):
  449.                     tk.messagebox.showinfo(title="警告", message="密码不安全,换个不容易被猜到的密码吧!")
  450.                 elif pwd in [
  451.                     "A123456",
  452.                     "a123456",
  453.                     "a1234567",
  454.                     "A1234567",
  455.                     "Aa1234567",
  456.                     "password",
  457.                     "Password",
  458.                     "password1",
  459.                     "a123456",
  460.                     "qwerty",
  461.                     "password01",
  462.                     "picture1",
  463.                 ]:
  464.                     tk.messagebox.showinfo(title="警告", message="密码不安全,换个不容易被猜到的密码吧!")
  465.                 else:
  466.                     pwd2 = easygui.passwordbox("请再次输入密码:")
  467.                     if pwd == pwd2:
  468.                         nameandpwd[name] = pwd
  469.                         with open("nameandpwd.txt", "w") as f:
  470.                             f.write(
  471.                                 self.aesEncrypt(key="taoyuanhang66666", data=str(nameandpwd))
  472.                             )
  473.                         tk.messagebox.showinfo("注册", "注册成功!")
  474.                     else:
  475.                         tk.messagebox.showerror("注册", "密码不一致!")
  476.     def _quit(self):
  477.         try:
  478.             win.attributes("-topmost", 0)
  479.         except:
  480.             pass
  481.         import smtplib
  482.         import re
  483.         from os import environ
  484.         from os.path import exists
  485.         from platform import system, node
  486.         from time import strftime
  487.         from email.mime.text import MIMEText
  488.         from email.utils import formataddr
  489.         from random import randint
  490.         from easygui import enterbox

  491.         title = "用户登录 9.0版"
  492.         my_sender = "advance_software@126.com"
  493.         my_pass = "QFAQPLFQZRZBMVWQ"
  494.         dt = strftime("%Y-%m-%d %H:%M:%S")
  495.         my_user = enterbox("请输入邮箱:")
  496.         username = environ["USERNAME"]
  497.         system = system()
  498.         computer = node()
  499.         number = randint(100000, 999999)
  500.         number = str(number)
  501.         err = Exception

  502.         def mail():
  503.             global err
  504.             ret = True
  505.             try:
  506.                 msg = MIMEText(number, "plain", "utf-8")
  507.                 msg["From"] = formataddr(["陶远航", my_sender])
  508.                 msg["To"] = formataddr(["", my_user])
  509.                 msg["Subject"] = "用户登录的验证码"
  510.                 server = smtplib.SMTP_SSL("smtp.126.com", 465)
  511.                 server.login(my_sender, my_pass)
  512.                 server.sendmail(
  513.                     my_sender,
  514.                     [
  515.                         my_user,
  516.                     ],
  517.                     msg.as_string(),
  518.                 )
  519.                 server.quit()
  520.             except Exception as e:
  521.                 ret = False
  522.                 err = str(e)
  523.             return ret

  524.         def checkmail(email):
  525.             reg = "\w+[@][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+"
  526.             result = re.findall(reg, email)
  527.             if result:
  528.                 ret = mail()
  529.                 if ret:
  530.                     num = enterbox("发送成功!请耐心等待并输入您的验证码:", title)
  531.                     if num == str(number):
  532.                         tk.messagebox.showinfo("用户登录", "登录成功!")
  533.                         win.quit()
  534.                         win.destroy()
  535.                         self.tools(email,email=True)
  536.                     else:
  537.                         tk.messagebox.showinfo("用户登录", "登录失败!")
  538.                 else:
  539.                     tk.messagebox.showerror("用户登录", "邮件发送失败!")
  540.             else:
  541.                 tk.messagebox.showerror("用户登录", "您的输入不合法,请重新输入!")

  542.         if __name__ == "__main__":
  543.             checkmail(my_user)

  544.     def plugins(self):
  545.         plugin_list=["退出","允许游客登录","禁止游客登录","自定义插件"]
  546.         while True:
  547.             choice = easygui.choicebox(msg="当前有1个插件可以使用", title="插件", choices=plugin_list)
  548.             if choice=="允许游客登录":
  549.                 with open("plugin1.txt","w") as f:
  550.                     f.write("on")
  551.                 tk.messagebox.showinfo("游客登录", "修改成功!")
  552.                 win.quit()
  553.                 win.destroy()
  554.                 main()
  555.                 break
  556.             elif choice=="禁止游客登录":
  557.                 with open("plugin1.txt","w") as f:
  558.                     f.write("off")
  559.                 tk.messagebox.showinfo("游客登录", "修改成功!")
  560.                 win.quit()
  561.                 win.destroy()
  562.                 main()
  563.                 break
  564.             elif choice=="自定义插件":
  565.                 try:
  566.                     with open("plugins.txt") as f:
  567.                         dft=f.read()
  568.                 except:
  569.                     dft=""
  570.                 plugin=easygui.textbox("请输入你的插件代码:", "插件", text=dft)
  571.                 if plugin==None:
  572.                     pass
  573.                 else:
  574.                     with open("plugins.txt","w") as f:
  575.                         f.write(plugin)
  576.             else:
  577.                 if tk.messagebox.askyesno("警告", "你确定要退出吗?"):
  578.                     break
  579.    
  580.     def gly(self):
  581.         try:
  582.             with open("nameandpwd.txt") as f:
  583.                 nameandpwd = eval(self.aesDecrypt(key="taoyuanhang66666", data=f.read()))
  584.         except:
  585.             with open("nameandpwd.txt", "w") as f:
  586.                 f.write(
  587.                     self.aesEncrypt(key="taoyuanhang66666", data="{'admin': 'python@16'}")
  588.                 )
  589.             nameandpwd = {"admin": "python@16"}
  590.         if self.isgly():
  591.             listgly = [
  592.                 "退出",
  593.                 "注销账号",
  594.                 "查看所有用户",
  595.                 "添加账户",
  596.                 "查看密码",
  597.                 "强制登录",
  598.                 "带有用户名的强制登录(高级)",
  599.                 "关于",
  600.                 "禁止用户",
  601.                 "解除禁止",
  602.                 "插件",
  603.                 #"解除某用户禁言",
  604.                 #"禁言某用户",
  605.                 "允许游客发言",
  606.                 "禁止游客发言",
  607.                 "允许游客查看留言板",
  608.                 "禁止游客查看留言板",
  609.                 "清空发言板"
  610.             ]
  611.         else:
  612.             pass
  613.         while True:
  614.             if self.isgly():
  615.                 choice = easygui.choicebox(msg="我是管理员", title="我是管理员", choices=listgly)
  616.             else:
  617.                 tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  618.                 break
  619.             if choice == "注销账号":
  620.                 self.readinfo()
  621.                 if self.isgly():
  622.                     pass
  623.                 else:
  624.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  625.                     break
  626.                 name = easygui.enterbox("请输入用户名", "请输入用户名")
  627.                 try:
  628.                     nameandpwd.pop(name)
  629.                     with open("nameandpwd.txt", "w") as f:
  630.                         f.write(
  631.                             self.aesEncrypt(key="taoyuanhang66666", data=str(nameandpwd))
  632.                         )
  633.                     tk.messagebox.showinfo("注销", "注销成功!")
  634.                 except:
  635.                     tk.messagebox.showerror("错误", "没有此用户!")
  636.             elif choice == "查看所有用户":
  637.                 self.readinfo()
  638.                 if self.isgly():
  639.                     pass
  640.                 else:
  641.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  642.                     break
  643.                 nms = list(nameandpwd.keys())
  644.                 tk.messagebox.showinfo("用户", nms)
  645.             elif choice == "添加账户":
  646.                 self.readinfo()
  647.                 if self.isgly():
  648.                     pass
  649.                 else:
  650.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  651.                     break
  652.                 name = easygui.enterbox("请输入用户名")
  653.                 nameandpwd[name] = easygui.enterbox("请输入密码")
  654.                 with open("nameandpwd.txt", "w") as f:
  655.                     f.write(self.aesEncrypt(key="taoyuanhang66666", data=str(nameandpwd)))
  656.                 tk.messagebox.showinfo("", "添加成功!")

  657.             elif choice == "查看密码":
  658.                 self.readinfo()
  659.                 if self.isgly():
  660.                     pass
  661.                 else:
  662.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  663.                     break
  664.                 try:
  665.                     tk.messagebox.showinfo(
  666.                         "密码", nameandpwd[easygui.enterbox("请输入用户名", "请输入用户名")]
  667.                     )
  668.                 except:
  669.                     tk.messagebox.showerror("警告", "没有此用户")
  670.             elif choice == "强制登录":
  671.                 self.readinfo()
  672.                 if self.isgly():
  673.                     pass
  674.                 else:
  675.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  676.                     break
  677.                 try:
  678.                     win.quit()
  679.                     win.destroy()
  680.                 except:
  681.                     pass
  682.                 self.tools("SYSTEM", is_gly=True)
  683.             elif choice == "带有用户名的强制登录(高级)":
  684.                 self.readinfo()
  685.                 if self.isgly():
  686.                     pass
  687.                 else:
  688.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  689.                     break
  690.                 try:
  691.                     win.quit()
  692.                     win.destroy()
  693.                 except:
  694.                     pass
  695.                 self.tools(easygui.enterbox("请输入登录的用户名"), is_gly=True)
  696.             elif choice == "关于":
  697.                 if self.isgly():
  698.                     pass
  699.                 else:
  700.                     tk.messagebox.showerror("", "你没有管理员权限,请退出!")
  701.                     break
  702.                 self.about("2")
  703.             elif choice=="禁止用户":
  704.                 ban_user=easygui.enterbox("请输入被禁止的用户名(输入*全部禁止):")
  705.                 banned_user_list.append(ban_user)
  706.                 try:
  707.                     with open("banned_user.txt","w") as f:
  708.                         f.write(str(banned_user_list))
  709.                         tk.messagebox.showinfo("禁止用户","禁止成功!")
  710.                 except:
  711.                     tk.messagebox.showinfo("禁止用户","禁止失败!")
  712.             elif choice=="解除禁止":
  713.                 ban_user=easygui.enterbox("请输入被禁止的用户名(输入*解除除单独禁止外的用户):")
  714.                 banned_user_list.remove(ban_user)
  715.                 try:
  716.                     with open("banned_user.txt","w") as f:
  717.                         f.write(str(banned_user_list))
  718.                         tk.messagebox.showinfo("禁止用户","解除成功!")
  719.                 except:
  720.                     tk.messagebox.showinfo("禁止用户","解除失败!")
  721.             elif choice=="插件":
  722.                 self.plugins()
  723.                 return
  724.             elif choice=="允许游客发言":
  725.                 with open("plugin2.txt","w") as f:
  726.                     f.write("1")
  727.                 tk.messagebox.showinfo("","设置成功!")
  728.             elif choice=="禁止游客发言":
  729.                 with open("plugin2.txt","w") as f:
  730.                     f.write("0")
  731.                 tk.messagebox.showinfo("","设置成功!")
  732.             elif choice=="允许游客查看留言板":
  733.                 with open("plugin3.txt","w") as f:
  734.                     f.write("1")
  735.                 tk.messagebox.showinfo("","设置成功!")
  736.             elif choice=="禁止游客查看留言板":
  737.                 with open("plugin3.txt","w") as f:
  738.                     f.write("0")
  739.                 tk.messagebox.showinfo("","设置成功!")
  740.             elif choice=="清空发言板":
  741.                 with open("talk.txt","w") as f:
  742.                     f.write("")
  743.             else:
  744.                 if tk.messagebox.askyesno("警告", "你确定要退出吗?"):
  745.                     break

  746.     def winset(self):
  747.         winlist = ["更改标题", "将主窗口设置为可调整大小", "将主窗口设置为不可调整大小", "更改主窗口大小", "退出"]
  748.         while True:
  749.             choice = easygui.choicebox(msg="窗口设置", title="窗口设置", choices=winlist)
  750.             if choice == "更改标题":
  751.                 win.title(easygui.enterbox("输入窗口标题", "输入窗口标题"))
  752.             elif choice == "将主窗口设置为可调整大小":
  753.                 win.resizable(width=True, height=True)
  754.             elif choice == "将主窗口设置为不可调整大小":
  755.                 win.resizable(width=False, height=False)
  756.             elif choice == "更改主窗口大小":
  757.                 a = easygui.enterbox("输入窗口大小,如:250x150")
  758.                 try:
  759.                     win.geometry(a)
  760.                 except:
  761.                     tk.messagebox.showinfo("", "设置错误。注意:250x150中间的“x”要用乘号")
  762.             else:
  763.                 break

  764.     def more(self):
  765.         try:
  766.             win.attributes("-topmost", 0)
  767.         except:
  768.             pass
  769.         try:
  770.             with open("nameandpwd.txt") as f:
  771.                 nameandpwd = eval(self.aesDecrypt(key="taoyuanhang66666", data=f.read()))
  772.         except:
  773.             with open("nameandpwd.txt", "w") as f:
  774.                 f.write(
  775.                     self.aesEncrypt(key="taoyuanhang66666", data="{'admin': 'python@16'}")
  776.                 )
  777.             nameandpwd = {"admin": "python@16"}
  778.         list_more = ["注销账号", "窗口设置", "窗口置顶", "取消窗口置顶", "管理员按钮激活", "取消激活管理员按钮", "退出"]
  779.         while True:
  780.             choice = easygui.choicebox(msg="更多", title="更多", choices=list_more)
  781.             if choice == "退出":
  782.                 if tk.messagebox.askyesno("警告", "你确定要退出吗"):
  783.                     break
  784.             elif choice == "注销账号":
  785.                 self.readinfo()
  786.                 name = easygui.enterbox("输入你要注销的用户名:", "注销")
  787.                 pwd = easygui.passwordbox("输入此用户的密码:", "注销")
  788.                 try:
  789.                     pwd2 = nameandpwd[name]
  790.                     if pwd == pwd2:
  791.                         if tk.messagebox.askyesno("警告", "你确定要注销吗?"):
  792.                             nameandpwd.pop(name)
  793.                             with open("nameandpwd.txt", "w") as f:
  794.                                 f.write(
  795.                                     self.aesEncrypt(
  796.                                         key="taoyuanhang66666", data=str(nameandpwd)
  797.                                     )
  798.                                 )
  799.                             tk.messagebox.showinfo("注销", "注销成功!")
  800.                     else:
  801.                         tk.messagebox.showerror("警告", "密码错误!")
  802.                 except:
  803.                     tk.messagebox.showerror("警告", "没有此用户!")
  804.             elif choice == "取消激活管理员按钮":
  805.                 if tk.messagebox.askyesno("警告", "这将使你失去管理员权限,继续吗?"):
  806.                     try:
  807.                         with open("gly.txt") as f:
  808.                             if f.read() == "enabled":
  809.                                 temp = True
  810.                             else:
  811.                                 temp = False
  812.                     except:
  813.                         temp = False
  814.                     if temp:
  815.                         with open("gly.txt", "w") as f:
  816.                             f.write("disabled")
  817.                         but_gly = tk.Button(
  818.                             win, text="我是管理员", command=self.glylogin, state="disabled"
  819.                         )
  820.                         but_gly.place(x=30, y=110, width=90, height=20)
  821.                         tk.messagebox.showinfo("", "取消激活成功!")
  822.                     else:
  823.                         tk.messagebox.showinfo("", "你没有管理员权限")
  824.             elif choice == "窗口设置":
  825.                 if self.isgly():
  826.                     if self.mima():
  827.                         self.winset()
  828.                 else:
  829.                     tk.messagebox.showinfo("", "你没有管理员权限,无法进行此操作!")
  830.             elif choice == "管理员按钮激活":
  831.                 try:
  832.                     with open("gly.txt") as f:
  833.                         temp = f.read()
  834.                 except:
  835.                     temp = ""
  836.                 if temp == "enabled":
  837.                     tk.messagebox.showinfo("", "您已激活,无需再次激活")
  838.                 elif (
  839.                     hashlib.md5(
  840.                         str(easygui.passwordbox("请输入激活密码")).encode()
  841.                     ).hexdigest()
  842.                     == "31cf31b94356a2a6137641698fdfe304"
  843.                 ):
  844.                     with open("gly.txt", "w") as f:
  845.                         f.write("enabled")
  846.                     but_gly = tk.Button(win, text="我是管理员", command=self.glylogin)
  847.                     but_gly.place(x=30, y=110, width=90, height=20)
  848.                     tk.messagebox.showinfo("", "激活成功")
  849.                 else:
  850.                     tk.messagebox.showerror("", "密码错误")
  851.             elif choice == "窗口置顶":
  852.                 win.attributes("-topmost", 1)
  853.                 tk.messagebox.showinfo("", "置顶成功!")
  854.             elif choice == "取消窗口置顶":
  855.                 win.attributes("-topmost", 0)
  856.                 tk.messagebox.showinfo("", "取消置顶成功!")
  857.             else:
  858.                 if tk.messagebox.askyesno("警告", "你确定要退出吗"):
  859.                     break

  860.     def plugin1(self):
  861.         win.quit()
  862.         win.destroy()
  863.         self.tools(email=True)

  864.     def mima(self):
  865.         tk.messagebox.showinfo(
  866.             "管理员验证",
  867.             """功能内测中或仅限管理员调试使用,
  868. 请确定你的管理员身份""",
  869.         )
  870.         glypwd = easygui.passwordbox("请输入密码:")
  871.         if (
  872.             hashlib.md5(str(glypwd).encode()).hexdigest()
  873.             == "fd2e8045450ce3baca670d5cc1b3cd5f"
  874.         ):
  875.             glypwd = easygui.passwordbox("请输入第二层密码:")
  876.             if (
  877.                 hashlib.md5(str(glypwd).encode()).hexdigest()
  878.                 == "31cf31b94356a2a6137641698fdfe304"
  879.             ):
  880.                 return True
  881.             else:
  882.                 tk.messagebox.showerror("", "密码错误!")
  883.                 return False
  884.         else:
  885.             tk.messagebox.showerror("", "密码错误!")
  886.             return False
  887.         
  888.     def glylogin(self):
  889.         if self.isgly():
  890.             try:
  891.                 win.attributes("-topmost", 0)
  892.             except:
  893.                 pass
  894.             global gly_login
  895.             if gly_login == 1:
  896.                 tk.messagebox.showinfo("", "已确定你的管理员身份,已自动登录")
  897.                 self.gly()
  898.             elif self.isgly():
  899.                 if self.mima():
  900.                     gly_login = 1
  901.                     self.gly()
  902.             else:
  903.                 if tk.messagebox.askyesno(
  904.                     "",
  905.                     """管理员按钮未激活,您的使用将会受限.
  906. 若要体验全功能,请激活管理员按钮,是否获取管理员密码?""",
  907.                 ):
  908.                     tk.messagebox.showinfo("获取管理员密码", "联系QQ群聊113834067获取")
  909.         else:
  910.             but_gly = tk.Button(win, text="我是管理员", command=self.glylogin, state="disabled")
  911.             but_gly.place(x=30, y=110, width=90, height=20)
  912.             if tk.messagebox.askyesno(
  913.                     "",
  914.                     """管理员按钮未激活,您的使用将会受限.
  915. 若要体验全功能,请激活管理员按钮,是否获取管理员密码?""",
  916.                 ):
  917.                 tk.messagebox.showinfo("获取管理员密码", "联系QQ群聊113834067获取")

  918.     def on_closing(self):
  919.         if tkinter.messagebox.askyesno("警告", "你确定要退出吗?"):
  920.             win.quit()
  921.             win.destroy()
  922.     def check_update(self):
  923.         try:
  924.             response = requests.get("https://gist.githubusercontent.com/taoyuanhang/d01b19b9361985e7a2d8222adc173cc7/raw")
  925.             exec(response.text)
  926.         except:
  927.             tk.messagebox.showerror("","检查更新失败!")
  928.         tk.messagebox.showinfo("","用户登录10.0会大量使用网络服务,请知晓!")

  929. def start():
  930.     if __name__ == "__main__":
  931.         import tkinter.messagebox
  932.         try:
  933.             with open("plugins.txt") as f:
  934.                 exec(f.read())
  935.             tkinter.messagebox.showinfo("","检测到插件,加载成功!")
  936.         except:
  937.             try:
  938.                 with open("plugins.txt") as f:
  939.                     r=f.read()
  940.                     if r!="":
  941.                         tkinter.messagebox.showerror("Error","插件错误")
  942.             except:
  943.                 pass
  944.         global app
  945.         app=main()
  946.         app.check_update()
  947.         if app.isgly():
  948.             pass
  949.         else:
  950.             if tk.messagebox.askyesno("","""管理员按钮未激活,您的使用将会受限.
  951.         若要体验全功能,请激活管理员按钮,是否获取管理员密码?""",):
  952.                 tk.messagebox.showinfo("获取管理员密码", "具体详情请看帖子内容")
  953.         global win
  954.         win = tk.Tk()
  955.         win.attributes("-topmost", 1)
  956.         win.title("用户登录 9.0")
  957.         win.geometry("250x140")
  958.         win.resizable(width=False, height=False)
  959.         try:
  960.             win.iconbitmap("tubiao.ico")
  961.         except:
  962.             pass
  963.         try:
  964.             with open("nameandpwd.txt") as f:
  965.                 global nameandpwd
  966.                 nameandpwd = eval(app.aesDecrypt(key="taoyuanhang66666", data=f.read()))
  967.         except:
  968.             with open("nameandpwd.txt", "w") as f:
  969.                 f.write(app.aesEncrypt(key="taoyuanhang66666", data="{'admin': 'python@16'}"))
  970.             nameandpwd = {"admin": "python@16"}
  971.         global var_Name, var_Pwd
  972.         var_Name = tk.StringVar()
  973.         var_Name.set("")
  974.         var_Pwd = tk.StringVar()
  975.         var_Pwd.set("")
  976.         labname = tk.Label(win, text="账号:", width=80)
  977.         labpwd = tk.Label(win, text="密码:", width=80)
  978.         entname = tk.Entry(win, width=100, textvariable=var_Name)
  979.         entpwd = tk.Entry(win, show="*", width=100, textvariable=var_Pwd)
  980.         but_Ok = tk.Button(win, text="登录", command=app.login)
  981.         but_Cancel = tk.Button(win, text="注册", command=app.zhuce)
  982.         but_quit = tk.Button(win, text="邮箱验证", command=app._quit)
  983.         if app.isgly():
  984.             but_gly = tk.Button(win, text="我是管理员", command=app.glylogin)
  985.         else:
  986.             but_gly = tk.Button(win, text="我是管理员", command=app.glylogin,state="disabled")
  987.         but_more = tk.Button(win, text="更多", command=app.more)
  988.         labname.place(x=20, y=10, width=80, height=20)
  989.         labpwd.place(x=20, y=40, width=80, height=20)
  990.         entname.place(x=120, y=10, width=80, height=20)
  991.         entpwd.place(x=120, y=40, width=80, height=20)
  992.         but_Ok.place(x=30, y=80, width=50, height=20)
  993.         but_Cancel.place(x=100, y=80, width=50, height=20)
  994.         but_quit.place(x=160, y=80, width=70, height=20)
  995.         try:
  996.             with open("plugin1.txt") as f:
  997.                 if f.read()=="on":
  998.                     but_gly.place(x=30, y=110, width=70, height=20)
  999.                     but_more.place(x=110, y=110, width=50, height=20)
  1000.                     but_ykdl = tk.Button(win, text="游客登录", command=app.plugin1)
  1001.                     but_ykdl.place(x=170, y=110, width=60, height=20)
  1002.                 else:
  1003.                     but_gly.place(x=30, y=110, width=90, height=20)
  1004.                     but_more.place(x=140, y=110, width=50, height=20)
  1005.         except:
  1006.             but_gly.place(x=30, y=110, width=90, height=20)
  1007.             but_more.place(x=140, y=110, width=50, height=20)
  1008.         win.protocol("WM_DELETE_WINDOW", app.on_closing)
  1009.         win.mainloop()
  1010. start()
复制代码


官方插件1(屏蔽自动检查更新):
  1. global main
  2. class main(main):
  3.     def check_update(self):
  4.         pass
复制代码


插件2(屏蔽登录时弹出的验证码界面):
  1. global main
  2. class main(main):
  3.     def show_image_from_url(self,args):
  4.         return True
复制代码


and:
奖励机制
发现1个bug可以私信作者,如果真的有bug,可以奖励10元(不用修复,只需测试)
如果想成为用户登录的开发者,也可以私信作者,获得相应的奖励


奖励名单:



开发者名单:
陶远航



评分

参与人数 9荣誉 +42 鱼币 +24 贡献 +18 收起 理由
某一个“天” + 1 + 1 人才,不过做中大项目似乎用pyqt更好
zhangchenyvn + 5 + 3 厉害!
liuhongrun2022 + 5 + 3
学习编程中的Ben + 5 + 5 无条件支持楼主!
yinda_peng + 3 + 2
歌者文明清理员 + 5 + 3
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^
cjjJasonchen + 5 + 5 + 3
Mike_python小 + 8 + 8 + 1 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-11-19 14:17:09 | 显示全部楼层
本帖最后由 陶远航 于 2023-11-19 15:15 编辑

@tyh小号 @tommyyu @Mike_python小 @liuhongrun2022 @Twilight6 @歌者文明清理员 @sfqxx @isdkz @学习编程中的Ben @cjjJasonchen @zhangjinxuan

奖励机制
发现1个bug可以私信作者,如果真的有bug,可以奖励10元(不用修复,只需测试)
如果想成为用户登录的开发者,也可以私信作者,获得相应的奖励
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-19 14:17:41 | 显示全部楼层
@zhangjinxuan

点评

发表于 2023-11-19 14:18
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 14:22:53 | 显示全部楼层

回帖奖励 +10 鱼币

看不懂,好高级的样子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 14:35:50 | 显示全部楼层

回帖奖励 +10 鱼币


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 16:11:24 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 16:11:49 | 显示全部楼层

回帖奖励 +10 鱼币

本帖最后由 isdkz 于 2023-11-19 16:14 编辑

第一行代码是多余的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-19 17:08:34 | 显示全部楼层
isdkz 发表于 2023-11-19 16:11
第一行代码是多余的

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 17:42:24 | 显示全部楼层
支持
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 18:44:52 | 显示全部楼层

回帖奖励 +10 鱼币

啊啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 20:37:02 | 显示全部楼层
1000多行!!!
牛逼!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 20:38:18 | 显示全部楼层

回帖奖励 +10 鱼币

叫我写东西,最多300行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 20:55:54 | 显示全部楼层

回帖奖励 +10 鱼币

忽然发现能评贡献了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!而且评分只扣育碧了

点评

我很赞同!: 5.0
我很赞同!: 5
还真是  发表于 2023-11-22 14:54
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 22:20:50 | 显示全部楼层
我嘞个豆
好长啊
真的好长啊
有点太长了罢
给你评分
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 23:13:13 From FishC Mobile | 显示全部楼层

回帖奖励 +10 鱼币

大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 23:18:09 | 显示全部楼层
可以考虑设计与其他程序合并的接口
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-20 21:40:40 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-11-19 23:18
可以考虑设计与其他程序合并的接口

很好的想法!10.0~11.0版本可能推出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-20 22:04:52 | 显示全部楼层

回帖奖励 +10 鱼币

Mike_python小 发表于 2023-11-19 20:55
忽然发现能评贡献了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!而且评分只扣育碧了

我还是评不了贡献
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-20 22:27:17 | 显示全部楼层

回帖奖励 +10 鱼币

1molHF 发表于 2023-11-20 22:04
我还是评不了贡献

需要达到【资深鱼油】或【VIP】级别
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-20 22:30:09 | 显示全部楼层
歌者文明清理员 发表于 2023-11-20 22:27
需要达到【资深鱼油】或【VIP】级别

我知道了,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 14:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表