The following discussion is an archived debate. Please do not modify it. Subsequent comments should be made in a new section. The result of the discussion was Approved.

Operator: Chzz

Automatic or Manually assisted: According to the comment here, I have to say "Automatic" - although I intend to check all edits at runtime, keypress for each edit, etc. We're talking small numbers here.

Programming language(s): c#

Source code available: If needed, sure; apart from the framework (dotnetwikibot), it'll be about 5 lines of code

Function overview: deliver ad-hoc messages to members of the WikiProject Zoroastrianism. Ie given manually edted list from Wikipedia:WikiProject Zoroastrianism/Participants (active), to add a ((subst:whatever)) to the end of those users talk pages, to update them on the project status. Later, this could be used for other projects, but of course I would seek additional approval.

Edit period(s): occasional runs, prob less than 15 mins

Estimated number of pages affected: 50

Exclusion compliant (Y/N): Y

Already has a bot flag (Y/N): N

Function details:

Will deliver a 'newsletter' message to members of the project group, via substitution of a template, at the end of their user page. It is simply quicker and more sensible to use a bot than to do it using AWB, etc. Yes, I know there are existing bots available, but I want to do make my own - partly so that I might be able to extend the functionality later.

 Chzz  ►  02:54, 8 October 2009 (UTC)[reply]

P.S. Now, also for the spotlight project, circa 30 users, once a month.  Chzz  ►  05:45, 11 October 2009 (UTC)[reply]

Discussion[edit]

This looks fairly straightforward. It's not uncommon for a bot to simply be approved to deliver to any WikiProject members, see WP:Bots/Requests for approval/KingpinBot for example. Would you prefer this? What code are you using to identify whether a user has ((bots)) on their page? What parameters will stop it? - Kingpin13 (talk) 09:41, 12 October 2009 (UTC)[reply]

It's opt-in, right? Can't see any issues if it's the projects choice for message delivery. --69.225.5.4 (talk) 00:49, 13 October 2009 (UTC)[reply]

Note that there are, I believe, a number of bots that will take this task on for you. Rich Farmbrough, 01:31, 13 October 2009 (UTC).[reply]
Responding to the above questions;
  • At the moment, it will not deliver to a page that contains either "((bots" or "((nobot" - instead, it will write to a local log that it could not deliver to that page, and I investigate further manually. Is that acceptable?
  • Also, it will not create a page, or deliver to a redirect - again, the issue is logged locally for manual check.
  • I will also ensure that every newsletter has a way to 'unsubscribe' - like the bottom part in Spotlight's September newsletter.
  • I am aware of existing bots, but I would like to do this myself - partly so I gain experience in bot programming.
  • Kingpin, yes, if this could be approved to deliver for any Wikiproject (subject to the precautions stated), then that would be great, as it means I could offer to help other projects as required.
This seems, to me, like a good first program area for someone who would like to write bots, especially limited to the task for just one project. I don't feel strongly about that limit, though. --69.225.5.4 (talk) 04:54, 13 October 2009 (UTC)[reply]
Have you got a limit on your edit rate? If not then the best thing to do would be to create a new thread for the newsletter delivery function, and then call Thread.Sleep(xxx); in-between each page save. Or you could just call Thread.Sleep(xxx); in the main thread, but it will make the dialog box stick. Alternatively you could use a timer. Or maybe you've already added a limit your own way? :) - - Kingpin13 (talk) 07:19, 13 October 2009 (UTC)[reply]
69.225.5.4, note that I added a P.S. to make it 2 projects - I don't really mind if I have to ask here if more come along; or if this request covers other projects - whichever way you folks prefer.
Kingpin13, in local testing, I've used a System.Threading.Thread.Sleep(10000) between each write, which is ages. I haven't used any dialogue boxes, as it was console-only. What is the 'approved' value for the Thread.Sleep?  Chzz  ►  09:17, 13 October 2009 (UTC)[reply]
For non-urgent tasks it should be approx. 10 seconds between edits, so 10 000 (as you have it at the moment) is good (I believe that Thread.Sleep is in milliseconds?). Just to be on the safe side, could you filter out non-user talk pages from your pagelist if you haven't already done so? - Kingpin13 (talk) 11:12, 13 October 2009 (UTC)[reply]
Yes, milliseconds, so yes, 10s.
I hadn't excluded non-talks - the participant lists are pretty clean - but I have now put in that check. I've said 'if it's not in namespace 3, don't add it, just report it as an error".  Chzz  ►  01:14, 14 October 2009 (UTC)[reply]
P.S. It also has code to avoid redirects, only process "user talk:", and to check if the template already exists on the page  Chzz  ►  03:13, 14 October 2009 (UTC)[reply]

This is a fairly useful, common, non-controversial task. So you are  Approved. to deliver notices/newsletters to members of WikiProjects where the project has requested that the bot do so. - Kingpin13 (talk) 16:57, 14 October 2009 (UTC)[reply]

The above discussion is preserved as an archive of the debate. Please do not modify it. Subsequent comments should be made in a new section.