找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 44238|回复: 31

[脚本] 谁能帮我写个ROS充值脚本支持3.30以上的?

  [复制链接]
发表于 2011-11-8 21:22:23 | 显示全部楼层 |阅读模式
悬赏50铜板未解决
本帖最后由 lsdeng 于 2011-11-10 13:35 编辑

群里的高手能否根据Mxso 的ExpAuto 脚本帮我改写成月账号脚本?  也希望Mxso出手帮忙!谢谢!



实现功能:

1、月账号:当用户使用含有“use30”开头的账号拨号上网时,系统会自动将账号去除use30,并且备注上[日期]  日期为下个月今天。例如:今天是Nov/08/2011   用户使用“use3012345678”拨号上网,脚本检测到后,将账号改写成“12345678”同时备注下个月的今天[20111208]

8#楼 lzw83 朋友这个方法也挺好:#找出含有“use”的已拨帐号,并根据其后面2位数判断出此帐号到期时间,并修改帐号名称。如:当前日期为“20111109”,帐号为“use30test333”,首次拨号成功后,帐号被改为“test333”,备注为“test333[20111109+30]到期”

2、后期还可以为季度账号、半年账号、年账号
  1. # 脚本名称: ExpAuto
  2. # 脚本版本: 1.03
  3. # 脚本作者: Mxso
  4. # Email: mxsogm@gmail.com
  5. # QQ/TM: 84046811
  6. # 版本日期: 2011年1月3日
  7. # 适用系统: (实例为 PPPoE到期 Web Proxy 错误页面通知,提前3天通知用户,到期停止用户,3.30测试通过,其他版本未测试)
  8. # 脚本功能: 对PPP及Hotspot用户期限操作;此脚本的实例对用户状态(禁用/启用)进行设置及剔除到期在线用户,添加其他功能可参考下面例子
  9. # 其他功能: 通过注释添加system scheduler星期制的禁用启用,注释格式:[7位布尔值]第一位是星期日,第二位是星期一,以此类推,E为启用,D为禁用
  10. # 例:[EDDDDDE]代表只有周六日启用该scheduler,[DEEEEED]这个刚好相反,只有星期一至五启用该scheduler;
  11. # 注意:被设置状态(启用/禁用)的scheduler运行时间不能调整到刚好00:00:00,因为00:00:00刚好在执行此脚本,未能00:00:00就设置好状态

  12. # 添加用户注释日期格式:
  13. # 例1:"张三[20100608]到期"(双引号里面为注释内容,[]里面为日期八位数字),
  14. # 例2:"李四[+365]到期",[+365]指当前日期加365天,在下次调用脚本时注释将自动变为"李四[八位当前日期+365]到期",
  15. # 假设当前日期为2010年4月4日立即调用脚本注释内容将变为"李四[20100404+365]到期",也就是2010年4月4日的365天后到期
  16. # 例3:支持累加运算,假设[20090501+365]将近到期,用户续费可以在后面添加+X天,[20090501+365+180]这里加180天

  17. #获取公元至今日( $Today 变量为公元至今已过的天数)
  18. :local Date [/system clock get date];:local Year ([:pick $Date 7 11]-1)
  19. :local Month ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $Date 0 3]])
  20. :local Day [:pick $Date 4 6];:if ([:pick $Date 4 5] = 0) do={:set Day [:pick $Date 5 6]};:set Day ($Day-1)
  21. :local leapyear 0,31,59,90,120,151,181,212,243,273,304,334,0,31,60,91,121,152,182,213,244,274,305,335
  22. :global Today ($Year*365+$Year/4);:if (($Year-$Year/4*4) != 3) do={:set Today ($Today+[:pick $leapyear $Month]+$Day)} else={:set Today ($Today+[:pick $leapyear ($Month+12)]+$Day)}
  23. :local usname;:local uspfl;:local Ccomment;:local lc;:local rc;:local Exp;:local js;:local pcl;:local CYear;:local CMonth;:local CDay;:local CToday

  24. #利用公元天数计算今天是星期几,0代表星期日
  25. :global Week ($Today-$Today/7*7)
  26. #:log info ("今天是星期" . $Week)

  27. #scheduler处理开始
  28. /system scheduler
  29. :foreach i in=[find comment!="" name!="ExpAuto"] do={
  30. :set Ccomment [get $i comment];:set lc [:find $Ccomment "["];:set rc [:find $Ccomment "]"]
  31. :if ([:typeof $lc]="num" && [:typeof $rc]="num" && ($lc+1+$Week)<$rc) do={
  32. :set Exp [:pick $Ccomment ($lc+1+$Week)]
  33. :if ($Exp="e"||$Exp="E"||$Exp="1") do={:if ([get $i disabled ]) do={enable $i}}
  34. :if ($Exp="d"||$Exp="D"||$Exp="0") do={:if (![get $i disabled ]) do={disable $i}}
  35. }}
  36. #scheduler处理结束


  37. #PPP处理开始
  38. /ppp secret
  39. :foreach i in=[find comment!=""] do={
  40. :set Ccomment [get $i comment];:set lc [:find $Ccomment "["];:set rc [:find $Ccomment "]"]
  41. :if ([:typeof $lc]="num" && [:typeof $rc]="num" && $lc<$rc) do={
  42. :set Exp [:pick $Ccomment ($lc+1) $rc];:set js 0;:set CToday 0
  43. :if ([:pick $Exp 0 1]!="+" && [:len $Exp]>7 && [:typeof [:tonum [:pick $Exp 0 8]]]="num") do={
  44. :set usname [get $i name];:set uspfl [get $i profile];:set CYear ([:pick $Exp 0 4]-1);:set CToday ($CYear*365+$CYear /4)
  45. :set CMonth [:pick $Exp 4 6];:if ([:pick $Exp 4 5] = 0) do={ :set CMonth [:pick $Exp 5 6]};:set CMonth ($CMonth-1)
  46. :set CDay [:pick $Exp 6 8];:if ([:pick $Exp 6 7] = 0) do={ :set CDay [:pick $Exp 7 8]};:set CDay ($CDay-1)
  47. :if (($CYear-$CYear/4*4) != 3) do={:set CToday ($CToday+[:pick $leapyear $CMonth]+$CDay)} else={:set CToday ($CToday+[:pick $leapyear ($CMonth+12)])}}
  48. :set pcl [:find $Exp "+"];:if ([:typeof $pcl]="num" && ($pcl>7 || $pcl=0) && ([:len $Exp]-1)>$pcl) do={
  49. :if ($pcl = 0) do={:set CToday $Today;:set CYear ($Year+1);:set CMonth ($Month+1);:set CDay ($Day+1)
  50. :if ([:len $CMonth]<2) do={:set CMonth ("0" . $CMonth)};:if ([:len $CDay]<2) do={:set CDay ("0" . $CDay)}
  51. set $i comment=([:pick $Ccomment 0 $lc] . "[" .($CYear . $CMonth . $CDay) . [:pick $Exp $pcl [:len $Exp]] . "]" . [:pick $Ccomment ($rc+1) [:len $Ccomment]])}
  52. :while ([:typeof [:find $Exp "+"]]="num") do={
  53. :set Exp [:pick $Exp ($pcl+1) [:len $Exp]];:set pcl [:find $Exp "+"];:if ([:typeof $pcl]!="num") do={:set pcl [:len $Exp]}
  54. :set js ($js+[:tonum [:pick $Exp 0 $pcl]])};:set CToday ($CToday+$js)}
  55. #例子1:禁用并剔出到期PPP用户
  56. :if ($CToday < $Today) do={:if (![get $i disabled ]) do={disable $i;/ppp active remove [find name=$usname]}} else={:if ([get $i disabled ]) do={enable $i}}
  57. #例子2:提前3天踢出到期用户并给予设置到期规则
  58. :if (($CToday-3) < $Today) do={:if (![get $i disabled ] && [:pick $uspfl 0 8]!="ExpAuto_") do={
  59. :if ([:len [..profile find name="ExpAuto_" . $uspfl]]=0) do={..profile add name=("ExpAuto_" . $uspfl) copy-from=$uspfl address-list=ExpAuto_expired}
  60. set $i profile=("ExpAuto_" . $uspfl);/ppp active remove [find name=$usname]}} else={:if ([:pick $uspfl 0 8]="ExpAuto_") do={
  61. :if ([:len [..profile find name=[:pick $uspfl 8 [:len $uspfl]]]]=0) do={..profile add name=[:pick $uspfl 8 [:len $uspfl]] copy-from=$uspfl address-list=""}
  62. set $i profile=[:pick $uspfl 8 [:len $uspfl]];:foreach acus in=[/ppp active find name=$usname] do={:local tempipaddr [/ppp active get $acus address]
  63. /ip firewall address-list remove [find list=ExpAuto_expired address=$tempipaddr];/ip firewall address-list remove [find list=ExpAuto_allow address=$tempipaddr]}}}
  64. #根据需要可添加或替换对用户的操作例子,假设提前5天,则在条件:if (($CToday-5) < $Today) do={执行通知操作…}
  65. #:if (($CToday-5) < $Today) do={执行通知操作…}

  66. }}
  67. #PPP处理结束



  68. #Hotspot处理开始
  69. /ip hotspot user
  70. :foreach i in=[find comment!=""] do={
  71. :set Ccomment [get $i comment];:set lc [:find $Ccomment "["];:set rc [:find $Ccomment "]"]
  72. :if ([:typeof $lc]="num" && [:typeof $rc]="num" && $lc<$rc) do={
  73. :set Exp [:pick $Ccomment ($lc+1) $rc];:set js 0;:set CToday 0
  74. :if ([:pick $Exp 0 1]!="+" && [:len $Exp]>7 && [:typeof [:tonum [:pick $Exp 0 8]]]="num") do={
  75. :set usname [get $i name];:set uspfl [get $i profile];:set CYear ([:pick $Exp 0 4]-1);:set CToday ($CYear*365+$CYear /4)
  76. :set CMonth [:pick $Exp 4 6];:if ([:pick $Exp 4 5] = 0) do={ :set CMonth [:pick $Exp 5 6]};:set CMonth ($CMonth-1)
  77. :set CDay [:pick $Exp 6 8];:if ([:pick $Exp 6 7] = 0) do={ :set CDay [:pick $Exp 7 8]};:set CDay ($CDay-1)
  78. :if (($CYear-$CYear/4*4) != 3) do={:set CToday ($CToday+[:pick $leapyear $CMonth]+$CDay)} else={:set CToday ($CToday+[:pick $leapyear ($CMonth+12)])}}
  79. :set pcl [:find $Exp "+"];:if ([:typeof $pcl]="num" && ($pcl>7 || $pcl=0) && ([:len $Exp]-1)>$pcl) do={
  80. :if ($pcl = 0) do={:set CToday $Today;:set CYear ($Year+1);:set CMonth ($Month+1);:set CDay ($Day+1)
  81. :if ([:len $CMonth]<2) do={:set CMonth ("0" . $CMonth)};:if ([:len $CDay]<2) do={:set CDay ("0" . $CDay)}
  82. set $i comment=([:pick $Ccomment 0 $lc] . "[" .($CYear . $CMonth . $CDay) . [:pick $Exp $pcl [:len $Exp]] . "]" . [:pick $Ccomment ($rc+1) [:len $Ccomment]])}
  83. :while ([:typeof [:find $Exp "+"]]="num") do={
  84. :set Exp [:pick $Exp ($pcl+1) [:len $Exp]];:set pcl [:find $Exp "+"];:if ([:typeof $pcl]!="num") do={:set pcl [:len $Exp]}
  85. :set js ($js+[:tonum [:pick $Exp 0 $pcl]])};:set CToday ($CToday+$js)}
  86. #例子1:设置Hotspot用户状态(禁用并剔除和启用)
  87. :if ($CToday < $Today) do={:if (![get $i disabled ]) do={disable $i;/ip hotspot active remove [find name=$usname]}} else={:if ([get $i disabled ]) do={enable $i}}
  88. #:if (($CToday-5) < $Today) do={执行的操作…}

  89. }}
  90. #Hotspot处理结束
复制代码

补充内容 (2011-11-17 20:20):
问题已经得到解决,在此非常感谢大伙的热心支持!!

补充内容 (2011-11-17 20:21):
还问个问题,怎么关闭问题呀?

评分

参与人数 1铜板 +1 收起 理由
WGHBOY + 1 两年前写过,很短的,不需要这么长

查看全部评分

routeros
 楼主| 发表于 2011-11-8 21:23:48 | 显示全部楼层
本帖最后由 lsdeng 于 2011-11-8 21:33 编辑

季度账号use90    半年账号use180  年账号use360
routeros
回复

使用道具 举报

发表于 2011-11-8 21:44:05 | 显示全部楼层
这个功能真牛逼啊,不知道能否实现。哈哈
routeros
回复

使用道具 举报

 楼主| 发表于 2011-11-8 21:50:51 | 显示全部楼层
嗯,希望各界高手出手帮忙!  感激不尽!
routeros
回复

使用道具 举报

发表于 2011-11-8 23:15:38 | 显示全部楼层
没看懂楼主用意,只能飘过
routeros
回复

使用道具 举报

发表于 2011-11-8 23:19:04 | 显示全部楼层
能改,初步估计改动也不是很大
routeros
回复

使用道具 举报

发表于 2011-11-9 00:31:26 | 显示全部楼层
500RMB都改不了哈哈50个铜板哈哈
routeros
回复

使用道具 举报

发表于 2011-11-9 00:34:24 | 显示全部楼层
#找出含有“use”的已拨帐号,并根据其后面2位数判断出此帐号到期时间,并修改帐号名称。如:当前日期为“20111109”,帐号为“use30test333”,首次拨号成功后,帐号被改为“test333”,备注为“test333[20111109+30]到期”
routeros
回复

使用道具 举报

发表于 2011-11-9 01:09:54 | 显示全部楼层
這50個銅板挺牛逼的!
routeros
回复

使用道具 举报

发表于 2011-11-9 07:14:57 来自手机 | 显示全部楼层
呵呵好像以前有写。。。也好像昨天有人找我弄这个。。。无免费支持。。哥不是客服
routeros
回复

使用道具 举报

发表于 2011-11-9 07:46:26 | 显示全部楼层
看到之前也有人铜板要求解决问题,但我没见到过一个是已经付费的了
routeros
回复

使用道具 举报

发表于 2011-11-9 08:30:41 | 显示全部楼层
我想估计没人会为了这50个铜板而去解决这个问题。
routeros
回复

使用道具 举报

发表于 2011-11-9 08:36:53 | 显示全部楼层

正解,如果是50积分我会考虑下。论坛现在想要积分太难了,想提高下权限都不知道要何年何月
routeros
回复

使用道具 举报

发表于 2011-11-9 12:15:12 | 显示全部楼层
还不如拿钱直接点,老大们都看不上这50铜板
routeros
回复

使用道具 举报

发表于 2011-11-9 16:58:51 | 显示全部楼层
给个500RMB还要考虑一下呢
routeros
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-11-24 07:39 , Processed in 0.065921 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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